1

GL_RGBA32UI、などの正規化されていない内部形式でマルチサンプルテクスチャをレンダリングするのに問題がありますGL_RGBA32I。これが私のコードです:

width1=height1=32;
*target11=GL_TEXTURE_2D_MULTISAMPLE,*format=GL_RGBA16UI;
*samples=1;
glGenTextures(1, &id1);
glBindTexture(*target11, id1);
glGenFramebuffers(1, &Fboid);
GLint framebuffer;
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING,&framebuffer);
glGenRenderbuffers(1, &depth);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, *samples ,*format, width1, height1,true);    
glBindFramebuffer(GL_FRAMEBUFFER, Fboid);

glBindRenderbuffer(GL_RENDERBUFFER, depth);
glRenderbufferStorageMultisample(GL_RENDERBUFFER,*samples, GL_DEPTH_COMPONENT24, width1, height1);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth);            glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,*target11,id1,0);
glEnable(GL_MULTISAMPLE);
draw_cube(0);

glDisable(GL_MULTISAMPLE);  
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
switch(status)
    {
            case GL_FRAMEBUFFER_COMPLETE:                       tdkPrintf("GL_FRAMEBUFFER_COMPLETE\n");                        break;
            case 0x8CDB:                                        tdkPrintf("GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER\n");          break;
            case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:          tdkPrintf("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n");           break;
            case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:  tdkPrintf("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\n");   break;        
            case GL_FRAMEBUFFER_UNSUPPORTED:                    tdkPrintf("GL_FRAMEBUFFER_UNSUPPORTED\n");                     break;  
            default:                                            tdkPrintf("Unknown issue (%X).\n",status);                     break;
        }

glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

render_cube();

フラグメントシェーダーでテクスチャデータを手動で正規化するには:for GL_RGBA16UIfactor = 65535

uniform usampler2DMS tk_diffuseMap;
in vec3 ps_texCoord;
out vec4 fragColor;
uniform int samples;
uniform uint factor; 
void main(void)
{

    vec2 iTmp = textureSize(tk_diffuseMap);
    vec2 tmp =floor(iTmp * ps_texCoord.xy);
    uvec3 temp;  
    vec3 temp1;
    vec4 color;
    for(int i = 0; i < samples; ++i)
    {
         temp= texelFetch(tk_diffuseMap, ivec2(tmp), i).rgb;
         temp1=vec3(temp);
         temp1=temp1/factor;
        color = color + vec4(temp1,1.0);
    }

    fragColor = vec4(color/samples);
}

このコードを使用して、ジオメトリ全体に白いテクスチャを取得しています。ただし、正規化されたテクスチャ形式では正常に機能します。正規化されていないテクスチャの場合、フレームバッファに書き込む正しい方法は何ですか?

4

0 に答える 0