Displaylist Kullanımı:
Displaylist 'ler uygulamalarımızda bize hızlı işlem yapma olanağı kazandıran
oldukça yararlı yapılardır. Basit olarak: bir dizi OpenGL komutunu çalıştırılmak
üzere bir displaylist içine toplarsınız ve o listeyi oluşturursunuz. Daha sonra bu
displaylist 'i uygulama komutunu her verdiğiniz zaman yaptığınız tüm işlemler
hızlı bir biçimde OpenGL sistemi tarafından uygulanır.
Displaylist 'leri kullanmanın şüphesiz en büyük getirisi bize hız
kazandırmalarıdır. Örneğin bir dizi OpenGL işlemini (çizim, transformasyon, durum
değişimi vb.) devamlı olarak uygulamanız gerektiği durumlarda displaylist 'ler içerisinde
bu uygulamayı yaparsanız bu komutların daha hızlı biçimde gerçekleştirildiğini görürsünüz.
Çünkü her görüntü oluşturma işlemi sırasında poligon çizimleri ile ilgili
emirler ve durum değişikliği komutları OpenGL sisteminde görüntü oluşturma
döngüsü içerisinde en baştan işlenmek zorunda olacaktı. Displaylist içerisinde bu
komutları verdiğiniz zaman ise, OpenGL sistemi gerekli optimizasyonları yapar ve
displaylist 'i uygulama komutu geldiğinde içindeki yönergeleri daha hızlı bir
biçimde işler.
Şimdi basit bir örnek ile diplaylist kullanımını görelim. İlk olarak OpenGL
sisteminden oluşturacağımız displaylist için kullanacağımız bir tanıtıcı numara
(id) istiyoruz.
int id;
id = glGenLists(1);
OpenGL sistemi içerisinde birçok displaylist tanımlayabilirsiniz. Her displaylist
diğerinden bir sayı ile ayrılır. Yukarıdaki fonksiyon sistemden böyle bir numara
almamızı sağlar. Şimdi ise bu numarayı kullanarak diplaylist oluşturma komutunu
verelim:
glNewList(id,GL_COMPILE);
İlk parametre biraz önce aldığımız id değeridir. İkinci parametre ise
diplaylist 'in türünü belirtmekte kullanılır. Bu parametre neredeyse tüm pratik
kullanımlarda GL_COMPILE şeklinde olmalıdır. Artık sırada displaylist içine
istediğimiz OpenGL komutlarını girmeye geldi. Bu komutlar diplaylist çağırıldığı
zaman otomatik olarak uygulanacaktır. Biz örneğimizde kırmızı bir üçgen
çizdirelim:
glColor3f(1,0,0);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
Son olarak ise diplaylist 'i sona erdiren komutu kullanmalıyız.
glEndList();
Artık displaylist 'imiz oluşturulmuş ve kullanılmaya hazır haldedir. Şimdi
programlarınızda bir üçgen çizdirmek istediğiniz herhangi bir yerde glCallList(id);
diyerek diplaylist 'i uygulayabilir ve kırmızı üçgeninizi çizdirebilirsiniz. GLUT
programlarınızda renderScene() yordamı bu çağırımı yapmanız gereken yerdir.
glCallList(id);
Displaylist 'ler OpenGL uygulamalarınızı daha hızlı hale getirmek için
kullanabileceğiniz en basit ve kullanımı kolay yöntemlerden biridir. Özellikle bir
seri çizim işlemini birçok defa uygulamanız gerektiği durumlarda diplaylist 'leri
kullanmanızı şiddetle tavsiye ederim.
Deniz Aydınoğlu :: 2002 ::