【问题标题】:CIFilters directly on OpenGL textureCIFilters 直接在 OpenGL 纹理上
【发布时间】:2012-08-14 00:03:39
【问题描述】:

如何在 OpenGL 纹理上直接应用 CIFilter?避免 VRAM->RAM->VRAM (GPU->CPU->GPU) 动作。我的意思是避免这种类型的管道:

因为它们很慢。我需要以某种方式在 GPU 中做尽可能多的事情。但是怎么做呢?

【问题讨论】:

    标签: objective-c macos cocoa opengl core-image


    【解决方案1】:

    参考CGBitmapContextCreate()

    CGContextRef CGBitmapContextCreate (
       void *data,
       size_t width,
       size_t height,
       size_t bitsPerComponent,
       size_t bytesPerRow,
       CGColorSpaceRef colorspace,
       CGBitmapInfo bitmapInfo
    );
    

    注意它需要 void *data。这可以是您可以直接传递给 OpenGL 的图像数据。

    【讨论】:

    • 然后如何将 CGContextRef 直接获取到 CIFilter 并返回?也许我应该使用imageWithTexture:size:flipped:colorSpace: 从纹理中获取 CIImage,然后应用 CIFilter 并以某种方式转换回纹理?但是怎么做呢?
    • 您不必获取 CGContextRef,您已经拥有它。您在 CGBitmapContextCreate() 中传递的 void *data 是您的图像缓冲区。您对该数据执行的任何操作都是间接在图像上的。有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2011-05-19
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多