我使用 openGL ES 1.0。解码流数据后,变为RGBA位。然后我将 RGBA 字节传输到带有参数的“渲染器”方法。
渲染器方法由每个帧例程调用。因为 RGBA 字节每次都会改变。
但它不绘制任何相框。只显示白色矩形和背景灰色。问题是什么?
[初始化]
- (id <ESRenderer>) init 
{
    if (self = [super init])
    {
        context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
        if (!context || ![EAGLContext setCurrentContext:context])
        {
            [self release];
             return nil;
        }
        // Create default framebuffer object. The backing will be allocated for the current layer in -resizeFromLayer
         glGenFramebuffersOES(1, &defaultFramebuffer);
         glGenRenderbuffersOES(1, &colorRenderbuffer);
         glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);
         glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
         glEnable(GL_TEXTURE_2D);
         glGenTextures(1, &frameTexture);
         glBindTexture(GL_TEXTURE_2D, frameTexture);
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
         glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, frameTexture, 0);
         glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);
    }
     return self;
}
[渲染器方法。每帧由外部调用]
static const GLfloat verticesForGL_TRIANGLE_STRIP[] = {
    -0.8, 0.8, 0.0,          //v1
    0.0, 1.0,               //UV1
    -0.8, -0.8, 0.0,          //v2
    0.0, 0.0,               //UV2
    0.8, 0.8, 0.0,          //v3
    1.0, 1.0,               //UV3
    0.8, -0.8, 0.0,          //v4
    1.0, 0.0,               //UV4
};
- (void)render:(uint8_t*)data
{
     if ([EAGLContext currentContext] != context)
        [EAGLContext setCurrentContext:context];
     glClearColor(0.4f, 0.4f, 0.4f, 1.0f);
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glViewport(0, 0, backingWidth, backingHeight);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     glOrthof(-1.1f, 1.1f, -1.1f, 1.1f, -2.0f, 2.0f);
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1280, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
     glEnable(GL_TEXTURE_2D);
     glBindTexture(GL_TEXTURE_2D, frameTexture);
     glEnableClientState(GL_VERTEX_ARRAY);
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     glVertexPointer(3, GL_FLOAT, sizeof(GLfloat)*5, verticesForGL_TRIANGLE_STRIP);
     glTexCoordPointer(2, GL_FLOAT, sizeof(GLfloat)*5, &verticesForGL_TRIANGLE_STRIP[0]+3);
     glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
     glDisable(GL_TEXTURE_2D);
     glDisableClientState(GL_VERTEX_ARRAY);
     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
     [context presentRenderbuffer:GL_RENDERBUFFER_OES];
 }