2012-04-07 14 views
5

GeForce 330m üzerinde çalışan geometri gölgelendiricimden bir tamsayı dokuyu örneklemeye çalışıyorum. Dokuya yüklediğimden başka değerler getiriyor gibi görünüyor. Ben doku oluşturma ve yükleme için bu kodu (temelde) kullanın:Opengl Geometri gölgelendirici tam sayı doku getirme başarısız oluyor

glGenTextures(1, &textureId); 
glBindTexture(GL_TEXTURE_2D, textureId); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 
glBindTexture(GL_TEXTURE_2D, textureId); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_INT, <some 0-initialized large enough buffer>); 
glBindTexture(GL_TEXTURE_2D, 0); 
glBindTexture(GL_TEXTURE_2D, textureId); 
    int data[] = { 3, 0, 36, 400 }; 
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 3, 1, 1, GL_RGBA, GL_INT, data); 
glBindTexture(GL_TEXTURE_2D, 0); 

fikri spesifik bir piksel sonra benim geometri gölgelendiricideki kullanmak 400 bir ağ-değeri ayarlanır olmasıdır:

#version 330 
#extension GL_EXT_gpu_shader4 : require 
uniform isampler2D models; 

void main() 
{ 
    ivec4 modelstats4 = texelFetch2D(models, ivec2(0, 3), 0); 
// ivec4 modelstats4 = ivec4(3, 0, 36, 400); 
    if (modelstats4.w > height) { 
     // emit something 
    } 
} 

Eşit olması gereken yorumlanmış sabit değerleri kullanmak, yayılan bir şeyle sonuçlanır (IE, bir nokta). Gerçek texel getirisini kullanırsam hiçbir şey döndürmez. Bunu bildiğim tüm değerlerin bir etkisi olabilir, bu yüzden artık bu kod çalışmıyor. Bu tam kod değil (OO kurulum, bakmak için oldukça fazla), ancak bunlar ilgili verilerle ilgili OpenGL çağrılarıdır.

+0

Sorunuzu cevaplamanız veya silmeniz gerekir. Çünkü sadece cevapsız sorular listesinde yerini tutuyor :) – kravemir

+0

Teşekkürler Miro, bunu bilmiyordum. – dascandy

cevap

4

GlGetErrors'un liberal serpilmesiyle çözüm bulundu. Hata, bu kod örneğindeki her glTexImage içinde oldu - görünüşe göre, bir tamsayı doku için GL_RGBA ama GL_RGBA_INTEGER kullanmamalısınız.

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA_INTEGER, GL_INT, data); 

Bu şimdi çalışır. Doku getirileri de tamam.