2014-04-13 66 views
0

我想知道在OpenGL中使用紋理時如何減少圖形內存的消耗。我的代碼:減少OpenGL紋理使用的內存量

glGenTextures(1,&textura); 
    glBindTexture(GL_TEXTURE_RECTANGLE_ARB,textura); 
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
    glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_COMPRESSED_RGBA_ARB,ilancho,ilalto,0,GL_RGBA,GL_UNSIGNED_BYTE,ildata); 

    //MAIN LOOP 

    glEnable(GL_TEXTURE_RECTANGLE_ARB); 
    glBindTexture(GL_TEXTURE_RECTANGLE_ARB,textura); 

    glLoadIdentity(); 
    glTranslatef(320.0,240.0,0.0); 
    glBegin(GL_TRIANGLE_FAN); 
    glTexCoord2d(0.0,0.0); 
    glVertex2f(-320.0, 240.0); 
    glTexCoord2d(0.0,480.0); 
    glVertex2f(-320.0,-240.0); 
    glTexCoord2d(640.0,480.0); 
    glVertex2f(320.0,-240.0); 
    glTexCoord2d(640.0,0.0); 
    glVertex2f(320.0, 240.0); 
    glEnd(); 

    glBindTexture(GL_TEXTURE_RECTANGLE_ARB,0); 
    glDisable(GL_TEXTURE_RECTANGLE_ARB); 

我用RivaTuner的檢查顯存的消費,似乎是相同的,無論是否壓縮。

我在做什麼錯?

我有一個NVIDIA顯卡geforce 6200 512mb ddr2。

回答

0

glTexImage2D的文件表明,該事件的壓縮格式是可用,它會透明回退的非壓縮相當於內部格式。所以有以下幾點結論:1.你的opengl實現不支持壓縮格式,並且你正在經歷記錄的行爲。 2.您選擇的分析工具會給您提供不準確的統計數據。

如果您的實現支持特定的內部格式,那麼您應該能夠使用internalformat_query進行查詢。如果不是,您只需使用不同的壓縮方法,如dxt/s3ct格式。

+0

哦,我明白了。有沒有其他的選擇來減少顯卡的內存消耗? –

+0

@JavierRamírez:首先,DXT(S3TC)紋理壓縮算法在很多年前就已經出現了非二次冪紋理的問題。如果您使用的是紋理矩形,它會使我相信您的硬件/軟件實現是在GL 2.0之前,並且可能屬於不喜歡壓縮NPOT紋理的類別。如果僅對非標準化紋理座標使用紋理矩形,則可能需要嘗試使用常規2D紋理並自己計算標準化紋理座標。看看是否改變了一切。 –

+0

我改變了兩個權力,仍然沒有工作,任何想法的紋理? –