2014-03-07 61 views
0

我試圖從一個片段着色器讀取texture1d:的OpenGL texture1D

uniform sampler1D world; 

...

texelFetch(world, 0, 0); 

我上傳W,其中w [0] = 123.0fw [1] = 123.0f ...:

glActiveTexture(GL_TEXTURE0); 
glGenTextures(1, &pt->world); 
glBindTexture(GL_TEXTURE_1D, pt->world); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32F, 2, 0, GL_RGBA, GL_FLOAT, &w); 

綁定:

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_1D, pt->world); 
glUniform1i(glbPTworld, 0); 

但是,當我在glTexImage1D中使用不同於1的寬度時,片段着色器讀取vec4(0,0,0,1)而不是vec4(123,123,123,123)。另外,如果我使用:

glGetTexImage(GL_TEXTURE_1D, 0, GL_RGBA, GL_FLOAT, x); 

要獲得紋理,我會看到預期值。

回答

1

我看到幾個紅旗與您的代碼,但我不知道他們是否與問題有關。首先,你告訴OpenGL你的紋理只有2個像素寬。那是對的嗎?

其次,您將GL_TEXTURE_2D傳遞給glTexParameteri(),但您使用的是GL_TEXTURE_1D紋理目標。這似乎是錯誤的。

+0

謝謝!這是glTexParameteri中的GL_TEXTURE_2D,我沒有看到它。然而,這個錯誤導致所有這些麻煩有點奇怪,有時候我不明白一些openGL的決定,比如當glTexParameter已經知道時要求紋理類型/尺寸。 – dv1729

+0

還要注意,1D紋理不應該有T包裝模式... – peppe