2011-01-20 54 views
3

从我在OpenGL文档中看到的,OpenGL比RGB更喜欢BGR格式。但是,将纹理的内部格式设置为BGR时,渲染时纹理全部为白色。当内部格式设置为RGB或RGBA时,它会正确显示。源格式是BGR开始(直接从DIB加载)。OpenGL GL_BGR不适用于纹理内部格式

glBindTexture(GL_TEXTURE_2D, id); 
glPixelStorei(GL_UNPACK_ALIGNMENT, 4); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, nClamp); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, nClamp); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, nMagFilter); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, nMinFilter); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

下面一行是问题...设置内部格式GL_BGR使一切都全白了......变为GL_RGB使得它正确

glTexImage2D(GL_TEXTURE_2D, 0, GL_BGR, pTex->nWidth, pTex->nHeight, 0, GL_BGR, GL_UNSIGNED_BYTE, pTex->pBuffer); 
+0

什么是`nMinFilter`?如果它有`MIPMAP`,你将不得不提供一套完整的mipmap级别。 – genpfault 2011-01-20 16:34:33

回答

2

glTexImage2D man page渲染,GL_BGR不一个内部格式,只是一种格式。

您应该检查GL错误,因为这会发现此错误。你读到关于“喜欢BGR的OpenGL”是错误的。