如何绘制我的opengl背景以保持良好的性能?

use*_*748 1 opengl qt background

我画每个帧的背景:

void Window::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    backgrd->Draw();

    texture = text->loadTexture(text->amis_path.toStdString(),text->w,text->h);
    amis->Draw();

    texture = text->loadTexture(text->enemis_path.toStdString(),text->w,text->h);
    for (int i = 0; i<liste_enemis.length(); i++){
        liste_enemis[i]->Draw();
    }

    for (int i = 0; i<liste_missiles.length(); i++){
        liste_missiles[i]->Draw();
    }
    swapBuffers();
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行游戏时,fps非常糟糕(1fps).

编辑:

好吧,我试图在纹理中加载我的背景一次,但它不起作用:

Background::Background(int w, int h)
{
    width = w;
    height = h;
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D,0, GL_RGBA, back.width(), back.height(), 0,
    GL_RGBA, GL_UNSIGNED_BYTE, back.bits());
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}

void Background::Draw(){
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texture);
    glPushMatrix();
    glTranslatef(width/2, height/2, 0.0f);
    glBegin(GL_QUADS);
    glTexCoord2d(0,0); glVertex3f(-width/2, -height/2, 0.0f);
    glTexCoord2d(0,1); glVertex3f(-width/2, height/2, 0.0f);
    glTexCoord2d(1,1); glVertex3f(width/2, height/2, 0.0f);
    glTexCoord2d(1,0); glVertex3d(width/2, -height/2, 0.0f);
    glEnd();
    glPopMatrix();
}
Run Code Online (Sandbox Code Playgroud)

构造函数使用glTexImage2D(...)加载背景并将其链接到"texture"变量.然后在我的paintGL()函数中,我调用Background :: Draw()函数.

但是当我运行游戏时,没有背景.

如果我将glTexParameteri(...)和glTexImage2D(...)函数从构造函数移动到Draw函数,它就可以工作.

dat*_*olf 5

你正在重新加载每一帧的纹理,这就是导致你的表现的原因(它也会在很短的时间内消耗你的记忆).

而不是每帧重新加载纹理,只加载一次,然后使用 glBindTexture