我正在尝试GPUImage
与OpenGL
基于我的照片编辑应用程序一起使用。问题在于,这两个OpenGL
上下文似乎冲突,这意味着它们GPUImage
无法正常运行。
我尝试在使用之前添加此内容GPUImage
:
[EAGLContext setCurrentContext:[GPUImageContext sharedImageProcessingContext].context];
但这没有帮助。我看到的问题是,当我尝试将过滤器应用于图像时,它将过滤器应用于先前过滤的图像,即
1)过滤图像1-输出图像2
2)重新加载我的OpenGL图像画布
3)过滤图片2-输出图片2(应该是图片3,即图片2的过滤后的版本)
在应用过滤器的前三次会发生这种情况,然后它才能正常工作。有没有一种方法可以重置GPUImage
上下文?还是要处理GPUImage
上下文单例并重新开始?
首先,您需要确保基于OpenGL的绘图应用程序将其场景渲染为纹理,并且您正在使用纹理输入(如果传递到GPUImage中)。GPUImage需要使用纹理,而不是渲染缓冲区本身。如果要从GPUImage中退出,请使用纹理输出及其渲染回调块来了解渲染何时完成。
要在GPUImage和另一个OpenGL上下文之间共享内容,您需要使GPUImage的上下文与您自己的OpenGL上下文属于同一共享组。最好不要直接共享GPUImage上下文,因为它在后台调度队列内部执行操作,并且如果在您自己的代码中进行渲染,则不能保证线程安全。
iOS上的CubeExample示例应用程序演示了如何针对OpenGL ES执行此操作。特别是,它使用以下行:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:[[[GPUImageContext sharedImageProcessingContext] context] sharegroup]];
为在那里用于非GPUImage渲染的OpenGL ES上下文设置共享组。不过,我必须查找Mac和台式机OpenGL的等效功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句