Thread overview
sdl2d GitHub'da...
Aug 09, 2012
Salih Dinçer
Aug 09, 2012
Salih Dinçer
Aug 09, 2012
erdem
Aug 09, 2012
Salih Dinçer
August 09, 2012

Merhaba,

Hesaba göre %50'si tamam ama uğraşmak istemediklerimi (örn. devasa OpenGL kütüphanesini!) saysaydım herhalde %10'u bitmiş olmalı. Ancak üç temel bölüm (Basic, Input, Video) dikkate alınırsa neredeyse bitmek üzere...:)

https://github.com/salihdb/sdl2d/

İmece usulü OpenGL'ye de el atsak mı? Belki de hiç gerek yok sonuçta SDL işlevleri üzerinden kullanıyoruz. Ama belki de bir gün gerekebilir.

Dip Not: Biraz amatörlüğüme geldi sdl2d içinde bir sdl2d daha oluşturmuşum.

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

August 09, 2012

Depoyu henüz yeni güncellemişken (bence bunu adet haline getirmemeliyim, gün aşırı güncelleme yeter!) ek düzenlemeler yaptım. Tabi bu Ali ve Erdem sayesinde şu başlıkta (http://ddili.org/forum/post/7296) gerçekleşti. Yoksa hala "SDL_TimerCallback is used as a type" hatasına kafa yoracaktım...:)

Son durum şöyleydi ve 'yüzde 99 ile 98'ler' tamamına erdi:

'Basics

  • Init : 100% (0/9) Unclassified...
  • Include : 50% (8/9) Macros
  • Error : 100% (3/9)
    ' - Timer : 99% (9/9) SDL_TimerCallback'
  • RWops : 50% (2/9)
  • Clipboard : merge
  • Log : skip
  • Assertions : 0% (1/9)
  • Version : skip
  • Quit : merge
    Input Events
    ' - Events : 99% (2/9) SDL_EventFilter'
  • Keyboard : 100% (5/9)
  • Keycode : 100% (6/9)
  • Scancode : 100% (8/9)
  • Gesture : 100% (1/9)
  • Mouse : 0% (7/9)
  • Touch : 100% (9/9)
  • Joystick : skip
  • Input : merge
    Video
    ' - Video : 98% (9/9) Macros'
  • Render : 100% (6/9)
  • Blit : 35% (1/9) Macros
  • Pixels : 80% (4/9) Macros
  • Blendmode & Shape : merge
    ' - Rect : 98% (5/9) Macros'
  • Surface : 100% (7/9)
  • OpenGL : skip
  • SWM : skip'

Ancak şüpheli(emin olmadığım) durumlar var! Örneğin stdinc.d dosyasına birleştirdiğim SDL_quit.h içindeki bir macro'yu Derelict functions.d (https://github.com/aldacron/Derelict3/blob/master/import/derelict/sdl2/functions.d) içinde şu şekilde uyarlamış:

Alıntı:

>
> // SDL_quit.h
> nothrow bool SDL_QuitRequested()
> {
>     SDL_PumpEvents();
>     return SDL_PeepEvents(null, 0, SDL_PEEKEVENT, SDL_QUIT, SDL_QUIT) > 0;
> }
> ```

>

Bu gayet basit ve hızlı bir çözüm olmuş; benim gibi uğraşmamış...:)

bool SDL_QuitRequested() {
SDL_PumpEvents();
if(SDL_PeepEvents(null, 0, SDL_eventaction.SDL_PEEKEVENT,
SDL_EventType.SDL_QUIT,
SDL_EventType.SDL_QUIT) > 0) {
return SDL_bool.SDL_TRUE;
}
return SDL_bool.SDL_FALSE;
}///
/
SDL_bool SDL_QuitRequested(void)


Ben ise Source'da adresini verdiğim sayfaya dayanarak (ki bu ikinci düzeltmem!) yukarıdaki gibi yaptım. SDL_bool, aşağıda göreceğiniz üzere bir struct içinde iki üyeli enum var. Ancak D işlev değerini bool olarak döndürmemi istiyor. Bir yerde yanlış mı yapıyoruz?
Alıntı:
>
>
>

extern(C) struct SDL_bool {
enum {
SDL_FALSE = 0,
SDL_TRUE = 1
}
}

>

Sevgiler, saygılar...

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

August 09, 2012

Bence kod içinde çalışıyorsa hiç problem değil.

#define SDL_QuitRequested() \
(SDL_PumpEvents(), SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUITMASK))

Konuştuğumuz C makrosu da bu :-)

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

August 09, 2012

Bunları hatırlattığın iyi oldu hocam, sonuçta pratik olmak lazım...:)

Bu arada konuyla ilgili şeyi (artık struct mıdır yoksa enum mudur) denedim de üçü de çalışıyor! Hayret değil mi?

/*
alias int SDL_bool;
 enum {
   SDL_FALSE = 0,
   SDL_TRUE = 1
 }//*/
//*
 enum SDL_bool {
   SDL_FALSE = 0,
   SDL_TRUE = 1
 }//*/
/*
extern(C) struct SDL_bool {
 enum {
   SDL_FALSE = 0,
   SDL_TRUE = 1
 }
}//*/

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

August 09, 2012

Alıntı (Salih Dinçer):

>
>     return SDL_PeepEvents(null, 0, SDL_PEEKEVENT, SDL_QUIT, SDL_QUIT) > 0;
> ```

>

Tabii ki öyle olmalı. :) Diğer konuda dilimin ucuna kadar gelmişti de söylemekten vazgeçmiştim. Mantıksal ifadelerin açıktça false veya true olarak yazılmaları da kişisel bir konu olarak görülüyor. Bazı arkadaşlarım şöyle yazmakta ısrarcılar:


if (birMantıksalİfade == true)



Oysa birMantıksalİfade zaten bir mantıksal ifade olduğundan şöyle olmalı:


if (birMantıksalİfade)



Çünkü bu işin sınırı yok. Uzun yazanlar neden eşitlik karşılaştırmasının sonucunu da true ile karşılaştırmıyorlar?


if ((birMantıksalİfade == true) == true)



:)

Salih, sözüm sana değil; kodun hatırlattığı bir şeyi yazdım.

SDL_bool konusunda da C'nin ve C++'ın yine önceki konuda bahsettiğim enum isim alanlarıyla ilgili yetersizliğinin üstesinden gelmek istemişler.

Bence bu sorunu çözmek için değerlerin türlerini gözden geçirebilirsin. Örneğin sanırım SDL_FALSE gibi değerler int'tir. Bir çok çözüm bulunabilir.

Ali

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

Az farklı iki tane daha:

enum SDL_bool : bool {  // <-- bool ile gerçekleştirilmiş
   SDL_FALSE = false,
   SDL_TRUE = true
 }

void main()
{
   auto b = SDL_bool.SDL_TRUE;
   assert(b);
}
struct SDL_bool
{
   enum SDL_FALSE = false;  // <-- Bu enum'lar "derleme zamanında sabit"
                            //     anlamında :). Karışıklık olmasın.
   enum SDL_TRUE = true;
}

Ali

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