13

OpenGL ES 2.0を使用してテクスチャにレンダリングしようとしていますが、機能しないようです。

これが私が進める方法です:

    struct RenderTexture
    {
        GLuint framebuffer;
        GLuint tex;
        GLint old_fbo;


        RenderTexture(GLuint width, GLuint height)
        {
            glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo);

            glGenFramebuffers(1, &framebuffer);
            glGenTextures(1, &tex);

            glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
            glBindTexture(GL_TEXTURE_2D, tex);
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 
                         width, height, 0, GL_RGBA, 
                         GL_UNSIGNED_BYTE, NULL);
            glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 
                                   tex, 0);

            glClearColor(1, 0, 0, 1);
            glClear(GL_COLOR_BUFFER_BIT);

            GLuint status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
            if (status != GL_FRAMEBUFFER_COMPLETE) {
                cout << status << endl; // this is not called
            }

            glBindFramebuffer(GL_FRAMEBUFFER, old_fbo);
        }

        void begin()
        {
            glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo);
            glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
        }

        void end()
        {
            glBindFramebuffer(GL_FRAMEBUFFER, old_fbo);
        }
    };

しかし、その上に描画して、結果のテクスチャを使用しようとすると、テクスチャは完全に黒く描画されます。

描画コードをとでラップしないrender_tex->begin();render_tex->end();、すべてが正しく描画され、問題は上記のコードに限定されていると思います。

4

4 に答える 4

7

テクスチャにレンダリングする前に、テクスチャがバインドされていないことを確認してください。テクスチャリングをまったく使用しない場合でも、現在バインドされているテクスチャにレンダリングしようとすると、未定義の動作が発生し、機能しない場合があります。

実際には、コンストラクターでglBindTexture(GL_TEXTURE_2D, 0)の後に呼び出すか、FBO で行うように、以前にバインドされたテクスチャを復元する必要があります。FBO にレンダリングするときに がバインドされていないことを確認してください。glTexImage2DRenderTexturetex

于 2011-12-14T02:11:47.807 に答える
6

これはしばらく経ちましたが、コメントに書いたように、2 の累乗のテクスチャを初期化していることを確認してください。

于 2014-07-26T21:51:48.773 に答える
0

を利用していないようですglActiveTextureglActiveTexture(GL_TEXTURE0+tex);各 の前に呼び出すことをお勧めしますglBindTexture(tex);。これにより、複数のテクスチャを使用する際の頭痛の種が大幅に軽減されます。画面にテクスチャを描画するために使用するコードにエラーがあると思います。

于 2013-10-09T11:32:22.807 に答える