使用LWJGL为OpenGL 3.3和2.1链接和编译着色器
我正在使用LWJGL创建一个OpenGL上下文。 我可以在我的机器上运行它(兼容OpenGL 4.2),并且还可以在OpenGL 2.1上更改简单着色器。 我必须编写代码(着色器,或者更确切地说是链接和编译它们,这似乎是问题),它与OpenGL 2.1兼容。 我认为这很容易写出来:
碎片着色器:
#version 120
in vec4 pass_Color;
out vec4 out_Color;
void main(void) {
out_Color = pass_Color;
}
Vert着色器:
#version 120
in vec4 in_Position;
in vec4 in_Color;
out vec4 pass_Color;
uniform mat4 Model;
uniform mat4 View;
uniform mat4 Projection;
void main(void) {
gl_Position = Projection * View * Model * in_Position;
pass_Color = in_Color;
}
作为着色器的第一行,并称之为一天。 但是,在一台支持OpenGL 3.3的显卡上,这些着色器不会链接和编译。 更改为
#version 330
// - or even -
#version 150
他们做链接和编译。 我已经阅读过有关兼容性,核心和前向兼容性的内容,据我所知,问题可能是OpenGL 3.3机器不支持GLSL 1.20,除非在代码中指示运行兼容性上下文(我可能会错误地措词,请纠正我)。 但我担心,因为2.1不知道OpenGL配置文件,所以在尝试设置上下文之前,我需要做一些检查。
即使是这样,我也不完全确定如何执行正确的逻辑,以确保具有图形卡的两台机器仅限于OpenGL 2.1(和相应的GLSL版本)以及具有更高版本(3.3,4.2等)的机器。也会接受它(使用LWJGL)。
请注意,我希望尽可能将代码保留为“现代OpenGL”。
尝试像这样指定ogl版本:
PixelFormat pixelFormat = new PixelFormat();
ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
.withForwardCompatible(true)
.withProfileCore(true);
Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
Display.setTitle(WINDOW_TITLE);
Display.create(pixelFormat, contextAtrributes);
...因为默认情况下mac支持OpenGL 2.1的最大版本。 在OS X 10.7+上,您可以专门请求核心配置文件,该配置文件可让您访问OpenGL 3.2,但与Windows和Linux不同,您不能在标准OpenGL配置文件中混合使用OpenGL 3+功能。
从这里。
链接地址: http://www.djcxy.com/p/38515.html上一篇: Linking and compiling shaders for OpenGL 3.3 and 2.1 using LWJGL