基于OpenGL的directshow变换过滤器 - 无效操作

时间:2015-01-05 10:42:53

标签: opengl graphics directshow

我正在尝试开发一个基于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第三方库,如GLUT或其他。
  5. 我怀疑它看起来或多或少像是一个线程问题。我有示例directshow应用程序初始化捕获过滤器,添加opengl旋转变换过滤器和视频渲染器。在初始化时,我使用了CoInitializeEx COINIT_MULTITHREADED和COINIT_APARTMENTTHREADED。在线程方面都没有任何改进。

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

1 个答案:

答案 0 :(得分:0)

我通过在第一次调用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

希望这对那些陷入同一条船的人有用: - )