【发布时间】:2015-12-27 13:11:33
【问题描述】:
几天来,我一直在调试一些在 Windows 上运行的代码的黑色纹理问题,今天我发现它可能与我处理 openGL 调用的方式无关。以下代码 sn-p 包含一个 @ 987654322@线。
如果我注释掉 cout 行,我会得到黑色纹理。如果我把它留在代码中,我会得到正确渲染的纹理。
std::vector<unsigned char> png_data;
loadPNG("texture.png", width, height, format, png_data);
// COMMENT LINE!
// std::cout << "First RGBA value is " << std::hex << png_data[0] << " " << png_data[1] << " " << png_data[2] << " " << png_data[3] << std::endl;
glGenTextures(1, &texture_id);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, png_data.data());
我做错了吗?这是编译器问题吗?
【问题讨论】:
-
如果您不能立即从这个问题中挤出声誉,并且您对花了 2 分钟阅读和理解它感到沮丧,请不要密切投票,但要解释为什么您认为这不值得询问或回答。
-
如果没有看到展示问题的完整示例,如何回答?首先,
loadPNG做了什么?几乎可以肯定,您未显示的代码中存在 UB。 -
@AlanStokes 在这里发帖太长了,here's the function I'm using
-
注释掉
loadPNG并将png数据初始化为已知的简单图像,如绿色方块。 -
那么您的问题可能出在
loadPNG或之前的某个时间。使用valgrind查找内存错误。