OpenGL 纹理格式限制
OpenGL Textures Format Restrictions
纹理是否也需要遵守某些格式限制?
我正在加载 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 文件。
72、80 和 96 不是二次方;此要求与 OpenGL ES 中的数据格式无关。这种要求实际上甚至在现代桌面 GL 中也很普遍,它可能取决于所使用的数据格式。
(桌面)OpenGL 2.0 或更高版本中的未压缩纹理数据可以具有非二维的幂。
但是,压缩纹理数据仍然需要块大小是 4 的倍数,像素传输函数继续假定图像中每一行的 4 字节数据对齐,浮点纹理,如果支持的话,也可能需要幂两个,依此类推。
许多为 GL 设计的图像库实际上会将东西重新缩放为二次方,这可以解决上面讨论的每一个问题。它并不总是解决尺寸问题的最合适方法(它可能非常浪费),但它可以普遍应用于几乎所有常见的尺寸问题。
纹理是否也需要遵守某些格式限制?
我正在加载 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 文件。
72、80 和 96 不是二次方;此要求与 OpenGL ES 中的数据格式无关。这种要求实际上甚至在现代桌面 GL 中也很普遍,它可能取决于所使用的数据格式。
(桌面)OpenGL 2.0 或更高版本中的未压缩纹理数据可以具有非二维的幂。
但是,压缩纹理数据仍然需要块大小是 4 的倍数,像素传输函数继续假定图像中每一行的 4 字节数据对齐,浮点纹理,如果支持的话,也可能需要幂两个,依此类推。
许多为 GL 设计的图像库实际上会将东西重新缩放为二次方,这可以解决上面讨论的每一个问题。它并不总是解决尺寸问题的最合适方法(它可能非常浪费),但它可以普遍应用于几乎所有常见的尺寸问题。