过时OpenGL版本的GLSL布局限定符绑定点

过时OpenGL版本的GLSL布局限定符绑定点,opengl,layout,binding,glsl,qualifiers,Opengl,Layout,Binding,Glsl,Qualifiers,题目是我的问题。 OpenGLV4.1是否有“绑定”布局限定符的替换 我使用的是MacOS和Xcode,所以如果我运行OpenGL4.2,我会得到一个错误,即glewinit说“缺少GL版本” 当然,如果我用OpenGL4.1运行这段代码,它就无法识别“binding”关键字 我的顶点着色器代码是: #version 410 layout (location=0) in vec3 pos; layout (location=1) in vec2 texCoord; out vec2 tc;

题目是我的问题。 OpenGLV4.1是否有“绑定”布局限定符的替换

我使用的是MacOS和Xcode,所以如果我运行OpenGL4.2,我会得到一个错误,即glewinit说“缺少GL版本”

当然,如果我用OpenGL4.1运行这段代码,它就无法识别“binding”关键字

我的顶点着色器代码是:

#version 410

layout (location=0) in vec3 pos;
layout (location=1) in vec2 texCoord;

out vec2 tc;

uniform mat4 mv_matrix;
uniform mat4 proj_matrix;

layout (binding=0) uniform sampler2D samp;  // not used in vertex shader

void main(void) {
    gl_Position = proj_matrix * mv_matrix * vec4(pos, 1.0);
    tc = texCoord;
}
#version 410

in vec2 tc;  // interpolated incoming texture coordinate

out vec4 color;

uniform mat4 mv_matrix;
uniform mat4 proj_matrix;

layout (binding=0) uniform sampler2D samp;

void main(void) {
    color = texture(samp, tc);
}
我的片段着色器代码是:

#version 410

layout (location=0) in vec3 pos;
layout (location=1) in vec2 texCoord;

out vec2 tc;

uniform mat4 mv_matrix;
uniform mat4 proj_matrix;

layout (binding=0) uniform sampler2D samp;  // not used in vertex shader

void main(void) {
    gl_Position = proj_matrix * mv_matrix * vec4(pos, 1.0);
    tc = texCoord;
}
#version 410

in vec2 tc;  // interpolated incoming texture coordinate

out vec4 color;

uniform mat4 mv_matrix;
uniform mat4 proj_matrix;

layout (binding=0) uniform sampler2D samp;

void main(void) {
    color = texture(samp, tc);
}
你说的“替换”是什么意思?您可以使用
glUniformBlockBinding
从OpenGL分配统一缓冲区绑定点。但是没有其他方法在着色器本身中定义它;毕竟,如果有,为什么我们首先需要
绑定
限定符?

你说的“替换”是什么意思?您可以使用
glUniformBlockBinding
从OpenGL分配统一缓冲区绑定点。但是没有其他方法在着色器本身中定义它;毕竟,如果有,为什么我们首先需要
绑定
限定符呢?

既然绑定点是0(
binding=0
),你根本不需要它,因为0是默认值。既然绑定点是0(
binding=0
),你根本不需要它,因为0是默认值。