2014-03-28 28 views
1

我創建這樣我的紋理:如何讓texelFetchOffset環繞?

this->width = width; 
this->height = height; 
glGenFramebuffers(1, &framebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); 

glGenTextures(1, &texture); 
glBindTexture(GL_TEXTURE_2D, texture); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 


switch (components) { 
    case 1: glTexImage2D(GL_TEXTURE_2D, 0, GL_R16F, width, height, 0, GL_RED, GL_HALF_FLOAT, 0); break; 
    case 2: glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, width, height, 0, GL_RG, GL_HALF_FLOAT, 0); break; 
    case 3: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGB, GL_HALF_FLOAT, 0); break; 
    case 4: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, height, 0, GL_RGBA, GL_HALF_FLOAT, 0); break; 
    default: Log::Write("Unknown format"); 
} 


if(GL_NO_ERROR != glGetError()) Log::Write("Could not create texture"); 

GLuint colorbuffer; 
glGenRenderbuffers(1, &colorbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, colorbuffer); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 

if(GL_NO_ERROR != glGetError()) Log::Write("Could not attach framebuffer"); 

if(GL_FRAMEBUFFER_COMPLETE != glCheckFramebufferStatus(GL_FRAMEBUFFER)) Log::Write("Could not create framebuffer"); 

glClearColor(0, 0, 0, 0); 
glClear(GL_COLOR_BUFFER_BIT); 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

但在我的着色器texelFetchOffset似乎並不環繞紋理的邊緣。我究竟做錯了什麼?

回答

3

紋理座標包裝是採樣器狀態,texelFetch函數系列完全繞過採樣並直接訪問紋理的數據存儲。它永遠不會爲你進行座標包裹。

+0

是否有可能獲得紋理大小而不通過它並手動進行包裝? – pixartist

+0

是的,你可以使用['textureSize'](http://www.opengl.org/sdk/docs/man4/html/textureSize.xhtml)。 – derhass