2011-07-27 19 views
5

OpenGL ve Visual Studio C++ uygulamasında bir lastik bandı bulmaya çalışıyorum. Karşılaştığım problem Win 7 bilgisayarlarıdır (yani patronum) ön tampona okumam veya çizmeme izin vermeyecek, bu sayede doğrudan çizim yapmaya başlayacaktır.OpenGl'de Lastik Bant Nasıl Yapılır

glDrawBuffer(GL_FRONT); 
glEnable(GL_COLOR_LOGIC_OP); 
glLogicOp(GL_XOR); 
glPolygonMode(GL_FRONT, GL_LINE); 
glRecti(X0, Y0, X1, Y1); 
X1 = X; 
Y1 = Y; 
glRecti(X0, Y0, X1, Y1); 
*//Doesn't draw lines* 

veya (uzun alacağını ona yeniden çizilmesi) arka tampon ön tampon kopyalama çizim bir swapBuffers çağıran ve daha sonra agian

glReadBuffer(GL_FRONT); 
glDrawBuffer(GL_BACK); 
glCopyPixels(0, 0, Width, Height, GL_COLOR); 

glEnable(GL_COLOR_LOGIC_OP); 
glLogicOp(GL_XOR); 
glPolygonMode(GL_BACK, GL_LINE); 
SwapBuffers(hdc); 
glRecti(X0, Y0, X1, Y1); 
X1 = X; 
Y1 = Y; 
glRecti(X0, Y0, X1, Y1); 
SwapBuffers(hdc); 
*//Doesn't display original drawing* 

herhangi bir fikir swaping?

+2

Herhangi bir hata var mı? Lütfen glGetError() ile deneme yapın. –

+0

@Martinho hata yok – kaiken

+1

"Lastik bant" anlamı ne? Sorunuza ulaşmaya çalıştığınız şeyi tam olarak açıklayabilir misiniz? –

cevap

1

böyle yapardım:

  • (geri tampon veya başka) bir ekran dışında tampon için sahneyi çekmek
  • kullanım glReadPixels ana belleğe
  • görüntüyü okumak dışında bir doku yapmak için görüntünün ana belleğinde

Bundan sonra, görüntüyü ekranda çizmek için, oluşturulan doku ile dokulu, tüm render alanını kapsayan tek bir dört çizebilirsiniz. Bu şekilde, görüntüyü ekrana çizerken gerçek sahneyi yeniden oluşturmaya gerek yoktur.

Modern OpenGL uygulamaları, görüntüyü ana belleğe ve geriye taşımaya gerek kalmadan dokuya da dönüşebilir. Sonra tekrar sahnenin oluşturulması zaten yavaşsa, burada performans farkı fark edilmeyecektir.

İlgili konular