【发布时间】:2016-03-02 19:31:17
【问题描述】:
使用 glClear() 函数时是否可以不清除整个屏幕?我只需要清除屏幕的一部分以节省一些渲染时间,否则我将不得不每帧重绘一半屏幕,即使另一半没有发生任何事情。
当然,这应该像现在 glClear() 一样快(或更快)完成。
【问题讨论】:
-
只是一个想法:你能将视口设置为屏幕的一半吗?
-
@chris_l:视口不影响清除。
使用 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);
【讨论】:
画一个巨大的四边形 :) 将它应用到一半的屏幕上。
http://www.opengl.org/resources/faq/technical/transformations.htm#tran0090
【讨论】: