glClearColor()不应该服从glViewport()设置的绘图区域吗?

时间:2013-09-16 14:32:38

标签: opengl

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()之后设置的。为什么呢?

1 个答案:

答案 0 :(得分:9)

glClear方面:

  

像素所有权测试,剪刀测试,抖动和缓冲区写掩码会影响glClear的操作。

但是,glViewport表示

  

glViewport指定x和y从标准化设备坐标到窗口坐标的仿射变换。

如果我正确阅读了参考文献,这是设计的; glViewport仅仅会偏移视口,这会影响栅格化基元的drawcall,而glClear只能在整个帧缓冲区域上工作。

完整规范(4.3)似乎同意:

  

§17.4.3 GL提供了一种设置特定缓冲区中每个像素部分的方法   达到相同的价值。