【问题标题】:OpenGL state resetOpenGL状态重置
【发布时间】:2017-05-07 08:26:34
【问题描述】:
我在 AWT 和处理方面遇到了一些问题(他们不推荐),我大部分时间都无法清楚地开始,并且处理绘制循环停止工作,问题多种多样,但它们似乎主要与图形有关矩阵深度。
看看这个问题似乎与启动条件有关(如果它启动它以后不会失败,否则它不会启动)。我想知道是否有某种方法可以完全降低图形状态,即使以全屏运行应用程序为代价。
所以问题主要是,我如何(如果可能)以编程方式获得图形的新起点?当然,欢迎任何其他解决方案或意见,它可能对处理本身有所帮助。
【问题讨论】:
标签:
java
opengl
graphics
processing
【解决方案1】:
没有办法将 OpenGL 上下文重置为默认状态。即使有,这也不能解决您的问题,因为您的麻烦似乎源于这样一个事实,即当您的代码完成后,它不会在进入时找到它的状态下留下 OpenGL 上下文。这当然不是默认状态。
但是有可能的是,您仅为您的代码创建 OpenGL 上下文并暂时切换到该上下文,执行您的操作,然后返回到原始上下文。 Windows 不绑定到 OpenGL 上下文,OpenGL 上下文也不绑定到窗口;它可以根据需要进行选择和混合(只要像素格式兼容,它们适用于大多数窗口/上下文设置)。
如果您想要/需要访问由 Processing 创建的 OpenGL 对象(纹理、缓冲区对象),您可以共享上下文数据(不共享状态,因此您很安全)。只是不要修改或彻底删除你的代码不拥有的东西。
您将遇到的一个问题是使用 JOGL/AWT 完成所有这些工作。快速浏览一下库参考,我发现没有明显的方法可以确定当前活动的 OpenGL 上下文绑定到哪个 drawable;不过,获取当前上下文很容易。然而 JOGL 本身是开源的,所以如果没有现成的方法来做到这一点,它应该很容易实现(那么,这也是库中值得添加的一个)。
【解决方案2】:
没有标准的 OpenGL 函数可以做到这一点,但您可以创建自己的函数来将所有绑定、选项和功能重置为 OpenGL 标准中定义的默认值。但正如 @datenwolf 在他的回答中所说,也许在上下文之间切换更适合您的问题。选择最适合您的用例的解决方案。