lwjgl 3、如何获取当前线程中当前的OpenGL上下文?

2023-12-30

我在 LWJGL 3 中使用 OpenGL 并收到以下错误;

Exception in thread "main" java.lang.IllegalStateException: There is no OpenGL context current in the current thread.
    at org.lwjgl.opengl.GL.getCapabilities(GL.java:157)
    at org.lwjgl.opengl.GL11.getInstance(GL11.java:1390)
    at org.lwjgl.opengl.GL11.glClearColor(GL11.java:1842)
    at com.base.engine.RenderUtil.initGraphics(RenderUtil.java:13)
    at com.base.engine.Main.<init>(Main.java:14)
    at com.base.engine.Main.main(Main.java:24)

这是 RenderUtil 类,其中从主类的构造函数调用 initGraphics。我还尝试在使用 GLFW 创建窗口后调用 initGraphics,这也生成了类似的错误消息。

    package com.base.engine;
    
    import static org.lwjgl.opengl.GL11.*;
    import static org.lwjgl.opengl.GL30.*;
    
    public class RenderUtil {
    
        public static void clearScreen() {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        }
    
        public static void initGraphics() {
            glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    
            glFrontFace(GL_CW);
            glCullFace(GL_BACK);
            glEnable(GL_CULL_FACE);
            glEnable(GL_DEPTH_TEST);
    
            glEnable(GL_FRAMEBUFFER_SRGB);
        }
    }

另外,我没有使用多线程。要创建一个窗口,我调用该方法Window.createWindow(1366, 768, "Test");从我的主要方法。 ```` 私有静态长窗口;

    public static String createWindow(int width, int height, String title) {
        if (GLFW.glfwInit() == 0) {
            return "GLFW failed to initialise.";
        }

        GLFW.glfwWindowHint(GLFW.GLFW_SAMPLES, 4);
        window = GLFW.glfwCreateWindow(width, height, title,
                GLFW.glfwGetPrimaryMonitor(), 0);

        if (window == null) {
            GLFW.glfwTerminate();
            return "Failed to create window.";
        }

        GLFW.glfwMakeContextCurrent(window);
        return "GLFW has established a window.";
    }
I have tried putting `RenderUtil.initGraphics();` two different position in my main method, both resulting in errors.

        private boolean isRunning = false;
        private Game game;
    

        // This is the constructor
        public Main() {
            // Pos 1 - RenderUtil.initGraphics();
            isRunning = false;
            game = new Game();
        }

        public static void main(String[] args) {
            System.out.println(Window.createWindow(1366, 768, "Test"));
            // Pos 2 - RenderUtil.initGraphics();
            Main game = new Main();
            game.start();
        }

添加呼叫至GLContext.createFromCurrent()在结束时createWindow method.

需要此方法来设置 LWJGL GL** 类在底层使用的上下文。

EDIT:

自从最新的每晚(3.0.0b #11)以来,这不再有效,因为GLContext类不再存在。相反,添加GL.createCapabilities()在结束时createWindow method.

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

lwjgl 3、如何获取当前线程中当前的OpenGL上下文? 的相关文章

随机推荐

  • 查找 Git 存储库的大小

    查找 Git 存储库大小的简单方法是什么 我的意思不是du h在我的存储库的根目录中 我有很多被忽略的文件 因此该大小与我的存储库总大小不同 我本质上想知道克隆我的存储库时会传输多少数据 请注意 自从git 1 8 3 2013 年 4 月
  • ACR122u卡仿真模式发送PN532命令

    我刚刚读过this https stackoverflow com a 23197444 1852589回答有关如何将我的 ACR122U 置于卡模拟模式的问题 我确实明白其目的 但您需要如何将命令发送到 ACR122u 据我所知 FF00
  • 实体框架:“where 子句中的未知列”

    我正在开发一个应用程序 该应用程序将概述当天在剧院放映的电影 我得到以下异常 where 子句 中的未知列 Extent2 Movie ID 这是抛出异常的地方 额外的变量 movies2 这只是我为调试所做的事情 public Actio
  • 在R中使用ccf进行互相关[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在 R 中使用 ccf 来计算两
  • 如何将单个文件恢复到以前的版本? [复制]

    这个问题在这里已经有答案了 有没有办法对文件进行不同的提交 假设我修改了一个文件 5 次 在提交并推送到存储库后我想返回更改 2 次 根据我的理解 唯一的方法是保留许多分支 我说得对吗 如果我是对的 几天之内我将拥有数百个分支机构 所以我可
  • Asterisk AGI - 使用 php agi 发起呼叫

    有人知道我们如何使用 PHP AGI 脚本发起外部号码呼叫吗 您有两种可能的选择 一种是使用 Originate 命令 看http www voip info org wiki view Asterisk manager 示例 Origin
  • 使用 Jmeter 桌面应用程序作为 Web 应用程序

    正如我们所知 JMeter 是基于桌面的应用程序 它将在我们的操作系统中启动 我们可以使用它来进行性能测试 但如果我想将它用作 Web 应用程序而不是桌面应用程序 该怎么办 如何使用 Jmeter 桌面应用程序作为 Web 应用程序并将其公
  • Symfony 4 webpack + encore 处理模板中的图像

    使用 Symfony 4 和 Webpack Encore Yarn 我想在我的模板中处理图像 但我并不真正知道如何实现这一点 我把我的形象放在我的 assets img logo png文件夹 然后在我的webpack config js
  • 在循环中包装每 3 个元素会留下一个空包装器

    我将循环中的每 3 个元素包装在包装器 div 中 如下所示 query array post type gt post i 1 posts new WP Query query out div class wrapper if posts
  • Matplotlib:将右轴的原点与特定的左轴值对齐

    在 Matplotlib 中绘制多个 y 轴时 有没有办法指定如何将右轴的原点 和 或一些 ytick 标签 与左轴的特定值对齐 这是我的问题 我想绘制两组数据以及它们的差异 基本上 我试图重现这种图 http jp physoc org
  • 如何在Webview中显示android警报对话框?

    我正在使用 webview 开发一个应用程序 但我不知道如何启用 JavaScript 在 webview 中显示警报对话框 我曾经尝试过这个 但它对我不起作用 首先 我制作了 webview 和 websettings 对象 然后设置以下
  • tidyverse - 按其他列分组的多个列之间的相关性

    我想获得 tidyverse 中多个变量的相关矩阵 但是 我想按另一列进行分组 例如 假设我有一个数据框df有柱子year我想看到之间的相关性V1 V2 V3by year year V1 V2 V3 misc var 2018 5 6 5
  • 用 ggplot 标记/注释极值的最简洁方法?

    我想使用 ggplot2 注释所有大于 y 阈值的 y 值 当你plot lm y x 使用基础包 自动弹出的第二个图是Residuals vs Fitted 第三个是qqplot 第四个是Scale location 其中每一个都会通过将
  • 如何在 Visual Studio 2019 中启用 C++98 编译?

    如何在 Visual Studio 2019 中启用 C 98 编译 因为我要编译一个旧项目 而旧项目需要c 98环境 简而言之 编译器不支持 C 98 C 03 或 C 11 的标准切换 Link https learn microsof
  • dotnet pack 项目参考

    我非常喜欢将功能分离到几个程序集中 例如数据提供程序的外观 数据提供程序的合同以及数据提供程序实现本身 在我看来 它使得对单个组件进行单元测试变得很容易功能丰富 并且将来很容易更换一件事 在我的示例中 它使数据提供者很容易更换 如果我创建一
  • 即使文件扩展名已更改,如何识别文件类型?

    文件按文件扩展名分类 所以我的问题是 即使文件扩展名已更改 如何识别文件类型 例如 我有一个名为myVideo mp4 我已将其更改为myVideo txt 因此 如果我双击它 首选文本编辑器将打开该文件 但不会打开确切的内容 但是 如果我
  • EF,如何有条件地包含其类型与另一个属性的值相关的导航属性?

    我有以下实体 public class Notification public int Id get set public string Title get set public Guid RefId get set public Obje
  • 优雅的方式解析URL

    在 POST GET 请求之后 我得到了需要解析的 URL 当然我可以使用 spit 来获取所需的信息 但肯定应该是更优雅的方式 有任何想法吗 http api vkontakte ru blank html access token 88
  • 以字节形式读取文件,无需换行符或回车符

    我想将整个文件读入字节数组 而不需要换行符或回车符 我也在字节数组中得到 13 10 有没有一种方法可以读取整个文件而无需换行符或回车符 我使用了下面的代码 InputStream in new FileInputStream file n
  • lwjgl 3、如何获取当前线程中当前的OpenGL上下文?

    我在 LWJGL 3 中使用 OpenGL 并收到以下错误 Exception in thread main java lang IllegalStateException There is no OpenGL context curren