在 LWJGL 中更改 OpenGL 版本

2023-12-06

所以我一直想知道如何更改 lwjgl 中的 openGL 版本..我知道我可以使用 PixelFormat 和 ContextAttribs 更改版本,正如 wiki 上所说http://lwjgl.org/wiki/index.php?title=Version_selection

但这只能让我降到最低 3.2,如果我想降得更低怎么办?比如 2.1 甚至 1.1?有什么办法可以做到这一点吗?


OpenGL 上下文版本背后的逻辑可能有点令人困惑。但放在历史背景下来看,确实有道理:

过去,没有特殊的“上下文版本”提示。创建上下文只有一种方法,您将获得运行它的特定实现所支持的最高版本。您可以查询版本字符串和扩展字符串,并检查您的代码实际需要的所有功能是否可用。获得比您真正需要的更高的版本从来都不是问题,因为每个新的 GL 版本都 100% 向后兼容以前的版本。 (嗯,至少在理论上)。这种情况一直持续到 OpenGL 2.1。

然而,OpenGL 3.0 引入了“弃用模型”。功能首次被标记为“已弃用”,并计划实际删除。 OpenGL 历史上第一次不再保证向后兼容性。随后,引入了新的上下文创建机制:ARB_create_context功能(请参阅扩展规范工作组版本 or the GLX版本),其中包括请求“上下文版本”的可能性。现在您遇到的情况是,旧应用程序对 GL3 和新上下文创建机制一无所知,但仍应像以前一样运行。所以旧方法给出的是兼容的到 GL 2.1(或者,如果您有一个非常旧的或有限的实现,当不支持更现代的 GL 2.x 功能时,它只为您提供一些 GL 1.x 版本)。

使用 OpenGL 3.2、上下文profiles哪里介绍的。这基本上是 ARB 最终提出的解决方案,用于处理这些兼容性问题。从 GL3.2 开始,定义了两个配置文件:core and 兼容性。在核心配置文件中,已弃用的内容被删除,而在兼容性配置文件中,您会得到一些可以支持 GL 从 1.0 开始的所有内容的内容。

事情本来可以这么简单,但事实并非如此。实现者只需要支持核心配置文件,兼容性配置文件是可选的。这导致了我们现在的情况:取决于实现and平台上,GL 上下文的选项会有所不同:

  • 所有主要桌面平台(Windows、Unix/Linux、OSX)都支持使用旧上下文创建方法的“遗留”GL。

  • 在 Windows 上,使用现代 GPU 和驱动程序,您通常仍然可以获得最高的兼容性配置文件当您使用旧版上下文创建/不请求特定版本/请求

  • 在 OSX 上,有一个明显的削减。旧版 GL 创建最多将为您提供 GL2.1。如果你需要现代 GL,你必须要 3.2core轮廓。

  • 在 Linux 上,这取决于您使用的 GPU 驱动程序。 AMD 和 NVidia 的专有驱动程序的行为与 Windows 情况类似。然而,开源 mesa3D 实现(也被官方英特尔 GPU 驱动程序使用)确实更像 OSX 那样处理它:仅支持核心配置文件。

对于 GL 开发人员来说,需要考虑以下几点:

  • 您无法在同一应用程序中可靠地混合现代(GL >= 3)和已弃用的旧功能,因为这并非在所有平台上都可用(并且规范也没有要求)。如果您想走“现代”路线,请请求 >=GL 3.2 的核心配置文件。

  • 如果您想使用“旧版”GL,您应该限制自己使用 GL2.1 功能集。您仍然可能最终得到更高版本的某些兼容性配置文件,但您永远不能依赖它 - 至少,如果您不针对特定平台。但由于 GL 规范根本不需要实现兼容性配置文件,因此我不推荐这样做。这也意味着请求兼容性配置文件在实践中毫无用处。

您可以信赖的内容:如果您请求特定的 GL 版本(可能还有配置文件)并且您实际上获得了上下文,它可能不完全是您请求的版本,但它将是一个支持您的版本的所有功能的版本要求。 (但相反的结论在一般情况下并不成立。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 LWJGL 中更改 OpenGL 版本 的相关文章

  • 如何从 Play WSClient 的字符串创建 WSResponse 对象

    文档 https www playframework com documentation 2 4 x JavaTestingWebServiceClients Mock the web service建议使用模拟Web服务测试基于WSCli
  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • 如何将 JSpinner 的值设置为特定日期

    我有一个JSpinner我添加到JPanel我想将其时间设置为 GregorianCalendar calendar JSpinner spinner new JSpinner spinner setModel model pom add
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • Java 读取大文本文件时出现 OutOfMemoryError

    我是 Java 新手 正在读取非常大的文件 需要一些帮助来理解问题并解决它 我们有一些遗留代码 必须对其进行优化才能正常运行 文件大小仅在 10mb 到 10gb 之间变化 只有当文件开始大小超过 800mb 时才会出现启动问题 Input
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • maven 无法下载 jacoco 0.7.10-SNAPSHOT jar

    我对此感到困惑 我的 pom xml 中有这个
  • 如何使用 swagger-codegen-plugin (maven) 生成客户端代码?

    我需要使用 swagger codegen plugin for maven 在 eclipse 中生成服务器存根代码 你能帮忙怎么做吗 以及需要什么配置 在 pom xml 中 我找到了这个答案 您只需要像下面这样更改 pom xml 即
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • Jetty Plugin 9启动不喜欢icu4j-2.6.1.jar

    我对 mortbay 的 Maven jetty 插件 6 有相同的配置
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • 在 Freemarker 模板中检查 Spring 安全角色和记录的用户名

    有谁知道 freemarker 标签来检查 freemarker 文件中的 spring 安全角色和用户名 我从网络上的几个资源中发现以下代码将打印登录的用户名 但它没有打印用户名 而是打印 登录为

随机推荐

  • 尝试将 LinkedIn 集成到 iPhone 应用程序中

    我已经从以下位置下载了源代码https github com ResultsDirect LinkedIn iPhone 演示工作正常 并尝试在我的应用程序中使用 我已经按照此处提到的所有步骤进行了操作post 但我收到错误 OBJC CL
  • ConfigurationModule 传递到模块和上下文 - DotNet Core

    所以我尝试使用 Autofac DI 通过堆栈传递我的配置 json 文件 我的主要功能如下 static void Main string args Console WriteLine Starting Add the configura
  • 测试 UNC 路径“可访问性”

    我的程序需要访问某个 UNC 路径 但该路径是跨域的 因此根据运行程序的计算机 它可能有也可能没有默认凭据 通常 用户只需打开资源管理器并输入 UNC 或 IP 地址即可获得登录提示 此时他们可以输入共享所在域的适当凭据 是否有一种 干净
  • Firebase 根据日期按分数排序

    我正在尝试添加每月记分板 但这对我来说似乎有点困难 我不知道如何为某些列表或数组获取特定值 与日期一样 仅包含 2017 年 1 月 9 日值的日期 如果我能做到这一点 那么我想我可以按价值对它们进行排序 FirebaseDatabase
  • 如何在调用正文中使用 csv 文件来调用经过 TensorFlow 训练的 SageMaker 模型? [复制]

    这个问题在这里已经有答案了 我已在 AWS SageMaker 上部署了 TensorFlow 模型 并且希望能够使用 csv 文件作为调用正文来调用它 该文档说关于创建一个serving input function就像下面这个 def
  • jQuery 异常处理

    有什么方法可以捕获 javascript 中任何未捕获的异常吗 我的意思是 我所有的 危险 代码都在 try catch 块中 但是我没有明确处理的异常怎么办 我正在使用 jQuery 我的主要 javascript 文件以以下内容开头 d
  • Linux 如何将文件识别为某种文件类型,以及如何以编程方式更改它?

    我正在用 java 创建一个程序 该程序读取文件的输入流 通过根据密码更改字节数来对其进行加密 并创建一个新的加密文件 例如 我创建了一个测试文件 其中包含以下内容 This is a test to see if the encrypte
  • 将 Gridview 导出到 Excel 时删除复选框

    我有一个 gridview 需要导出到 Excel 我已设法从行中删除复选框 但不知道如何从标题中删除以及完全删除复选框列 感谢帮助
  • SQL查询删除两个不同数据库的3个表内连接中的重复值

    我正在使用 SQL Server 数据库 并且编写了以下查询 SELECT AM Martin dbo CpCore Site Latitude AM Martin dbo CpCore Site Longitude AM Martin d
  • Jquery - 链接外部 .js 文件不起作用

    由于某种原因 我链接到的外部 js 文件无法正常工作 我像这样链接到它 我已经使用一个简单的内联脚本测试了 jquery 以便在单击时隐藏一段文本 以便 jquery 库存在并工作 jquery js 文件与调用它的 index php 文
  • Matplotlib 默认情况下不会显示居中的多边形图?

    对于迄今为止我见过的所有类型的图 matplotlib没有时会自动居中xlim ylim 给出了值 例子 import matplotlib pyplot as plt A pts 162 5 137 5 211 0 158 3 89 6
  • C# 将列表中的对象转换为另一个对象

    是否可以将对象列表分配给另一个将其作为构造函数的对象列表 Eg public class PersonORM public PersonORM Person p convert public int PersonId get set Oth
  • 文件共享读写不起作用 (C#.NET)

    我正在使用 C 的十六进制编辑器控件 可以找到源代码和二进制文件here 使用它时的一个问题是 如果在十六进制编辑器和另一个程序中加载文件 则另一个程序无法保存该文件 因为它已经被另一个进程使用 所以我询问了控件的作者 他告诉我将 File
  • DirectShow 库 - 如何使用 directshow 库捕获图像而不在 PictureBox 或面板上显示网络摄像头实时图像

    我正在使用使用 DirectShow 库的 WPF 应用程序 它可以很好地抓取图像或记录实时源 但我希望最终用户不应该看到任何网络摄像头正在拍摄他们的照片 即我想要图片框或用户不应该看到正在渲染来自网络摄像头的提要的面板 我应该能够捕获图像
  • 如何在opencv中使用多频段搅拌机

    我想使用混合两个图像多频带混合但我不清楚这个函数的输入参数 void detail Blender prepare const std vector
  • Python 函数仅返回第一个值而不是数据帧

    我构建了一个函数 将 5 个投资组合的收益附加到一个数据帧中 我想将其返回到一个变量 当我在函数中逐行运行命令 一种调试 时 我最终得到的变量 folioReturn 这是我希望脚本返回的变量 具有正确数量的值 例如 5 但是如果我调用该函
  • 如何修复“使用内部联接的不明确列名错误”错误

    我正在使用两个表从数据库中进行查询 并收到问题标题中描述的错误 在某些情况下 我需要查询的字段在表 A 中 但其他字段在表 B 中 我动态创建要搜索的列 可以在表 A 或表 B 中 代码中的 WHERE 子句是导致错误 是否有动态方法来解决
  • @font-face 不适用于斜体/粗体字体

    我正在使用一个自动生成CSS的工具 它生成以下 font face标签和相应的段落Style font face font family FF Garamond Italic src url fonts 16309 GARAIT 1 ttf
  • AS3 - TextField:嵌入字体

    此代码不会将文本呈现到屏幕上 改变 drawText embedFonts false 渲染文本 但字体大小或颜色不会修改 package import flash display Sprite import flash text Text
  • 在 LWJGL 中更改 OpenGL 版本

    所以我一直想知道如何更改 lwjgl 中的 openGL 版本 我知道我可以使用 PixelFormat 和 ContextAttribs 更改版本 正如 wiki 上所说http lwjgl org wiki index php titl