Son yazımda 3Dfx ve onun Mesa donanımını hızlandırma
sığasının ne kadar iyi olduğunu yazmıştım. Mesa+3Dfx
kullanmanın üstünlükleri ve yitirimleri (disadvantages)
üzerinde durmuştum. Bu kez bu üstünlüklerin bazılarının
ayrıntısına girmek ve bir geliştirmecinin bunlara nasıl
ulaşabileceğine değinmek istiyorum.
Ana pencere içinde altpencere yaratmak için GLUT kitaplığının
nasıl kullanılacağını açıklayan, Miguel'in
yazısından başlayalım. Altpencere kullandığınız zaman ana
pencerenin içeriğinden bağımsız olarak yeni bir içerik yaratılır.
Ne yazık ki Mesa için kullanılan 3Dfx sürücüsü bir anda sadece tek
bir içeriği destekler. Eğer 3Dfx üzerinde altpencere kullanmaya
çalışırsanız ana pencere içinde alt pencere görüntüleştirmek yerine,
ana pencerenin üzerinde bir alt pencere görüntüleştirilir. Bu durum
sırayla ana pencerenin ve alt pencerenin çok hızlı görüntüleştirilmesi
etkisi yaratır. Açıktır ki bu, alt pencereden beklediğimiz etki değildir.
Bu yüzden alt pencerelerde matris yığıtlarını kullanarak nasıl
bu sorundan uzaklaşılacağını öğrenmek için Miguel'in ilerideki
açıklamalarını beklemek zorundasınız.
İkinci olarak 3Dfx ile tam ekran kullanırken mouse odaklamasını
korumak sorununun nasıl aşılacağını göstermek istiyorum. 3Dfx ile
tamekran görüntüleştirmeyi kullanırken, görüntüleştirme 2 boyutlu
video adaptörünün çerçeve arabelleği yerine 3Dfx'in çerçeve arabelleğine
yapılır. Sonuçta pencere 2 boyutlu masaüstübilgisayarınız üzerindeki
programınız için yaratılır fakat program için görüntüleştirmenin tümü
3Dfx'e tam ekran olarak yapılır. Tek kafalı sistem üzerinde, 3Dfx monitör
üzerinde yer alır ve 2 boyutlu masaüstübilgisayar üzerinde pencere
göremeyebilirsiniz, ama iki kafalı bir sistemde, bir monitör 2 boyutlu
masaüstübilgisayar ve program için yaratılan pencereyi gösterir ve diğer
monitör de programı tam ekran görebilirsiniz.
Pencereyi göremediğiniz için 2 boyutlu masaüstübilgisayar üzerinde
tek kafalı sistemlerde pencere odaklamasını korumak genelde zordur.
2 boyutlu masaüstübilgisayar üzerindeki programın penceresi odaklamasını
kaybederse, bilgi girişini alması mümkün olmayabilir. Kullanıcı,
tasarlanan çıkış tuşuna bastığı zaman, program girişi kabul
edemezse ve kullanıcı, pencere üzerindeki çıkış düğmesinin yerini
göremezse, kullanıcı programı kapatamayabilir!
Bu sorunu gidermek amacıyla glutFullScreen() ve glViewport()
fonksiyonlarını kullanabilirsiniz. glutFullScreen() fonksiyonu
program penceresini 2 boyutlu masaüstübilgisayarın boyutlarına
getirir ve böylece pencere 2 boyutlu masaüstü bilgisayar üzerinde
tam ekran durumuna gelir. Bir pencereyi, yaratımından sonra
2 boyutlu masaüstübilgisayar üzerinde tam ekran durumuna getirmek
için yapabileceğiniz şey glutFullScreen()'i çağırmaktır.
Pencere tam ekran durumunda olduğu zaman farenin pencere dışına
çıkması gibi bir durum yoktur, bu yüzden pencere odaklamasını kaybedemez.
glViewport() fonksiyonu program için hangi büyüklükte viewport'un
kullanılacağını belirtir. Viewport'u belirlediğiniz zaman görüntüleştirmenin
tümü bu viewport içinde yapılır. Viewport'u pencerenin yeni boyutlarına
uyarlamak için olağan olarak, bir yenidenbiçimleme geriçağırma
fonksiyonu içinde glViewport()'u çağıracağınız, 3Dfx için glViewport()'u
3Dfx çözünürlüğünün boyutlarıyla çağırınız. Bu fonksiyonu; 640x480
çözünürlükte 3Dfx'i çalıştırıyorsanız glViewport(0,0,640,480) şeklinde,
800x600 çözünürlükte çalıştırıyorsanız glViewport(0,0,800,600) şeklinde
çağırabilirsiniz. Bu, pencere tam ekran olmasına rağmen viewport'un
boyutlarını 3Dfx kartınızın çözünürlüğü olarak vermenizi sağlar.
Bu yazıya Miguel'in 3Dfx üzerinde çalışmak için değiştirilmiş
düzgün şekilli üçgeninin bir sürümünü dahil ettim (
../../common/March1998/example3.c, ../../common/March1998/Makefile). Altpencereleri
dışladım, glutFullscreen() fonksiyonunu uygun yere ekledim (pencere
yaratılması sonrasına), ve glViewport()'u yenidenbiçimleme
geriçağırma fonksiyonunda, viewport'u 640x480'e (benim 3Dfx kartımın
çözünürlüğü) zorlamak için değiştirdim. 3 boyut olmaksızın programı
çalıştırıyorsanız ( MESA_GLX_FX donanım değişkenlerini ayarlamaksızın)
program penceresinin masaüstübilgisayarınızın boyutlarında açılacağına
dikkat edin. Fakat görüntüleştirme bu pencere içinde yalnızca 640x480
alanında yapılır. Eğer programı 3Dfx ile çalıştırıyorsanız işlemlerin
3Dfx'in tam boyutlarında yapıldığını göreceksiniz ve program bu durumda
odaklamasını kaybedecektir.
Dikkat edilecek diğer bir nokta da, programı 3Dfx olmadan
çalıştırdığınızda, yalnızca viewport'un güncellenmesi yerine tüm
ekranın güncellenmesinden dolayı, programın gerçekten çok yavaş
çalışacağıdır. Bu 2 boyutlu masaüstübilgisayar kullandığınızda
oldukça büyük bir başarım (performans) sorunudur fakat 3Dfx'de
tam ekran kullanıldığında oldukça iyidir. Bu nedenle, 3Dfx'in
kullanılıp kullanılmadığını algılayabilmek için programlarınızı
( MESA_GLX_FX çevre değişkenini algılayıp okuyarak)
yazmak isteyebilirsiniz. 3Dfx'in algılanması durumunda
glutFullScreen()'le glViewport()'u zorlama düzenini kullanmak
3Dfx'in algılanmaması durumundaysa kullanmamak seçenekleri de
programda içerilir.
|