0

我刚刚在我的 iOS 应用程序中包含了 OpenGL ES 3.0,它运行良好。

我在下面有一个工作着色器:

#version 300 es

precision mediump float;

uniform sampler2D texSampler;
uniform float fExposure;

in vec2 fTexCoord;
in vec3 fColor;

out vec4 fragmentColor;

void main()
{
  fragmentColor = texture(texSampler, fTexCoord) * vec4(fColor, 1.0) * fExposure;
}

现在,我想使用 asampler3D所以我有:

#version 300 es

precision mediump float;

uniform sampler3D texSampler;
uniform float fExposure;

in vec3 fTexCoord;
in vec3 fColor;

out vec4 fragmentColor;

void main()
{
  fragmentColor = texture(texSampler, fTexCoord) * vec4(fColor, 1.0) * fExposure;
}

它不编译。另外,我在顶点着色器中将其更改vec2 texCoord为。vec3 texCoord

实际上,sampler3D无法识别,但据我所知,它存在于 OpenGL ES 3.0 中。

有任何想法吗?

4

1 回答 1

2

与 类似floatsampler3D没有默认精度。在片段着色器的开头添加它,您还可以在其中指定默认float精度:

precision mediump sampler3D;

当然,lowp如果这样可以为您提供足够的精度,您可以使用它。

在 ES 3.0/3.1 中唯一具有默认精度的采样器类型是sampler2Dand samplerCube(两者都默认为lowp)。对于所有其他,精度必须指定为默认精度,或作为变量声明的一部分。

于 2015-05-05T05:30:20.857 回答