我刚刚在我的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;
}
现在,我想使用sampler3D
所以我有:
#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中。
有什么想法吗?
答案 0 :(得分:1)
与s = ' aaa ' #3 spaces in start and after `aa` there are two spaces
s[/\A */].size # for blank spaces in start of string
=> 3
s[/ *\z/].size # for blank spaces a the end of string
=> 2
类似,float
没有默认精度。在片段着色器的开头添加它,您还可以在其中指定默认的sampler3D
精度:
float
当然,如果能给你足够的精确度,你可以使用precision mediump sampler3D;
。
ES 3.0 / 3.1中唯一具有默认精度的采样器类型是lowp
和sampler2D
(默认为samplerCube
)。对于所有其他人,必须将精度指定为默认精度,或作为变量声明的一部分。