java - 使用 LWJGL 创建隐藏 Canvas

标签 java opengl awt lwjgl

我开始编写一个特殊用途的图形程序,并且我倾向于使用 OpenGL 来生成图形。最终目标是通过基本框架构建一个同时容纳 2D 和 3D 图形的架构。

将生成的图形导出为图像是一个关键功能,最终我将编写代码来生成图形的 2D 投影的 vector 图像。然而,与此同时,我希望能够将图形导出为高分辨率图像 - 图像明显大于应用程序窗口。

我正在用 Java 编写此应用程序并使用 LWJGL OpenGL 包装器。我已经弄清楚如何截取显示窗口的屏幕截图,但我还没有成功创建更大的图像。我尝试过制作隐形 Canvas ,但无法实现。

文档显示 here Canvas 的 isDisplayable() 方法必须返回 true,为此,我重写了 isDisplayable() 方法以始终返回 true,因此它不应该关心它是否在 Frame 中,但这不起作用。相反,它会抛出以下错误:

java.lang.RuntimeException: No OpenGL context found in the current thread.
        at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
        at org.lwjgl.opengl.GL20.glDeleteProgram(GL20.java:311)

问题似乎是它还需要顶级窗口中的一些属性,但即使当我创建一个虚拟 Frame 类时,我也会遇到与以前相同的错误,直到我在框架上调用 setVisible(true) 。

有谁知道如何伪造这些图形属性,使其认为它具有可见的顶级窗口?有谁知道更简单的方法吗?

最佳答案

作为替代方案,您可以使用帧缓冲区对象 (FBO) 渲染到纹理中。 看看这个render to texture示例。

关于java - 使用 LWJGL 创建隐藏 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017453/

相关文章:

java - shell_exec 将多行输出显示为单行

java - 具有不同日志级别的不同 java 进程具有相同的 log4j2.xml

java - Eclipse 在两个不同的选项卡中显示相同的文件

java - 使用 gradle "run"任务运行 main 方法

c++ - 学习OpenGL时找不到glClear

Java 捕获来自子类 obj 的事件

c++ - 为glViewport(0,0,framebufferWidth,framebufferHight)抛出异常;

C++ Opengl,Win内存泄漏

java - 如何使用另一个类中的图形对象调用函数?

java - 使用自定义字体