folder Tahribat.com Forumları
linefolder C - C++
linefolder Taşınabilirlik Nasıl Sağlanıyor?



Taşınabilirlik Nasıl Sağlanıyor?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SkynetX
    SkynetX's avatar
    Kayıt Tarihi: 06/Şubat/2015
    Erkek

    Platformlar arası taşınabilirlik nasıl sağlanıyor? Alt katmanda her platform için ayrı katmanlar yazılıp daha sonra bir üst katmanda bu farklılıklar saklanıyor mu?

    Konuyu anlatabilmem için GTA5 örneğini vereyim. PS3, PS4, Windows, XBOX üzerinde çalışıyor bildiğimiz gibi. Bu oyunda  kullanılan motorda RAGE.

     

    Şimdi bu RAGE motoru yazılırken her platform için farklı katmanlar mı var? Windows için win apilerini kullanan bir katman, ps3 için bu cihazın özel apileri, xbox için cihaza özel apiler kullanılıp daha sonra bir ek katmanla tüm bu farklılıklar kaldırılıyor mu?

     Bu konuda bilgisi olan mürid var mı? Araştırmam için anahtar kelimeler neler?

     

    Konu C/C++ ile ilgili olduğu için buraya açtım.

    SkynetX tarafından 21/Şub/16 16:03 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    C++ için preprocessor commands.

     

    İşin olayı şu SOYUTLAMA. Mesela OpenGL de çizgi çiz diye bir fonksiyon var, DirectX dede aynı karşılığı var ama kullanımları farklı.

     

    Adamlar öyle bir fonksiyon yazıyor ki, cizgiCiz diye. windows da ise directx in komutlarını, linuxde ise opengl 3 komutlarını, mobildeyse opengl ES komutlarını, xboxda ise directx i kullanıyor...

     

    Diğer taraftan ortak kod kullanmak gerek. Standartları bilmek burada çok önemli..

     

    http://stackoverflow.com/questions/33238345/are-c-applications-cross-platform

     

    Bir örnek:

     

    ifdef _WIN32
       //define something for Windows (32-bit and 64-bit, this part is common)
       #ifdef _WIN64
          //define something for Windows (64-bit only)
       #endif
    #elif __APPLE__
        #include "TargetConditionals.h"
        #if TARGET_IPHONE_SIMULATOR
             // iOS Simulator
        #elif TARGET_OS_IPHONE
            // iOS device
        #elif TARGET_OS_MAC
            // Other kinds of Mac OS
        #else
        #   error "Unknown Apple platform"
        #endif
    #elif __linux__
        // linux
    #elif __unix__ // all unices not caught above
        // Unix
    #elif defined(_POSIX_VERSION)
        // POSIX
    #else
    #   error "Unknown compiler"
    #endif

     

     

    DrKill tarafından 21/Şub/16 19:37 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Standartlar var. Örneğin C'deki printf işlevi her platformda aynı işi yapar, aynı parametrelerle çalışır çünkü standartta belirtilmiştir. Görevi standart çıkışa biçimlendirilmiş şekilde karakter katarı göndermektir. Bu şu demek, X platformunda standart çıkış ekrana gönderirken y'de ise bir dosyaya yazabilir çünkü y'nin ekran gibi bir birimi yoktur. Zaten konsol olayı hep burada karıştırılır. printf denince biz ekrana yazı yaz anlarız ama aslında ekran C için bir akıştan daha fazlası değildir. Zaten C ekranın ne olduğunu bilmez. Bizim terminal emülatörleri stdout'u kendine yönlendirir ve gösterir.

    Kısa bir deyişle: Standarda uyan ve platforma özgü hiçbir yeteneği (API, kesme...) kullanmayan kod parçacığı, standarda uyan derleyici ile her zaman derlenir. 

    Bir gui toolkiti ele alalım. Toolkit'in arayüzü standartlaştırılmış olsun. Bu gui alt seviye işlemleri Windows'ta winapi kullanarak (DC'ler vs.), Linux ve Unix'te ise X sunucusunu kullanarak gerçekleştirir. Programcı alt seviye işlemlerin nasıl gerçekleştiği ile ilgilenmez sadece gui'nin kendi sunduğu olanakları (arayüz de diyebiliriz NYP'ye selam çakarak) bilse yeterlidir.

    Sizin durumda şöyle gerçekleşmiştir: Oyun motorunun (RAGE) arayüzü bellidir (karakter sağa git, zıpla, uç vs.). G/Ç işlemleri için motorun alt seviye parçacıkları (joystickten bilgi oku, ekrana karakteri çiz) platforma özgü yazılır. Oyun hangi platformda derlenecekse o platformun derleyicisi (ya da çapraz derleyicisi) çalıştırılarak amaç program üretilir.


    Olaylara karışmayın!
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SkynetX
    SkynetX's avatar
    Kayıt Tarihi: 06/Şubat/2015
    Erkek

    Anladım. Sonuçta her platform için illa bir katman yazılacak.

    Teşekkür ediyorum.

Toplam Hit: 2383 Toplam Mesaj: 4
portable portability taşınabilirlik taşınablir