2013-03-01 20 views
1

我目前正在研究一個需要加載圖像的項目。我正在使用SOIL庫來加載JPEG圖像。我必須在投影區域移動球。球的運動在沒有加載圖像的情況下工作正常,但在加載圖像時它變得離散緩慢。我應該怎麼做才能在圖像仍然加載的情況下順利地進行圖形更新。圖像加載導致OpenGL處理​​緩慢

GLuint tex_2d = SOIL_load_OGL_texture 
(
    "<image_path>ImageName.jpg", 
    SOIL_LOAD_AUTO, 
    SOIL_CREATE_NEW_ID, 
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT 
); 

glBindTexture(GL_TEXTURE_2D, tex_2d); 
glEnable(GL_TEXTURE_2D); 
glBegin(GL_QUADS); 
    glTexCoord3f(0.0f,0.0f,0.0f);  glVertex3f(factor*BOARD_BREADTH/2,-factor*BOARD_LENGTH/2,0); 
    glTexCoord3f(0.0f,1.0f,0.0f);  glVertex3f(factor*BOARD_BREADTH/2,factor*BOARD_LENGTH/2,0); 
    glTexCoord3f(1.0f,1.0f,0.0f);  glVertex3f(-factor*BOARD_BREADTH/2,factor*BOARD_LENGTH/2,0); 
    glTexCoord3f(1.0f,0.0f,0.0f);  glVertex3f(-factor*BOARD_BREADTH/2,-factor*BOARD_LENGTH/2,0); 
glEnd(); 

回答

1

我應該怎麼做,使圖形與仍然加載圖像順利更新。

不重新載入每次重繪的圖像。此外,您現在正在做的事情會導致大量內存泄漏,因爲您可能不會刪除每幀創建的紋理。將整個tex_2d = SOIL_load_OGL_texture轉換爲一次性初始化代碼。

0

簡單的程序風格:

init() { 
    // load texture here 
    // load shaders and other resources 
} 

render() { 
    // use resources here to draw something  
} 

主要代碼:

main() { 
    init(); 
    while(still_running()) 
    { 
     // update all 
     render(); 
    } 
    // clean up here 
} 

注意init只調用一次,但render被調用時,我們可以說,每秒60次。在你的代碼中,你每秒創建60個紋理! (儘管它們具有相同的像素!)