【问题标题】:OpenGL based directshow transform Filter - INVALID OPERATION基于 OpenGL 的 directshow 变换过滤器 - 无效操作
【发布时间】:2015-01-05 10:42:53
【问题描述】:

我正在尝试开发一个基于 OpenGL 的 DirectShow transform 过滤器,它可以以用户指定的任意角度旋转图像。我使用glRotatef的非常基本的图像旋转示例。旋转代码作为独立的 Windows 应用程序运行良好。但是通过 Directshow 过滤器调用时会出错。

其他信息:

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

我怀疑它看起来或多或少像一个线程问题。我有初始化捕获过滤器、添加 opengl 旋转变换过滤器和视频渲染器的示例 directshow 应用程序。在初始化时,我使用了CoInitializeEx 和 COINIT_MULTITHREADED 以及 COINIT_APARTMENTTHREADED。两者都没有对线程进行任何改进。

什么样的方法可以解决这个问题?

【问题讨论】:

    标签: opengl graphics directshow


    【解决方案1】:

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

    有帮助的参考链接

    GlGenTextures keeps returing 0's

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

    Textures not working with OpenGL

    感谢人们纠正了我发布的问题。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多