Dikey senkronize edilmiş işlemler yapmaya çalışıyorum, böylece herhangi bir kareyi atlamadan veya yinelemeden, dikey senkronizasyon başına tam olarak bir işlem yapılır. Ben (gelecekte) Windows'u Windows 7 altında çalışacak ve bu gerekir 8. Temelde orijinal görüntülerden bir piksel 1 eşleşecek şekilde ekrana uyabilecek QUADS
dizisi çizim oluşacakDikey eşitlemede her tam olarak nasıl bir işlem yapılır (tekrarlama yok, atlama yok)?
: 1 bir Ekrandaki piksel. İşleme parçası, OpenGL veya DirectX ile bir sorun değildir. Sorun doğru senkronizasyon.
daha önce çekilmesi ve daha sonra) bir glFlush (birlikte bu iki talimatları tüm kombinasyonlarını ve permütasyon güvenilir
SwapBuffers(g_hDC);
glFinish();
arayarak, WGL_EXT_swap_control
uzantılı, OpenGL kullanarak güvenilir ve güvenilir değildir.
Sonra çekilmesi ve daha sonra g_pSwapChain
bir IDXGISwapChain*
ve pOutput
bu SwapChain bağlantılı IDXGIOutput*
olduğu
g_pSwapChain->Present(1, 0);
pOutput->WaitForVBlank();
arayarak, Direct3D 10 çalıştı.
Her iki sürümde, OpenGL ve Direct3D, sonuçta ortaya çıkar: 60 karelik ilk dizi, ne gerekiyorsa dayanmaz (60hz'de yaklaşık 1000ms yerine, 1030 veya 1050 ms gibi bir şey sürer), Aşağıdakiler iyi çalışıyor (yaklaşık 1000.40 ms), ama her şimdi ve sonra bir kare atlamak gibi görünüyor. Ölçümü QueryPerformanceCounter
ile yapıyorum.
Direct3D'de, yalnızca WaitForVBlank'ın bir döngüsünü denerken, 1000 yineleme süresi tutarlı bir şekilde 1000.40 küçük bir değişkedir.
Buradaki sorun, tam olarak geri dönüş adı verilen işlevlerin ne zaman olduğunu ve takasın dikey senkronizasyon sırasında (daha önce değil, yırtılmayı önlemek için) yapılıp yapılmadığını bilmemektedir.
İdeal olarak (eğer yanılmadıysam), istediğimi elde etmek için, bir render gerçekleştirmek, senkronizasyon başlatana kadar beklemek, senkronizasyon sırasında takaslamak ve ardından senkronizasyon tamamlanana kadar beklemek olacaktır. OpenGL veya DirectX ile nasıl yapılır?
Düzenleme: sadece WaitForVSync
60x bir deney döngü 1000.30ms gelen 1000.50ms tutarlı sürer. Present(1,0)
ile aynı döngüde, başka hiçbir şey olmadan, görüntü oluşturma işlemi aynı zamanda gerçekleşmez, ancak bazen bir çerçeve tekrarlanıyormuş gibi 1017 ms alır ve başarısız olur. Görüntü yok, burada yanlış bir şeyler var.
Bu DX10'da da var mı? Aygıtı, D3D10CreateDeviceAndSwapChain' ile oluşturduğumda, herhangi bir Mevcut Parametre bulunmadığını söyleyebilirim. – slazaro
Korkarım ki DX10 bu seçeneğe sahip değil. Üzgünüm, DX10'a pek değmem. – miloszmaki
Aslında bunu da ayarlamak istiyoruz: D3DPRESENT_INTERVAL_ONE ... ve D3D10, şu anki yöntemi 'swapChain-> Present (vSync, 0); – zezba9000