Maksimum değerleri doku tamponu içine aktardığımda, render yaparken geometriyi maksimum değerlerle çizer. GlTexBuffer() API'sini kullanırken bu sorunu buldum.texelFetch() kullanarak tekstüre etme
E.g. 255'ten küçük herhangi bir değeri geçtiğimde, doku verilerim GLubyte olduğunu varsayalım, o zaman renk, siyah ve bu renk karışımı yerine 255 ile çizilen renk ile aynıdır.
AMD ve nvidia kartında denedim, ancak sonuçlar aynı. Bana nerede yanlış gidebileceğini söyleyebilir misin?
Benim burada kodunu kopyalayarak ediyorum:
Vert shader:
in vec2 a_position;
uniform float offset_x;
void main()
{
gl_Position = vec4(a_position.x + offset_x, a_position.y, 1.0, 1.0);
}
Frag shader:
out vec4 Color;
uniform isamplerBuffer sampler;
uniform int index;
void main()
{
Color=texelFetch(sampler,index);
}
Kodu: Bu durumda
GLubyte arr[]={128,5,250};
glGenBuffers(1,&bufferid);
glBindBuffer(GL_TEXTURE_BUFFER,bufferid);
glBufferData(GL_TEXTURE_BUFFER,sizeof(arr),arr,GL_STATIC_DRAW);
glBindBuffer(GL_TEXTURE_BUFFER,0);
glGenTextures(1, &buffer_texture);
glBindTexture(GL_TEXTURE_BUFFER, buffer_texture);
glTexBuffer(GL_TEXTURE_BUFFER, GL_R8, bufferid);
glUniform1f(glGetUniformLocation(shader_data.psId,"offset_x"),0.0f);
glUniform1i(glGetUniformLocation(shader_data.psId,"sampler"),0);
glUniform1i(glGetUniformLocation(shader_data.psId,"index"),0);
glGenBuffers(1,&bufferid1);
glBindBuffer(GL_ARRAY_BUFFER,bufferid1);
glBufferData(GL_ARRAY_BUFFER,sizeof(vertices4),vertices4,GL_STATIC_DRAW);
attr_vertex = glGetAttribLocation(shader_data.psId, "a_position");
glVertexAttribPointer(attr_vertex, 2 , GL_FLOAT, GL_FALSE ,0, 0);
glEnableVertexAttribArray(attr_vertex);
glDrawArrays(GL_TRIANGLE_FAN,0,4);
glUniform1i(glGetUniformLocation(shader_data.psId,"index"),1);
glVertexAttribPointer(attr_vertex, 2 , GL_FLOAT, GL_FALSE ,0,(void *)(32));
glDrawArrays(GL_TRIANGLE_FAN,0,4);
glUniform1i(glGetUniformLocation(shader_data.psId,"index"),2);
glVertexAttribPointer(attr_vertex, 2 , GL_FLOAT, GL_FALSE ,0,(void *)(64));
glDrawArrays(GL_TRIANGLE_FAN,0,4);
hepsi çizer koyu kırmızı col ile 3 kareler veya.
Çok teşekkür ederim .. !! Şimdi, problem şu ki, samplerBuffer tarafından isamplerBuffer'ı değiştirdiğimde, GL_R8, GL_R16, GL_R16F, GL_R32F için doğru çıktı verir, ancak diğer dahili formatlar için http://www.opengl.org/sdk/docs/man3/xhtml /glTexBuffer.xml. Tüm iç formatlar için doğru o/p nasıl elde edilebileceğini bana söyleyebilir misiniz ..? Aslında glsl hakkında çok fazla bilgim yok .. Lütfen bana yardım edin .. – debonair
@ user1737197: Stack Overflow bir web-forum değil. Burada yeni bir sorunuz varsa, sormak için "Soru Sor" düğmesini kullanın. Ya da sadece [OpenGL Wiki'ye gidin ve orada okuyun] (http://www.opengl.org/wiki/GLSL_Sampler). –
Üzgünüz, yeni bir soru yönettim. – debonair