当前位置: 首页 > 知识库问答 >
问题:

使用 LWJGL 为 OpenGL 3.3 和 2.1 链接和编译着色器

戈嘉慕
2023-03-14

我正在使用LWJGL创建OpenGL上下文。我可以让它在我的机器上运行(与OpenGL 4.2兼容),并在OpenGL 2.1上对简单着色器进行更改。我必须编写与OpenGL2.1兼容的代码(着色器,或者更确切地说,它们的链接和编译,似乎是这里的问题)。我假设它很容易编写:

Frag着色器:

#version 120

in vec4 pass_Color;

out vec4 out_Color;

void main(void) {
    out_Color = pass_Color;
}

顶点着色器:

#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

他们链接和编译。我读过关于兼容性、核心和前向兼容性的内容,据我所知,问题可能是GLSL 1.20在OpenGL 3.3机器上不受支持,除非代码中指示它运行兼容性上下文(我可能用词不当,请纠正我)。但是我担心,因为2.1不知道OpenGL配置文件,我肯定需要在尝试用它设置上下文之前做一些检查。

即使情况确实如此,我也不完全确定如何执行正确的逻辑,以确保显卡限制为OpenGL 2.1(以及相应的GLSL版本)的机器和具有更高版本(3.3,4.2等)的机器也将接受它(使用LWJGL)。

请注意,我想让代码尽可能保持“现代OpenGL”。

共有1个答案

燕凯旋
2023-03-14

尝试这样指定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功能。

从这里。

 类似资料:
  • 主要内容:编译(Compile),链接(Link),总结我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为 可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 和 (其中 比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。 可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可

  • 编译和链接参数是每一个C/C++程序员需要经常面对的问题。构建每一个C/C++应用均需要经过编译和链接两个步骤,CGO也是如此。 本节我们将简要讨论CGO中经常用到的编译和链接参数的用法。 2.10.1 编译参数:CFLAGS/CPPFLAGS/CXXFLAGS 编译参数主要是头文件的检索路径,预定义的宏等参数。理论上来说C和C++是完全独立的两个编程语言,它们可以有着自己独立的编译参数。 但是因

  • 我正在做一个游戏,我现在正在写一个着色器来反射光从一个物体,我不断得到错误消息: 任何帮助都将不胜感激。

  • 虽然我们到现在为止还没有写任何一行代码,但我们确实得到了一个完整的可运行的程序。要编译运行程序,可以选择Build-(或按快捷键F7),编译该程序。编译完后再选择Build-Execute Hello.exe(或按快捷键CTRL+F5),运行该程序。也可以直接按CTRL+F5,系统提示是否编译,回答“Yes”,Visual Studio将自动编译链接并运行Hello.exe程序。 提示:在Buil

  • WebGL的着色器代码分为顶点着色器代码和片元着色器代码两部分,顶点着色器代码会在GPU的顶点着色器单元执行,片元着色器代码会在GPU的片元着色器单元执行,在WebGL渲染管线流程中,或者说GPU的渲染流程中,顶点着色器代码先执行处理顶点,得到一系列片元,然后再执行片元着色器代码处理片元。 main()函数 顶点着色器和片元着色器代码都有一个唯一的主函数main(),attribute、varyi

  • 问题内容: 尝试1,香草链接到图书馆 我正在尝试使用修补版本的OpenSSL(因此DTLS更易于使用)。OpenSSL在 ./include/openssl子文件夹有大量的头文件(我认为应该如此): GCC链接到include文件夹,并给我一个错误-它找不到SSL。我或多或少地在使用与别人相同的东西。这在OSX(10.6)上有效,但在Ubuntu上无效: 尝试2,符号链接到/ usr / incl