OpenGL状态重置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL状态重置相关的知识,希望对你有一定的参考价值。

我有一些关于AWT和处理的问题(他们不推荐),我无法在大多数时间获得明确的开始并且处理绘制循环停止工作,问题是各种各样的但它们似乎主要与图形矩阵深度有关。

看看这个问题在起始条件下是如何看似的(如果它启动它不会在以后失败,否则它不会启动)。我想知道是否有某种方法可以完全处理图形状态,即使以全屏运行应用程序为代价。

所以问题主要是,我如何(如果可能的话)在语法上获得新的图形开始?当然,任何其他解决方案或输入都是受欢迎的,它可以用于处理自身。

答案

没有办法重置OpenGL上下文做默认状态。即使有,这也无法解决您的问题,因为您的问题似乎源于这样一个事实:当您的代码完成时,它不会在进入时发现它的状态下留下OpenGL上下文。这肯定不是默认状态。

然而,可能的是,您只是为您的代码创建OpenGL上下文并暂时切换到那个,做你的事情,然后回到原来的。 Windows不依赖于OpenGL上下文,OpenGL上下文与Windows无关;它可以根据需要进行选择和混合(只要像素格式兼容,它们适用于大多数窗口/上下文设置)。

如果您希望/需要访问由Processing创建的OpenGL对象(纹理,缓冲区对象),您可以共享上下文数据(不共享状态,因此您是安全的)。只是不要修改或彻底删除代码不拥有的东西。

您要遇到的一个问题是使用JOGL / AWT完成所有这些操作。快速浏览一下库参考,我发现没有明显的方法来确定当前活动的OpenGL上下文绑定到哪个drawable;虽然很容易获得当前的上下文。但是JOGL本身就是开源的,所以如果没有现成的方法可以实现,那么它应该很容易实现(对于库来说也是一个有价值的补充)。

另一答案

没有标准的OpenGL函数可以做到这一点,但您可以创建自己的函数来将所有绑定,选项和功能重置为OpenGL标准中定义的默认值。但正如@datenwolf在他的回答中所说,也许在上下文之间切换更适合你的问题。选择最适合您的用例的解决方案。

以上是关于OpenGL状态重置的主要内容,如果未能解决你的问题,请参考以下文章

初识OpenGL (-)编程思想

OpenGL - 002_2OpenGL 常见专业名词解析

OpenGL的状态机理解

计算机图形学_图元的属性_1_OpenGL状态变量

如何在应用程序中使用多个 openGL 状态?

opengl使用bmp纹理映射画不出东西