gpt4 book ai didi

c - glClear 和 glStencilMask 未按预期运行

转载 作者:行者123 更新时间:2023-12-02 00:19:19 25 4
gpt4 key购买 nike

在 Khronos OpenGL 2.1 Specs 中,他们说 glStencilMask 应该影响 glClear 的操作,但是,在我的机器上,这似乎不是真的。

我目前得到的输出是:

Stencil value: (0,0) 0xff

我期望的输出是:
Stencil value: (0,0) 0xf0

这是我的代码:
void renderScene(void) {
unsigned char pix;
int i [4];

/* Clear the stencil buffer initially */
glClearStencil(0x0);
glClear(GL_STENCIL_BUFFER_BIT);

/* Applies the following: 1111 0000 & 1111 1111 */
glStencilMask(0xF0);
glClearStencil(0xFF);

glClear(GL_STENCIL_BUFFER_BIT);

glFlush();

glReadPixels(0,0,1,1,GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, &pix);
printf("Stencil value (0,0): %x\n",pix);
}

int main(int argc, char **argv) {
// init GLUT and create Window
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_STENCIL );
glutInitWindowPosition(500,500);
glutInitWindowSize(320, 320);
glutCreateWindow("Trial");

// register callbacks
glutDisplayFunc(renderScene);

// enter GLUT event processing cycle
glutMainLoop();

return 1;
}

(显然我正在执行各种其他绘图等,但这证明了我所看到的问题)

最佳答案

来自 glReadPixels() 上的文档

GL_STENCIL_INDEX 

Stencil values are read from the stencil buffer.
Each index is converted to fixed point, shifted left or right
depending on the value and sign of GL_INDEX_SHIFT,
and added to GL_INDEX_OFFSET. If GL_MAP_STENCIL is GL_TRUE,
indices are replaced by their mappings in the table GL_PIXEL_MAP_S_TO_S.

您可能想通过调用来检查 GL_INDEX_SHIFT 和 GL_INDEX_OFFSET 是否都为零
glPixelTransferi(GL_INDEX_SHIFT,  0);
glPixelTransferi(GL_INDEX_OFFSET, 0);

也许您正确地写入了值,但是 glReadPixels 会扰乱输出。还可以尝试读取多个字节:
unsigned char pix4[4];
glReadPixels(0,0,1,1,GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, pix4);

for(int i = 0 ; i < 4 ; i ++) printf("Stencil value (0,0,%d): %x\n", i, pix4[i]);

关于c - glClear 和 glStencilMask 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com