基于 OpenGL 的直接显示转换筛选器 - 无效操作



我正在尝试开发一种基于OpenGL的DirectShow转换过滤器,该滤镜以用户指定的任意角度旋转图像。我使用非常基本的图像旋转样本,利用glRotatef。旋转代码作为独立的窗口应用程序非常有效。但是通过直接显示过滤器调用时出错。

附加信息:

  1. 独立的 OpenGL 旋转应用程序在任何阶段都运行良好,没有任何错误。相同的 OpenGL 代码不能作为 Directshow 过滤器的一部分工作。
  2. 在 Directshow 筛选器的转换函数之前的所有 OpenGL 调用都成功,没有任何 GLErrors。
  3. DirectShow 筛选器的转换函数之后的所有 OpenGL 调用都会将错误作为无效操作(错误代码 1282)抛出。
  4. 我正在使用Visual Studio 2008,而不是使用任何OpenGL第三方库,如GLUT或其他东西。

我怀疑它看起来或多或少像一个线程问题。我有一个示例直接显示应用程序,用于初始化捕获过滤器,添加opengl旋转转换过滤器和视频渲染器。在初始化时,我将CoInitializeEx与COINIT_MULTITHREADED一起使用,也使用了COINIT_APARTMENTTHREADED。两者都没有在线程方面提供任何改进。

解决这个问题时,会采取什么样的方法?

我已经通过在第一次调用转换函数期间创建 OpenGL 上下文来解决此问题。这使得 OpenGL 上下文与 OpenGL 绘图函数具有相同的线程。

有帮助的参考链接

GlGenTextures不断刷新0

https://www.opengl.org/wiki/Common_Mistakes#Extensions_and_OpenGL_Versions

纹理不适用于 OpenGL

感谢您纠正我发布的问题。

编辑:这种线程问题是由于线程之间共享设备上下文的问题。它可以通过使用 wglShareList API 在两个不同的线程之间共享上下文来处理。这已经解决了我发布的问题。

https://www.opengl.org/wiki/OpenGL_and_multithreading

https://www.opengl.org/wiki/Platform_specifics:_Windows

希望这对困在同一条船上的人有所帮助:-)

相关内容

  • 没有找到相关文章

最新更新