Opengl 不应该';t glClearColor()是否遵守glViewport()设置的绘图区域?

Opengl 不应该';t glClearColor()是否遵守glViewport()设置的绘图区域?,opengl,Opengl,图形正确地出现在窗口的一个小区域中,由glViewport(x(),y(),width(),height())设置。 但是,glClearColor()设置的背景色会影响整个窗口,即使这是在调用glViewport()之后设置的。为什么?另一方面: 像素所有权测试、剪切测试、抖动和缓冲区写入磁盘会影响glClear的操作 然而,缔约国表示 glViewport指定x和y从标准化设备坐标到窗口坐标的仿射变换 如果我正确阅读参考文献,这是出于设计glViewport仅偏移视口,这会影响光栅化基本体的

图形正确地出现在窗口的一个小区域中,由
glViewport(x(),y(),width(),height())设置。

但是,glClearColor()设置的背景色会影响整个窗口,即使这是在调用glViewport()之后设置的。为什么?

另一方面:

像素所有权测试、剪切测试、抖动和缓冲区写入磁盘会影响
glClear
的操作

然而,缔约国表示

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

如果我正确阅读参考文献,这是出于设计
glViewport
仅偏移视口,这会影响光栅化基本体的drawcalls,而
glClear
仅对整个帧缓冲区区域起作用

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

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


至少应该提到,
glScissor(…)
可以用来复制OP想要的行为。当然,前提是启用了
GL\u剪刀式测试。
glViewport(x(), y(), width(), height());

glDisable(GL_DEPTH_TEST);

glClearColor(0, 0.3, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

//... drawing commands