代码之家  ›  专栏  ›  技术社区  ›  SparkyNZ

OpenGL纹理格式限制

  •  1
  • SparkyNZ  · 技术社区  · 8 年前

    纹理也需要遵守某些格式限制吗?

    我正在加载TGA文件并使用以下片段着色器绘制它们:

    varying vec2      v_texCoord;
    uniform sampler2D s_texture;
    uniform vec4      vColor4;
    
    void main()
    {
      vec4 tmpColor = texture2D( s_texture, v_texCoord );
    
      tmpColor.r = vColor4.r;
      tmpColor.g = vColor4.g;
      tmpColor.b = vColor4.b;
    
      gl_FragColor = tmpColor;
    }
    

    我发现16x16图像显示正常。64x16显示正常。72x16、80x16和96x16不工作。

    如果需要,我将提供更多信息,包括TGA文件。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Andon M. Coleman    8 年前

    72、80和96不是二的幂;这一要求与OpenGL ES中的数据格式几乎没有关系。这一要求实际上在现代桌面GL中也是普遍存在的,它可能取决于所使用的数据格式。

    (桌面)OpenGL 2.0或更高版本中的未压缩纹理数据可以具有二维非幂。

    但是,压缩纹理数据仍然需要4倍的块大小,像素传输函数继续假设图像中每行的4字节数据对齐,浮点纹理(如果支持)可能还需要2的幂,以此类推。

    许多为GL设计的图像库实际上会将内容重新缩放到二的幂,这可以解决上面讨论的每一个问题。这并不总是解决维度问题的最合适的方法(可能非常浪费),但它可以普遍应用于几乎所有常见的维度问题。

    推荐文章