C++ OpenGL:如何只清除屏幕的一部分?

C++ OpenGL:如何只清除屏幕的一部分?,c++,opengl,C++,Opengl,使用glClear()函数时是否可能不清除整个屏幕?我只需要清除屏幕的一部分以节省一些渲染时间,否则我将不得不在每一帧重新绘制屏幕的一半,即使在另一半上什么也没有发生 当然,这应该像现在的glClear()一样快速(或更快)完成。画一个巨大的四边形:)将其应用到一半的屏幕上 您可能需要查看glScissor。从文件中: 启用剪刀测试时,只能通过绘图命令修改剪刀框内的像素 要仅清除特定的矩形区域,请启用ScissorTest并调用clear。启用后,只有剪刀框内的像素会受到绘图命令的影响,因此当需

使用glClear()函数时是否可能不清除整个屏幕?我只需要清除屏幕的一部分以节省一些渲染时间,否则我将不得不在每一帧重新绘制屏幕的一半,即使在另一半上什么也没有发生

当然,这应该像现在的glClear()一样快速(或更快)完成。

画一个巨大的四边形:)将其应用到一半的屏幕上


您可能需要查看glScissor。从文件中:

启用剪刀测试时,只能通过绘图命令修改剪刀框内的像素


要仅清除特定的矩形区域,请启用
ScissorTest
并调用
clear
。启用后,只有剪刀框内的像素会受到绘图命令的影响,因此当需要再次修改外部区域时,请禁用
ScissorTest

OpenTK示例:

GL.Enable (EnableCap.ScissorTest);
GL.Scissor (ViewportX, ViewportY, ViewportWidth, ViewportHeight);
GL.Clear (ClearBufferMask.ColorBufferBit);
GL.Disable (EnableCap.ScissorTest);

只是一个想法:你能将视口设置为屏幕的一半吗?@chris_l:视口不影响清除。绘制四边形不是有点太慢了吗?@新手通过测量发现剪刀式清除比四边形绘制快?我希望draw是主要的优化路径。我认为《剪刀清除》将是一个遥远的角落案例。顺便说一句,我并不是说绘图速度更快。具体地说,从Clear文档:[…],剪刀测试,[…]影响glClear的操作+1.