OpenGL纹理格式限制

时间:2016-04-08 01:50:31

标签: opengl-es fragment-shader tga

纹理是否需要遵守某些格式限制?

我正在加载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显示OK。 72x16,80x16和96x16不起作用。

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

1 个答案:

答案 0 :(得分:0)

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

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

然而,压缩纹理数据继续要求块大小为4的倍数,像素传输函数继续假设图像中每行的4字节数据对齐,浮点纹理,如果支持也可能需要2的幂等等。

为GL设计的许多图像库实际上会将内容重新调整为二次幂,这可以解决上面讨论的每个问题。修复尺寸问题并不总是最合适的方式(可能非常浪费),但它可以普遍适用于任何常见尺寸问题。

相关问题