基于 OpenGL 的 directshow 变换过滤器 - 无效操作
OpenGL based directshow transform Filter - INVALID OPERATION
我正在尝试开发一个基于 OpenGL 的 DirectShow transform 滤镜,它可以按用户指定的任意角度旋转图像。我使用非常基本的图像旋转示例,利用 glRotatef。旋转代码作为独立的 windows 应用程序运行良好。但是通过 Directshow 过滤器调用时出错。
附加信息:
- 独立的 OpenGL 旋转应用程序运行良好,在任何阶段都没有任何错误。相同的 OpenGL 代码不能作为 Directshow 过滤器的一部分工作。
- 在 Directshow 过滤器的 Transform 函数成功之前的所有 OpenGL 调用都没有任何 GLErrors。
- 在 DirectShow 过滤器的 Transform 函数之后的所有 OpenGL 调用都抛出错误操作无效(错误代码 1282)。
- 我正在使用 Visual Studio 2008 而不是使用任何 OpenGL 第 3 方库,如 GLUT 或其他东西。
我怀疑它看起来或多或少像一个线程问题。我有初始化捕获过滤器、添加 opengl 旋转变换过滤器和视频渲染器的示例 directshow 应用程序。在初始化时,我使用 CoInitializeEx 和 COINIT_MULTITHREADED 以及 COINIT_APARTMENTTHREADED。两者都没有对线程进行任何改进。
什么样的方法可以解决这个问题?
我已通过在首次调用 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
希望这对困在同一条船上的人有所帮助:-)
我正在尝试开发一个基于 OpenGL 的 DirectShow transform 滤镜,它可以按用户指定的任意角度旋转图像。我使用非常基本的图像旋转示例,利用 glRotatef。旋转代码作为独立的 windows 应用程序运行良好。但是通过 Directshow 过滤器调用时出错。
附加信息:
- 独立的 OpenGL 旋转应用程序运行良好,在任何阶段都没有任何错误。相同的 OpenGL 代码不能作为 Directshow 过滤器的一部分工作。
- 在 Directshow 过滤器的 Transform 函数成功之前的所有 OpenGL 调用都没有任何 GLErrors。
- 在 DirectShow 过滤器的 Transform 函数之后的所有 OpenGL 调用都抛出错误操作无效(错误代码 1282)。
- 我正在使用 Visual Studio 2008 而不是使用任何 OpenGL 第 3 方库,如 GLUT 或其他东西。
我怀疑它看起来或多或少像一个线程问题。我有初始化捕获过滤器、添加 opengl 旋转变换过滤器和视频渲染器的示例 directshow 应用程序。在初始化时,我使用 CoInitializeEx 和 COINIT_MULTITHREADED 以及 COINIT_APARTMENTTHREADED。两者都没有对线程进行任何改进。
什么样的方法可以解决这个问题?
我已通过在首次调用 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
希望这对困在同一条船上的人有所帮助:-)