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