我正在失去对纹理的绑定。通常我的代码可以工作,但似乎在某些情况下,生成函数会成功创建并将纹理上传到图形内存,但在主循环中glIsTexture()
将返回false。
只有一个线程触及OpenGL。
以下是伪代码,因为这是一个更大的项目的一部分,而且太复杂了,不能在这里详述。我不是在寻找代码的语法检查,我需要一些帮助来理解可能导致这种情况发生的原因以及如何调试它。
主循环:
while(generateTexture(texture_id, sequence_number))
{
if(glIsTexture(texture_id))
{
cerr << "Got texture!\n";
// (Do something with texture here)
glDeleteTextures(1, &texture_id);
}
else
cerr << "Bad texture\n";
}
功能:
void generateTexture(GLuint &texID, int number)
{
// (Generate texture here)
glPixelStorei(GL_UNPACK_ROW_LENGTH, width);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0,
GL_RGB, GL_UNSIGNED_BYTE, texture_data);
if(!glIsTexture(texID))
{
cerr << "Failed to upload texture " << texID << " for number " << number << "\n";
}
else
cerr << " -> uploaded to texture " << texID << "\n";
}