glViewport(x(), y(), width(), height());
glDisable(GL_DEPTH_TEST);
glClearColor(0, 0.3, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
//... drawing commands
Run Code Online (Sandbox Code Playgroud)
绘图正确地发生在窗口的一个小区域中,由 glViewport(x(), y(), width(), height())
但是,glClearColor()设置的背景颜色会影响整个窗口,即使这是在调用glViewport()之后设置的.为什么?
在glClear一边:
像素所有权测试,剪刀测试,抖动和缓冲区写掩码影响操作
glClear.
但是,glViewport说明了
glViewport指定x和y从标准化设备坐标到窗口坐标的仿射变换.
如果我正确阅读参考文献,这是设计的; glViewport只是偏移了视口,它影响了栅格化基元的drawcalls,而glClear只是在整个帧缓冲区域上工作.
完整的规范(4.3)似乎同意:
§17.4.3GL提供了一种方法,用于将特定缓冲区中每个像素的部分设置为相同的值.