2017-09-28 92 views
0

我使用的OpenGL ES 3.0與Android,而我編譯2個着色器:不能在OpenGL ES啓用 「GL_EXT_shader_io_blocks」 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 

這也不能工作。

回答

1

如擴展規範中所述,IO Blocks擴展需要OpenGL ES 3.10着色語言。

嘗試使用#version 310 es

+0

謝謝,這工作,但在此之後,我得到了關於定義精度的錯誤。我不得不添加「精度中等浮點數」;到碎片着色器來修復它。但是,如果我沒有在着色器中使用DATA結構,我不需要這個。你知道這可能是爲什麼嗎? –

+0

您應始終需要該着色器的精度限定符(例如,您的「float dist」定義不包含精度,因此應該也是錯誤的)。 – solidpixel