当前位置: 首页 > 知识库问答 >
问题:

存储OpenGL状态

鲁昕
2023-03-14

我目前正在考虑将opengl状态存储为某种适当类型的全局thread_local变量。那个设计有多糟糕?有什么陷阱吗?

共有1个答案

丁业
2023-03-14

如果您想坚持OpenGL的设计(上下文指针可以被认为是“thread_local”),我想这是一个有效的选择······显然,您需要完全控制所有OpenGL调用,以便使状态副本与当前上下文的状态保持同步。

我个人更喜欢使用一个“OpenGLState”类来包装所感兴趣的OpenGL状态,该类带有一系列可设置/可获得的属性,每个属性都映射到状态的某个部分。然后还可以避免两次设置相同的状态。您可以将其设置为thread_local,但我不能(Visual C++只支持POD类型的thread_local)。

您需要非常小心,因为有些OpenGL调用会间接地更改上下文状态中看似无关的部分。例如,glDeleteTextures将把已删除纹理的任何绑定重置为0。此外,一些工具包在背后更改OpenGL状态方面非常“有帮助”(例如,OSX上的QtOpenGLContext在设置为当前时为您更改视口)。

 类似资料:
  • 我有一个关于VBO的问题。举个例子,我试图构建一个体素风格的引擎,它甚至可以生成16x16x16的块。 我是否在VBO中存储地图信息?如何获得立方体的垂直度?按照我的想法,VBO需要24个vector3变量(每个位置每个立方体的向量)。这似乎太多了。 有没有办法创建一个“立方体”VBO模板,然后以某种方式更改我要绘制的每个立方体的坐标,调用该模板(我希望有意义),并使用bufferdata为每个位

  • 问题内容: 广泛的讨论问题。是否已经有任何库可以让我在Java中存储应用程序的执行状态? 例如,我有一个处理文件的应用程序,现在该应用程序可能在某个时刻被迫关闭。我想存储所有已处理文件和未处理文件的信息,以及处理正在进行的阶段正在进行的流程。 是否已经有抽象此功能的库,或者我将不得不从头开始实现它? 问题答案: 似乎您正在寻找的是可以使用Java Serialization API 执行的序列化。

  • 全局状态存储与普通状态存储有何不同? 全局状态存储是否在不同机器上运行的所有实例中都有数据副本?由于全局状态存储不使用任何更改日志主题进行恢复,因此在重新启动时它的行为在我的场景中全局存储的源主题没有键。

  • 我正在开发使用Spring Cloud Stream构建的Kafka Streams应用程序。在这个应用程序中,我需要: 使用可在以后检索的连续消息流。 保留与某些条件匹配的邮件 ID 列表。 在单独的线程中,运行一个计划程序,该计划程序定期读出消息 ID,检索与这些 ID 匹配的相应消息,并对这些消息执行操作。 从列表中删除已处理的消息 ID,以便不重复工作。 我已考虑如下实施: < li >将

  • 我们有以下高级DSL处理拓扑: 简而言之,我们在上面做的是: null 其思想是创建窗口化事件计数,并将这些窗口化键用于联接和聚合操作(在KTable的情况下,这类操作没有窗口) 问题是:join和aggregate操作的状态存储没有保留机制,并导致磁盘(RocksDB)中的空间爆炸。 更具体地说:(跳跃)窗口会在键上产生笛卡尔积,并且没有删除旧窗口的机制。 请注意,支持table1和table2

  • 问题内容: 我正在使用Redux进行状态管理。 如何将商店重置为初始状态? 例如,假设我有两个用户帐户(和)。 想象以下事件序列: 用户登录到该应用程序并执行某些操作,因此我们在存储中缓存了一些数据。 用户注销。 用户无需刷新浏览器即可登录应用程序。 此时,缓存的数据将与关联,我想对其进行清理。 当第一个用户注销时,如何将Redux存储重置为其初始状态? 问题答案: 一种方法是在应用程序中编写根减