2010-10-13 125 views
0

我遇到了嘗試將紋理加載到VRAM中的問題。我在Mac OS X上使用OpenGL。我通過將顏色傳遞給片段着色器來成功渲染幾何體。但是,只要我嘗試加載紋理,就不會呈現幾何圖形,而只能看到背景顏色。這裏是我的紋理加載代碼:加重OpenGL紋理問題

char imageData[27] = { 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
}; 

glActiveTexture(GL_TEXTURE0); 
GLuint textureID; 
glGenTextures(1, &textureID); 
glBindTexture(GL_TEXTURE_2D, textureID); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 

GLint uniform_location = glGetUniformLocation(bundle->GetShaderProgramID(), "texture"); 
std::cout << uniform_location <<std::endl; 
glUniform1i(uniform_location, 0); 

glEnable(GL_TEXTURE_2D); 

這是我的片段着色器代碼:

uniform sampler2D texture; 

void main() 
{ 
    vec2 coord = vec2(0.5, 0.5); 

    //gl_FragColor = vec4(coord, 0.0, 1.0); 

    gl_FragColor = vec4(texture2D(texture, coord).rgb, 1.0); 
} 

我知道一些這個代碼的可能是沒有必要的,但我一直在嘗試一切我能想到的。

謝謝。

+1

順便說一句,總是用glGetError檢查錯誤。如果您有錯誤,渲染可能會消失。 – alxx 2010-10-13 08:25:20

回答

3

最可能的原因是,您沒有關閉mipmap,並且沒有指定mipmapping級別。所以你的紋理是不完整

要關閉此紋理對象(被周圍的glTexImage2D調用來完成)

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

但你一定要明白,「一切打破了」沒有在所有幫助搞清楚你看到了什麼?一般來說,一個截圖勝過千言萬語,但短了,至少描述如何它失敗會有所幫助。

+0

這正是我的問題。我不敢相信這很簡單。我已經在這工作了兩天了。我上面的意思是,渲染窗口只顯示背景顏色,沒有別的,下次我提問時,我會記住你的建議。哦,你可能想編輯你的答案,所以它有GL_TEXTURE_2D作爲第一個參數。再次感謝。 – LandonSchropp 2010-10-13 08:04:48

+0

@ helixed:你說得對。完成。 – Bahbar 2010-10-13 08:06:46

+0

@helixed:同樣,只有背景顏色很奇怪,因爲當你有不完整的紋理時,你應該看到多邊形,就好像紋理未啓用。背景顏色是黑色的嗎? (選擇明顯不同的背景色也是一個好主意) – Bahbar 2010-10-13 08:16:24