ios - iOS 中的 Sampler3D

标签 ios opengl-es glsl opengl-es-3.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;
}

现在,我想使用 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 中。

有什么想法吗?

最佳答案

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

precision mediump sampler3D;

当然,您可以使用 lowp 来代替,前提是它能给您足够的精度。

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

关于ios - iOS 中的 Sampler3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036664/

相关文章:

c++ - GLSL 从 v110 移植到 v150?

opengl-es - 如何在 webgl 渲染 channel 之间传递高精度 uv 坐标?

ios - 如何使用 SignalR Objective-C 加入群组?

ios - 检查用户是否接受该应用知道他的位置

ios - UITableViewController 内部 UINavigationController 和 UITabBarController 底部插入关闭

opengl-es - Android - 在 native 端加载图像

ios - Swift:如何使用特定主题标签从 iOS 应用程序发布到 Twitter?

ios - GLKView 显示方法导致 [GLKView _createFramebuffer] 崩溃

android - 无法在 Unity 中获取 EGL14.eglGetCurrentContext()

glsl - Vulkan 采样器的 maxLod 会不会太高?