我正在加载立方体贴图来创建一个天空盒,一切都很好,天空盒使用正确的纹理应用程序正确渲染。
但是,我决定用valgrind检查我的程序安全性,Valgrind给出了这个错误:http://pastebin.com/seqmXjyx
sky.c
中的第53行是:
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, texture.width, texture.height, 0, GL_BGR, GL_UNSIGNED_BYTE, texture.pixels);
protoype:
void glTexImage2D( GLenum target,
GLint level,
GLint internalformat,
GLsizei width,
GLsizei height,
GLint border,
GLenum format,
GLenum type,
const GLvoid *pixels )
纹理宽度和高度是无符号整数(1024x1024),像素采用bmp纹理格式。
它是正确解析的(正如我之前所说,一切都正确呈现,openGL没有返回错误,我只从valgrind得到4的无效写入)。
(每次加载纹理时都会出现此无效写入)
所以我读了这个男人,这让我更加困惑,这就是我从中得到的:
GL_INVALID_VALUE is generated if width or height is less than 0 or greater than 2 + GL_MAX_TEXTURE_SIZE, or if either cannot be represented as 2^k +2 (border) for some integer value of k.
glGetError()
给我GL_NO_ERROR
,当我发送1024 * 1024作为参数时,显然不是(2 ^ k + 2)
我还读到了border
参数,这对我现在使用的openGL来说似乎没什么用处,但这可能是这个覆盖的链接吗?
最后,正如我所说,一切正常,但我肯定想知道这些残疾人的写作来自哪里。
答案 0 :(得分:0)
你在引用哪个手册页?有多个手册页可用,并非所有手册都映射到相同的OpenGL版本。
无论如何,+ 2 (border)
背后的想法是将2乘以border
的值,这在你的情况为0.所以你的代码就好了。 border
是最新GL版本不支持的功能,因此不会出现在最近的手册页中。
现在,回到你的问题。 valgrind错误来自GeForce GL驱动程序,因此除非您可以访问源代码,否则您不可能随时随地调查它(如果您愿意,可以尝试联系驱动程序维护人员......但可能很难得到任何答案的时间)。