【问题标题】:OpenGL ES3 android: built in variable gl_InstanceIDOpenGL ES3 android:内置变量 gl_InstanceID
【发布时间】:2017-09-19 15:34:04
【问题描述】:

我正在尝试在我的 android 游戏中实现实例化 - 即在一次绘制调用中绘制 64 个精灵。

我正在学习基于 c 语言的教程

https://learnopengl.com/#!Advanced-OpenGL/Instancing

当我在顶点着色器代码中使用以下语法时程序崩溃

vec2 offset = offsets[gl_InstanceID];

异常

09-19 17:28:18.315 3635-3674/? E/ShaderHelper: Error compiling shader: 0:47: L0002: Undeclared variable 'gl_InstanceID'

那么为什么我不能访问 instanceID 变量呢?我已经在自定义的 GLSurfaceview 中将 GLcontextClientVersion 设置为 3。

【问题讨论】:

    标签: android opengl-es glsl opengl-3


    【解决方案1】:

    gl_InstanceID 是 ES 3.0 功能。从 GLSL ES 3.00 规范第 3.4 章我们读到:

    指令“#version 300 es”在使用的任何着色器中都是必需的 该语言的 3.00 版本。代表版本的任何数字 编译器不支持的语言会导致错误 生成。 该语言的 1.00 版不需要着色器 包含此指令,以及不包含#version 的着色器 指令将被视为针对 1.00 版。

    我的猜测是您错过了在着色器中输入“#version 300 es”作为第一行,因此编译器假定版本为 1.00。

    【讨论】:

    • 谢谢,我认为这应该可以解决我的问题,因为我错过了在着色器中输入它,但我收到以下错误:错误编译着色器:0:7:L0003:保留关键字“属性”
    • @java shaderific.com/blog/2014/3/13/… 关键字 'attribute' 与关键字 'in' 交换。其他一些关键字也发生了变化。
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多