【问题标题】:Is it possible to use two different configs for the same context是否可以对同一上下文使用两个不同的配置
【发布时间】:2014-12-31 12:35:16
【问题描述】:

在 OpenGL ES 2.0 中,我想使用 16 位配置和 32 位配置,并在同一上下文中根据需要在它们之间切换。这可能吗?

【问题讨论】:

  • 配置是什么意思?您是指颜色缓冲区中每像素的位数吗?
  • 设置属性后向 egl 子系统请求的那个,并使用这些属性调用 eglchooseconfig。
  • @JuliusCanute:我认为你应该尝试一下。桌面 GL 可以仅将上下文设置为不同的可绘制对象。对于 GLES,我能找到的只是 eglMakeCurrent 的注释:“如果 drawreadctx 不兼容,则会生成 EGL_BAD_MATCH 错误。”但是在这种情况下我没有发现对“兼容性”的任何严格要求(但我也没有看得太彻底)。
  • @derhass 我没有在桌面上尝试过。正如@“Reto Koradi”所说,它在 Android 中对我不起作用。

标签: graphics opengl-es opengl-es-2.0


【解决方案1】:

如果您的 OpenGL ES 实现使用 EGL 进行窗口系统集成,例如 Android 就是这种情况,答案是 NO

eglCreateContext()documentation)的签名如下:

EGLContext eglCreateContext(EGLDisplay display,
                            EGLConfig config,
                            EGLContext share_context,
                            EGLint const* attrib_list);

所以上下文的配置是在创建时指定的,以后不能修改。

请注意,配置也被指定为创建表面的部分。参见例如eglCreateWindowSurface() (documentation),它也将EGLConfig 作为参数之一。所以就像你不能在相同的上下文中使用多个配置一样,你也不能在相同的表面上使用多个配置。

因此,如果您想使用多个配置,您将需要多个上下文以及多个表面/窗口。

在单个上下文中渲染到具有不同颜色格式的目标的唯一方法是使用帧缓冲区对象 (FBO)。 FBO 附件的颜色格式可以不同于默认帧缓冲区的格式,所有这些都在一个上下文中。

【讨论】:

  • 谢谢!在上下文之间切换是一项昂贵的操作吗?
  • 它可能非常昂贵,是的。绝对不仅仅是典型的 OpenGL 状态变化。它在现代硬件上的效率往往比以前更高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多