Рендеринг OpenGL ES 2.0 в текстуру

Я пытаюсь выполнить рендеринг текстуры с помощью 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 (); , все будет рисоваться правильно, что заставляет меня поверить что проблема связана с приведенным выше кодом.

13
задан sharvey 21 December 2011 в 01:18
поделиться