2011-07-06 19 views
7

OpenGL içeriğiyle win32 penceresini yeniden boyutlandırırken, yalnızca yeni açığa çıkan alanda siyah gösterilir. Yeniden boyutlandırırken WM_PAINT iletisi alıyorum ve yeni içerik oluşturmaya çalışıyorum, ancak yeniden boyutlandırılırken SwapBuffers'ın hiçbir şey yapmadığı anlaşılıyor.win32 penceresini yeniden boyutlandırırken OpenGL içeriği nasıl çizilir?

Yeniden boyutlandırırken "yeniden boyutlandırılan" içerik olmaması için pencere yeniden boyutlandırmalarının doğru şekilde nasıl işlenmesi gerekir?

+0

* Yeniden boyutlandırma veya * yeniden boyutlandırırken *? – cHao

+1

_While_ yeniden boyutlandırma. – scoopr

+0

ile ilgili: http://stackoverflow.com/questions/3267243/in-opengl-how-can-i-adjust-for-the-window-being-resized – zwcloud

cevap

6

Bu, genellikle, pencere sınıfınız için yapılandırılmış bir arka plan fırçanız varsa oluşur (bkz. WNDCLASS veya WNDCLASSEX yapısı). Bir fırça varsa, sistem her yeniden çizim adımından hemen sonra pencereyi temizler, ardından WM_PAINT dosyasını gönderir. V-Senkronize Edilmiş SwapBuffer'lar söz konusu olduğunda, resminiz tampon değiştirme gerçekleşmeden önceki bir sonraki yeniden boyutlandırma adımı tarafından aşırıya kaçmış olabilir, ya da hemen sonra, ancak ekranın o kısmı ekran aygıtına gönderilmeden önce.

Her iki durumda da, çözüm pencerenin arka plan fırçasını NULL olarak ayarlamaktır. Ayrıca WM_ERASEBKGND mesaj işlemine müdahale etmek sonuç verebilir. Geçen çerçevenin içeriği görünür kalırsa nedeniyle

DÜZENLEME

yorum yapmak, muhtemelen sadece bir yeniden düzenleme ile yeniden boyutlandırma tepki yok. Bunun en kolay çözümü, WM_SIZING (veya WM_SIZE, her ikisini de denemek) mesaj işleyicisinden çizim fonksiyonunu çağırmaktır.

+0

Cevabınız için teşekkür ederiz. Arka plan fırça setim yok ve WM_ERASEBKGND'yi işlemeye çalışıyorum. Sorun şu ki, pencere temizlenmez, ancak son çizilmiş çerçeve sol üst köşeye bırakılır. – scoopr

+0

WM_SIZE sırasında da oluşturmayı denedim, yine bir etkisi yok gibi görünüyor. Yeniden boyutlandırırken WM_SIZE veya WM_PAINT içinde her iki olayı, WM_SIZE ve WM_PAINT gibi aldığımdan çizmem sorun değil. – scoopr

+0

Hangi Windows sürümünü kullanıyorsunuz? Eğer Vista veya 7, Aero pencere birleştirme sistemini devre dışı bırakırsanız ne olacağını deneyin. – datenwolf

İlgili konular