我遇到的问题是我的纹理渲染得比实际颜色深得多,并且黑色轮廓类似于这个问题:OpenGL Textures form SDLSurface goes too dark,但是这个解决方案不适合我,我的因此渲染代码是:
void BackgroundImage::render(int tile, Point2I offset)
{
//textures are being loaded in another thread.
texture_mutex.lock();
glEnable(GL_TEXTURE_2D);
if(!textures[tile].bind())
{
glDisable(GL_TEXTURE_2D);
texture_mutex.unlock();
return;
}
static GLint vertices[] =
{
0, -Tile::size.y, 0,
Tile::size.x, -Tile::size.y, 0,
Tile::size.x, 0, 0,
0, 0, 0
};
static GLfloat texCoord[] =
{
0, 1,
1, 1,
1, 0,
0, 0
};
static GLubyte indices[] =
{
0, 1, 2,
0, 2, 3
};
glPushMatrix();
glTranslatef(offset.x, -offset.y, 0);
glDisable(GL_BLEND);
glDisable(GL_LIGHTING);
glDisable (GL_COLOR_MATERIAL);
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
glColor3f(1.0f, 1.0f, 1.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer (3, GL_INT, 0, vertices);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoord);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
texture_mutex.unlock();
}
此外,每次渲染帧时图像都会变暗,直到它们变为完全黑色(使用白色作为清晰颜色渲染)。
答案 0 :(得分:0)
我发现了问题,当在另一个线程中加载纹理时,我没有从纹理槽中解除纹理,而是我只有一个插槽,我认为着色器无法解决问题。看到',因为缺少一个更好的词。解除绑定后,它会正确呈现。