glGetnUniformfv无缘无故崩溃?

我尝试使用uniform vec3glGetnUniformfv从片段着色器获取到CPU。根据文档,这应该可以正常工作。当仅从着色器获取float时,它也起作用。但是当这样使用时,

float f[3] = {0.0f};
glGetnUniformfv(program,glGetUniformLocation(program,name.c_str()),3,f);

我的程序崩溃了。我检查了glGetUniformLocation,但输出有效。

qwer879 回答:glGetnUniformfv无缘无故崩溃?

glGetnUniform函数族的第三个参数实际上不是数组中的条目数。它是f指向的数组的字节大小。由于f是一个数组,而不仅仅是指向数组的指针,因此它将是sizeof(f)

现在,您的实现不应该崩溃,因此可能还有其他事情发生。但这就是您提供的代码中的问题。

,

除非您使用的是实际上支持OpenGL 4.5+的上下文,否则请使用“旧方法”获取vec3,如下所示:

float f[3] = {0.0f};
glGetUniformfv(program,glGetUniformLocation(program,name.c_str()),f);

仅在桌面上使用的新glGet n 统一入口点是为了提高安全性而存在的,类似于strncpy vs strcpy。

另外,如果您使用glGet n 变体,则应该为 bufSize 传递12而不是3,因为它是字节数。

本文链接:https://www.f2er.com/3142567.html

大家都在问