【问题标题】:Can't Enable "GL_EXT_shader_io_blocks" in OpenGL ES 3.0无法在 OpenGL ES 3.0 中启用“GL_EXT_shader_io_blocks”
【发布时间】:2017-09-29 21:00:06
【问题描述】:

我在 Android 上使用 OpenGL ES 3.0,并且正在编译两个着色器:

顶点着色器:

#version 300 es
#extension GL_EXT_shader_io_blocks : enable

layout (location = 0) in vec2 position;
layout (location = 1) in vec4 color;
layout (location = 2) in vec2 uv;

uniform mat4 pr_matrix;
uniform mat4 vw_matrix;
uniform mat4 ml_matrix;

out DATA {
    vec2 position;
    vec4 color;
    vec2 uv;
} vs_out;

void main() {
    gl_Position = pr_matrix * vw_matrix * ml_matrix * vec4(position, 0.0, 1.0);
    vs_out.position = position;
    vs_out.color = color;
    vs_out.uv = uv;
}

片段着色器:

#version 300 es
#extension GL_EXT_shader_io_blocks : enable

layout (location = 0) out vec4 color;

uniform sampler2D tex;

in DATA {
    vec2 position;
    vec4 color;
    vec2 uv;
} frag_in;

void main() {
    float dist = length(frag_in.position);
    color = frag_in.color;
}

即使我为两个着色器都启用了 GL_EXT_shader_io_blocks 扩展,我仍然收到以下错误:

ERROR: 0:12: 'DATA' : requires extension GL_EXT_shader_io_blocks to be enabled 
ERROR: 1 compilation errors.  No code generated.

ERROR: 0:8: 'DATA' : requires extension GL_EXT_shader_io_blocks to be enabled 
ERROR: 1 compilation errors.  No code generated.

我也试过了

#extension GL_EXT_shader_io_blocks : require

这也没用。

【问题讨论】:

    标签: android opengl-es shader


    【解决方案1】:

    如扩展规范中所述,IO 块扩展需要 OpenGL ES 3.10 着色语言。

    尝试使用#version 310 es

    【讨论】:

    • 谢谢,这有效,但在此之后,我在定义精度时遇到错误。我必须添加“precision mediump float;”到碎片着色器来修复它。但是,如果我没有在着色器中使用 DATA 结构,我就不需要这个。你知道为什么会这样吗?
    • 您应该始终需要该着色器的精度限定符(例如,您的“float dist”定义不包含精度,因此也会出错)。
    猜你喜欢
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多