如何将从后备缓冲区获取的像素数据绘制回自身?

时间:2009-10-13 17:59:57

标签: c++ opengl-es symbian texture2d

我正在使用 OpenGLES 开发Symbian第五版的移动应用程序 这个应用程序是一个非常标准的2D应用程序,我不使用DepthBuffer。

我需要获取显示的快照,然后将相同的快照绘制回后备缓冲区。

我正在使用glReadPixels((GLint)0, (GLint)0, (GLint)nWidth-1, (GLint)nHeight-1, GL_RGB, GL_UNSIGNED_BYTE, m_pPixelData)

为了获得我需要的像素数据,但我对OpenGLES比较新,我不知道如何将数据绘制回后备缓冲区。 (在OpenGL中,使用DrawPixels很容易..)

我读过我应该根据数据生成纹理,所以我做了。 但现在我不确定如何绘制这种纹理。

我是否需要将其绘制为矩形元素的纹理?如果是这样,我想如何定义这个矩形? (坐标对我来说没有意义..)

显示尺寸为480x640,这是我想用来绘制矩形的代码:

    glEnable(GL_TEXTURE_2D);
    //displayTex is my texture built out of the pixel data
    glBindTexture(GL_TEXTURE_2D, m_pESSharedData->displayTex);

    //Bottom
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f);
    glVertex3f(-2.5f, -2.5f, 2.5f);
    glTexCoord2f(1.0f, 0.0f);
    glVertex3f(2.5f, -2.5f, 2.5f);
    glTexCoord2f(1.0f, 1.0f);
    glVertex3f(2.5f, -2.5f, -2.5f);
    glTexCoord2f(0.0f, 1.0f);
    glVertex3f(-2.5f, -2.5f, -2.5f);

    glEnd();

请注意,上面的代码是我在此过程中提到的内容,我认为这是我想要做的概述。随意带我离开这条赛道。 :)

我感谢你的时间。

1 个答案:

答案 0 :(得分:1)

首先需要确保Series60 5th Edition上的OpenGL-ES版本能够处理高度和宽度不是2的纹理。

我会建议forum nokia进行此类查询。

无耻插头:

Quick Recipes On Symbian OS包含一整章,解释了Symbian OS上OpenGL-ES的基础知识。 3D代码示例为here