0

FBO を使用してテクスチャにレンダリングしています。これが私のコードです:

GLuint FramebufferName = 0;

glGenFramebuffers(1, &FramebufferName);

glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName);

GLuint renderedTexture;

glGenTextures(1, &renderedTexture);

glBindTexture(GL_TEXTURE_2D, renderedTexture);

glTexImage2D(GL_TEXTURE_2D,0,GL_RGB10_A2UI,256,256,0,GL_RGBA_INTEGER,GL_UNSIGNED_INT_10_10_10_2,0);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

GLuint color_buffer;

glGenRenderbuffers(1, &color_buffer);

glBindRenderbuffer(GL_RENDERBUFFER, color_buffer);

glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB10_A2UI, 256, 256);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_buffer);

glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,renderedTexture, 0);

GLenum DrawBuffers[2] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1, DrawBuffers);

GLuint textureId;

LoadImage(textureId); // Loads texture data into textureId

Render(); // Renders textureId onto FramebufferName

glBindFramebuffer(GL_FRAMEBUFFER, 0); // Bind default FBO

glBindTexture(GL_TEXTURE_2D, renderedTexture); //Render using renderedTexture

glDrawArrays (GL_TRIANGLE_FAN,0, 4);

出力が正しくありません。画像が正しく表示されません。GL_RGB10_A2UI の代わりに GL_RGBA フォーマットを使用すると、すべてうまくいきます。FBO は GL_FRAMEBUFFER_COMPLETE で、問題はありません。ここで何か間違っていますか?

GL_RGB10_A2UI の私のフラグメント シェーダーは次のとおりです。

in vec2 texcoord;

uniform usampler2D basetexture;

out vec4 Color;

void main(void)
{
    uvec4 IntColor =  texture(basetexture, texcoord);

    Color = vec4(IntColor.rgb, 1023.0) / 1023.0;

}

GL_RGBA については、シェーダーで正規化を行っていません。

4

1 に答える 1