Thread overview
SDL2 D ilintisi hakkında...
Aug 09, 2012
Salih Dinçer
Aug 09, 2012
erdem
Aug 09, 2012
Salih Dinçer
Aug 09, 2012
erdem
Aug 09, 2012
Salih Dinçer
Aug 09, 2012
erdem
Aug 09, 2012
Salih Dinçer
Aug 10, 2012
Salih Dinçer
Aug 22, 2012
Salih Dinçer
August 09, 2012

Merhaba,

İki gündür SDL2 ilintisini D'ye uyarlamaya çalışıyorum. Bir kaç sorun ile debelendikten sonra, sonunda aşağıda ekran görüntüsü bulunan ilk örneğimi çalıştırabildim...:-D

http://desmond.imageshack.us/Himg98/scaled.php?server=98&filename=ekrangrntstv.png&res=crop
Büyüğü için tıklayınız... (http://imageshack.us/photo/my-images/98/ekrangrntstv.png/)

Bu örneği (http://hg.libsdl.org/SDL/file/470bc1333b09/test/testspriteminimal.c) denemelisiniz! Çünkü ekrana yüzlerce dolaşan resim (-bknz. bunun kullandım ama SVG, BMP'ye çevirmelisiniz (http://www.clker.com/cliparts/j/y/B/I/m/J/sun-star-bw.svg)) rasgele basıyor ve bunlar ekran sınırları içerisinde istediğimiz hızda (MAX_SPEED) hareket ediyor. İsterseniz sayısını (NUM_SPRITES) da değiştirebiliyorsunuz...

Özellikle SVG'den temiz bir görüntü yansıtmak istedim. Amacım basit ama nitelikli (şeffaf) bir test yapmaktı. SDL2 hiç fena görünmüyor! Üstelik henüz yüzlerce işlevini deneme fırsatı bulabilmiş değilim...:)

Ama önce ilintiyi tamamlamalıyız; takıldığım bir kaç noktada yardımınıza ihtiyacım var:

  • Öncelikle bazı enum'lar isimsiz, bazıları isimli. İsimlileri de isimsiz yapmak gerekli mi? Çünkü ilintiler içinden bu değerler çağrıldığında isim ön ekini nokta ile beraber (örn. SDL_EventType.SLD_QUIT) kullanmamız gerekiyor. Oysa C ilintilerinde bu şart koşulmamış!

  • Belki de bu daha önceliklidir çünkü C'de define'lar ile tanımlanan işlev benzeri macro'lar var. Bunların basit olanlarını macro'yu dağıtarak hallediyorum ama karmaşıklar için işlev mi yazmamız gerekiyor? İşte bu en çok sıkıntı çektiğim nokta. Baksanıza adam tek satırda halletmiş ve ben can çekişmişim! Hadi iki satıra bölmüş diyelim, malum 80 sütuna sıkıştırma mevzusu...:)
    Alıntı:

>
> //#define SDL_QuitRequested() \
> //(SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT)>0))
> bool SDL_QuitRequested() {
>   SDL_PumpEvents();
>   if(SDL_PeepEvents(null, 0, SDL_eventaction.SDL_PEEKEVENT,
>                              SDL_EventType.SDL_QUIT,
>                              SDL_EventType.SDL_QUIT) > 0) {
>     return true;
>   }
>   return false;
> }
> ```

>

* Hoş typedef'ler de zaman zaman sıkıntı yapmıyor değil! Örneğin şunu doğru yaptığımı düşünsem de **sdl2d/events.d(501): Error: SDL_TimerCallback is used as a type** hatasını alıyorum...

Alıntı:
>
>
>

//typedef int (SDLCALL * SDL_EventFilter) (void userdata, SDL_Event * event);
extern(C) int function(void
userdata, SDL_Event* event) SDL_EventFilter;

>

Bunda da ama bunun derdi başka çünkü yanında bir işlev ve takma isim var:

Alıntı:

>
> /**
>  *  Function prototype for the timer callback function.
>  *
>  *  The callback function is passed the current timer interval and returns
>  *  the next timer interval.  If the returned value is the same as the one
>  *  passed in, the periodic alarm continues, otherwise a new alarm is
>  *  scheduled.  If the callback returns 0, the periodic alarm is cancelled.
>  */
> typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param);
>
> /**
>  * Definition of the timer ID type.
>  */
> typedef int SDL_TimerID;
>
> /**
>  * \brief Add a new timer to the pool of timers already running.
>  *
>  * \return A timer ID, or NULL when an error occurs.
>  */
> extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval,
>                                                  SDL_TimerCallback callback,
>                                                  void *param);
> ```

>

Yukarıdaki ilintiyi şu şekilde D'ye uyarlayınca da aynı hatayı alıyorum...:(


extern(C) Uint32 function(Uint32 interval, void* param)SDL_TimerCallback;

alias int SDL_TimerID;

extern(C) SDL_TimerID SDL_AddTimer(Uint32 interval,
SDL_TimerCallback callback,
void* param);


Teşekkürler...

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
August 09, 2012

Çok hızlı bir cevap yazayım. Daha önce bahsettiğim gibi SDL 2 için C ilintileri yazmana gerek yok çünkü zaten yazılmış.

https://github.com/aldacron/Derelict3/tree/master/import/derelict/sdl2

Direkt buradan kullanabilirsin :-D

Bir de bildiğim kadarıyla SDL2 kullanımı ile ilgili yeterli belge yok. Eğer bulursan, buraya yazabilirsin.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 09, 2012

Ooo bu iyi oldu, oradaki bir kaç dosyada sorumun cevabı mutlaka vardır. Derelict'den faydalanmayı deneyeceğim, teşekkürler...:)

SDL2 belgesine gelince, biz deneyip yazacağız! İngilizce belgeler ile uğraşmaya gerek yok zaten geliştiricileri yazacaktır. Önemli olan kendi (D)ilimize (iki anlamlı!) yazmak. Aslında bakarsan yazmışlar da çünkü C ilintilerine baktığımda aralarda kimi zaman çok ayrıntılı bilgi var. Ayrıca şu verdiğim adresteki Wiki çok işimize yarayacaktır:

http://wiki.libsdl.org/moin.cgi/CategoryAPI

Bu arada çalışmalarımı GitHub'a yüklemeye karar verdim. Oradan takip edebilirsiniz çünkü gerçekten çok işlev var! Sanırım Derelict'de başlangıçta benim yaptığımı yapmış ve sadece işine yarar olanları çekip almış. Bence çalışmaya devam, hedefimiz framework! Bizim yabancılardan neyimiz eksik...:-D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 09, 2012

Alıntı (Salih Dinçer):

>

Örneğin şunu doğru yaptığımı düşünsem de sdl2d/events.d(501): Error: SDL_TimerCallback is used as a type hatasını alıyorum...

Alıntı:

>
> > //typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event);
> > ```

> >
>

Sanırım bu durumda senin örneğine sadece typedef eklemek gerekiyor.

extern(C)
{
typedef int function (void *userdata, SDL_Event * event) SDL_EventFilter
}



-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
August 09, 2012

Alıntı (Salih Dinçer):

>

Bu arada çalışmalarımı GitHub'a yüklemeye karar verdim. Oradan takip edebilirsiniz çünkü gerçekten çok işlev var!

Hadi bakalım! Merak ve heyecanla takip ediyor olacağım ;-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 09, 2012

Ali hocamın dediği şekilde deneyince şu hatayı aldım:

Alıntı:

>

sdl2d/timer.d(35): C-style function pointer and pointer to array syntax is deprecated. Use 'function' to declare function pointers

Erdem'in bahsettiği şekilde denediğim de ise depresyona giriyorum, çünkü yine deprecated yazıyor...:)

Alıntı:

>

sdl2d/timer.d(37): use of typedef is deprecated; use alias instead

Ama okuduğumu yanlış anlamıyorsam typedef yerine alias kullanmamı öneriyor ve çalışıyor...:)

Evet, tarihin en kısa depresyonunu geçiren olarak Guinness Records kitabına giriyorum, teşekkürler...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 09, 2012

Alıntı (erdem):

>

Bir de bildiğim kadarıyla SDL2 kullanımı ile ilgili yeterli belge yok. Eğer bulursan, buraya yazabilirsin.
SDL2wiki'ye yakın zamanda eklenmiş örnekli bir madde gördüm:

http://wiki.libsdl.org/moin.cgi/SDL_WaitThread

Sanırım buraya üye olup katkı da sağlayabiliyoruz. Böylece kullananların sayısı arttıkça SDL2 hakkında daha çok şey yazılıp çizilecek. Ben şimdiden Türkiye'de okuyan bir kaç öğrenciye tebliğ vazifemi yerine getirdim. Darısı diğerlerinin başına...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 09, 2012

Alıntı (Salih Dinçer):

>
  • Öncelikle bazı enum'lar isimsiz, bazıları isimli. İsimlileri de isimsiz yapmak gerekli mi? Çünkü ilintiler içinden bu değerler çağrıldığında isim ön ekini nokta ile beraber (örn. SDL_EventType.SLD_QUIT) kullanmamız gerekiyor. Oysa C ilintilerinde bu şart koşulmamış!

C'de enum değerler enum türü olmadan da kullanılabilirler ve o yüzden de farklı enum'ların değerleri birbirleriyle karışmasınlar diye isimlerinin başına kendi enum'larının türü gelir. C'de o yüzden QUIT değil, SDL_QUIT diyorlar (demek zorunda kalıyorlar).

Baştan tasarlanan bir D programı olsa enum'un adı EventType, değerlerinin adı da QUIT, vs. olabilirdi.

Bence ne değerlerin isimlerini değiştirmeli, ne de isimli enum'ları isimsiz yapmalı. Sonuçta bir ilinti... Hani SDL2'yi sarmalayan başlıbaşına bir modül yazıyor olsak belki o zaman daha serbest hareket ederiz ama sanki bir ilintinin C'deki aslından fazla farklı olmaması gerekiyor diye düşünüyorum.

Alıntı:

>

macro'lar ... Baksanıza adam tek satırda halletmiş

Makroların sıkıntılı ve sorunlu oldukları konusunda şüphe yok. Olabilse, hiç makro kullanılmasın ama bazen mecbur kalınır. (Bjarne Stroustrup C++'tan çıkartmaya çalışmıştır ama bazı durumlarda şarttır.)

Alıntı:

>

Alıntı:

>
> > //typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event);
> > extern(C) int function(void* userdata, SDL_Event* event) SDL_EventFilter;
> > ```

> >
>

Sanırım bir 'extern(C)' bildiriminde 'function' sözcüğü geçmemeli. Hiç denemeden şunu öneriyorum :):


extern(C) int (SDL_EventFilter)(void userdata, SDL_Event* event);



Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
August 10, 2012

Alıntı (Salih Dinçer:1344527246):

>

Merhaba,

İki gündür SDL2 ilintisini D'ye uyarlamaya çalışıyorum. Bir kaç sorun ile debelendikten sonra, sonunda aşağıda ekran görüntüsü bulunan ilk örneğimi çalıştırabildim...:-D

http://desmond.imageshack.us/Himg98/scaled.php?server=98&filename=ekrangrntstv.png&res=crop
Büyüğü için tıklayınız... (http://imageshack.us/photo/my-images/98/ekrangrntstv.png/)
Bugün gereksiz dosyaları temizlerken, yukarıdaki ekran görüntüsüne denk geldim ve bir kere de yakından baktım. Malum, gözlerimizin algılamayacağı bir biçimde (sanırım saniyede 24 kareye kadardı) ekran yeni baştan icraa ediliyor. Meğer, bu 512 beneklik (pixel) yüksekliğe sahip resmi, yanlış saymadıysam 8 parçaya bölmüş ve güncellemiş! Dikkatli bakarsanız, şekillerin çakıştığı noktalar arasında eşit uzaklıktaki sanal çizgileri siz de görebilirsiniz...

Aynı denemeyi bir de SDL 1.3'de yapmalı. Belki de ekranı segment'lere bölmesi başından beri vardı...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 22, 2012

Bugün SDL ilintilerinin hazırlanma çalışması sırasında tartışılan şu başlığa denk geldim: http://ddili.org/forum/thread/539

İlinti hazırlamaya yönelik faydalı bilgiler var...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]