運行ATI Radeon HD 5800 Series
的筆記本電腦用戶只是向我展示了我的2D遊戲在他的機器上運行的視頻,並且它看起來像我的glScissor
代碼沒有按預期工作(儘管它工作的很多其他電腦)。glScissor在我的代碼中行爲奇怪
每當我想限制渲染到屏幕上的某個矩形時,我會將我的SetClip
函數調用到特定的矩形或Rectangle.Empty
來重置剪刀。
public void SetClip(Rectangle theRect)
{
if (theRect.IsEmpty)
OpenGL.glDisable(OpenGL.EnableCapp.ScissorTest);
else
{
if (!OpenGL.glIsEnabled(OpenGL.EnableCapp.ScissorTest))
OpenGL.glEnable(OpenGL.EnableCapp.ScissorTest);
OpenGL.glScissor(theRect.Left, myWindow.clientSizeHeight - theRect.Bottom,
theRect.Width, theRect.Height);
CheckError();
}
}
這種方法是否錯誤?例如,我有一種感覺,glEnable
/glDisable
可能需要glFlush
或glFinish
來保證它按照我所說的順序執行。
我與用戶聯繫,他運行了'AMD Driver Autodetect',它告訴他他有最新的驅動程序,並且正在運行Windows 7. –
@ Mr.Smith:是的。所以呢?即使是最新的驅動程序也可能有錯誤。 – datenwolf
好吧,我會被詛咒的,「glIsEnabled」不僅僅是一個表現問題,而且也是罪魁禍首。刪除它修復了它,並且我還發現了其他人做了類似的操作:[明確地將GL_SCISSOR_TEST保存到解決方法驅動程序錯誤](https://github.com/MachineMuse/MachineMusePowersuits/pull/325) –