【问题标题】:Image loading causes slow processing in OpenGL图像加载导致 OpenGL 中的处理缓慢
【发布时间】:2013-03-01 05:35:40
【问题描述】:

我目前正在做一个需要加载图像的项目。我正在使用 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();

【问题讨论】:

    标签: opengl textures glut soil


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      简单的程序风格:

      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 个纹理! (尽管它们具有相同的像素!)

      【讨论】:

        猜你喜欢
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多