在使用sdl创建的窗口上显示图像

时间:2015-08-10 03:20:17

标签: c++ opengl sdl

我试图在使用sdl创建的窗口上显示图像。

int main()
{
    ...
    SDL_Surface *image = IMG_Load("hello.png");

    while(!quit)
    {
        ...
        glClear(GL_COLOR_BUFFER_BIT)
        GLuint texture;

        glGenTextures(1, &texture);
        glBindTexture(GL_TEXTURE_2D, texture);
        glTexImage2D(GL_TEXTURE_2D, 0, 4, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels);
        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(0.0f, 0.0f, 1.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 0.0f, 1.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, 1.0f, 1.0f);
        glEnd();
    }
}

问题是窗口以给定的清晰颜色显示,但图像未显示。

1 个答案:

答案 0 :(得分:0)

我无法发表评论,因为我没有足够的分数,所以必须回答。

我无法看到你如何设置你的窗口,但你有一个1x1四边形,如果你的窗口设置的坐标宽度和高度为1.0,那么你很好,否则你将最终得到1像素的大小纹理(你的透明色的中间或角落有一个小点吗?这可能是你的纹理)。如果是,则将顶点坐标设置为窗口大小。

如果不是纹理尺寸,您是否尝试检查图像是否已正确加载?纹理2D有效吗? (检查错误)。

同样@keltar是正确的,你不应该在每个绘制周期创建纹理,你只需要加载一次。