我正在使用OpenGL ES 2.0用於嵌入式設備的應用程序的工作。OpenGL ES 2.0的質感黑色
這是我的片段着色器:
varying vec2 v_texCoord;
uniform sampler2D s_texture;
void main() {
gl_FragColor = texture2D(s_texture, v_texCoord);
}
我正確設置的紋理。出於某種原因,致電glTexImage2D
不會產生我正在尋找的結果。紋理完全是黑色的,而不是填充我提供的數據。
這是我如何創建紋理:
GLuint textureId;
// 2x2 Image, 3 bytes per pixel (R, G, B)
GLubyte pixels[6 * 3] =
{
255, 0, 0, // Red
0, 255, 0, // Green
0, 0, 255, // Blue
255, 255, 0, // Yellow
0, 255, 255,
255, 0, 255
};
// Use tightly packed data
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
// Generate a texture object
glGenTextures (1, &textureId);
// Bind the texture object
glBindTexture (GL_TEXTURE_2D, textureId);
// Load the texture
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 3, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
// Set the filtering mode
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
後來,我把紋理就像這樣:
samplerLoc = glGetUniformLocation (userData->programObject, "s_texture");
glActiveTexture (GL_TEXTURE0);
glBindTexture (GL_TEXTURE_2D, textureId);
// Set the sampler texture unit to 0
glUniform1i (samplerLoc, 0);
我證實了頂點和紋理座標綁定,並傳遞給着色器調試時。所以,它必須是s_texture
或glTexImage2D
函數本身的問題。
您是否使用'GetError'檢查錯誤?你也可能以錯誤的順序調用'TexImage'和'TexParameter'('TexParameter'通常出現在'TexImage'之前),儘管我不確定這是否會影響任何東西。這就是說,'TexImage'不太可能成爲問題,而且幾乎肯定是你的錯誤。 – nil 2012-01-27 22:15:52
是的,我做到了。沒有記錄錯誤。我知道它不能是頂點着色器,因爲當我調試時,我看到頂點座標和紋理座標正確傳遞。它幾乎是一本來自教科書的直截了當的例子。我不知道我錯過了什麼。 :( – Nick 2012-01-27 22:16:31
也可能是因爲你的紋理要麼不是方形的,要麼是它的尺寸不是2的冪。 – nil 2012-01-27 22:19:30