1

我每帧都画我的背景:

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();
}

但是当我运行游戏时,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();
}

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

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

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

4

1 回答 1

5

您正在重新加载每一帧的纹理,这就是导致您的性能的原因(它也会立即消耗您的内存)。

Instead of reloading the texture every frame, load them only once, and then switch between textures using glBindTexture

于 2012-06-26T12:43:35.357 回答