glclear() 在 ios8 opengl 中修改 glscissor() 边界之外的图像

glclear() modifying image outside of glscissor() bounds in ios8 opengl

下面的代码只绘制了一个绿色框,而我期望同时有绿色和红色框。

如果我没有第二个glClear() 语句,就会出现红框。

这让我得出结论,因为我的剪刀框在红色框的边界之外,glClear() 语句不符合剪刀框。

谁能帮我理解这是怎么回事?

glEnable(GL_SCISSOR_TEST);
int x, y, w, h;
x = 0;
y = 0;
w = 700;
h = 700;

glViewport(x,y,w,h);
glScissor(x,y,w,h);
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

x = 0;
y = 750;
w = 700;
h = 700;

glViewport(x,y,w,h);
glScissor(x,y,w,h);
glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

所以我设法自己解决了这个问题。我不得不在绘制调用结束时 "reset" 剪刀框。即:

glScissor(0,0,viewPixelWidth, viewPixelHeight);

发生的事情是当呈现渲染缓冲区时,再次应用剪刀框,因此不会复制最新剪刀框之外的所有内容。