3

私はGLFWを初めて使用し、単純なテクスチャマッピングプログラムを作成しました。問題は、プログラムの実行中にメモリリソースがノンストップで増加することです。これは、タスクマネージャではっきりと確認できます。

プログラムを数分間実行した後、コンピュータのファンが高速化し、加熱の問題が発生します。この問題を解決するにはどうすればよいですか?

テクスチャ読み込み関数のコードは次のとおりです

GLuint LoadTexture(const char* TextureName)
{
    GLuint Texture;  //variable for texture
    glGenTextures(1,&Texture); //allocate the memory for texture
    glBindTexture(GL_TEXTURE_2D,Texture); //Binding the texture

    if(glfwLoadTexture2D(TextureName, GLFW_BUILD_MIPMAPS_BIT)){
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
        return Texture;
    }else return -1;
}

これが描画関数のコードです

void display()
{
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); //clear background screen to black

    //Clear information from last draw
    glClear( GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
    glLoadIdentity(); //Reset the drawing perspective

    glTranslatef(0.0f,0.0f,-35.0f); //Translate whole scene to -ve z-axis by -35 unit


    GLuint text2D;
    text2D = LoadTexture("cicb.tga"); //loading image for texture

    glEnable(GL_TEXTURE_2D); //Enable texture
    glBindTexture(GL_TEXTURE_2D,text2D);//Binding texture

    glPushMatrix();
    glBegin(GL_POLYGON); //Begin quadrilateral coordinates
    glNormal3f(0.0f, 0.0f, 1.0f);//normal vector
    glTexCoord2f(0.0f, 0.0f); //Texture co-ordinate origin or  lower left corner
    glVertex3f(-10.0f,-11.0f,5.0f);
    glTexCoord2f(1.0f, 0.0f); //Texture co-ordinate lower right corner
    glVertex3f(10.0f,-11.0f,5.0f);
    glTexCoord2f(1.0f, 1.0f);//Texture co-ordinate top right corner
    glVertex3f(10.0f,-1.0f,-15.0f);
    glTexCoord2f(0.0f, 1.0f);//Texture co-ordinate top left corner
    glVertex3f(-10.0f,-1.0f,-15.0f);

    glEnd(); //End quadrilateral coordinates
    glPopMatrix();
    glDisable(GL_TEXTURE_2D);


    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,text2D);
    glPushMatrix();

    glBegin(GL_POLYGON);
    glNormal3f(0.0f, 0.0f, 1.0f);
    glTexCoord2f(0.0f, 0.0f);//Texture co-ordinate origin or lower left corner
    glVertex3f(-10.0f,-1.0f,-15.0f);
    glTexCoord2f(10.0f, 0.0f); //Texture co-ordinate for repeating image ten times form
    //origin to lower right corner
    glVertex3f(10.0f,-1.0f,-15.0f);
    glTexCoord2f(10.0f, 10.0f);//repeat texture ten times form lower to top right corner.
    glVertex3f(10.0f,15.0f,-15.0f);
    glTexCoord2f(0.0f, 10.0f);//repeat texture ten time form top right to top left corner.
    glVertex3f(-10.0f,15.0f,-15.0f);
    glEnd();
    glPopMatrix();
    glDisable(GL_TEXTURE_2D); //Disable the texture
    glfwSwapBuffers();

}

誰かがexeファイルを実行して問題を確認したい場合は、ダウンロードリンクを提供できます。

4

1 に答える 1

10

を呼び出すたびにテクスチャをロードしているようですdisplay()。(本質的にはフレームごとに 1 回) それが、ある時点ですべてのメモリを奪っていると思います。表示機能の外でこれを一度だけ実行したいだけです。

于 2012-08-12T16:45:43.503 に答える