1

我目前正在做一个需要加载图像的项目。我正在使用 SOIL 库加载 JPEG 图像。我必须在投影区域移动球。在没有加载图像的情况下,球的运动可以正常工作,但随着图像的加载,它会变得缓慢。我应该怎么做才能在图像仍然加载的情况下顺利更新图形。

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

2 回答 2

1

我应该怎么做才能在图像仍然加载的情况下顺利更新图形。

每次重绘都不会重新加载图像。同样做你现在做的事情会导致大量内存泄漏,因为你可能不会删除每帧创建的纹理。将整体移动tex_2d = SOIL_load_OGL_texture到一次性初始化代码中。

于 2013-03-01T08:28:05.267 回答
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 个纹理!(尽管它们具有相同的像素!)

于 2013-03-01T12:15:06.980 回答