2012-08-13 42 views
0

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

enter image description here

因为他们是缓慢的。我需要以某种方式在GPU中尽可能地做到这一点。但是如何?

回答

0

参考CGBitmapContextCreate()

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

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

+0

然后如何将CGContextRef直接送到CIFilter并返回? Maby我应该使用'imageWithTexture:size:flipped:colorSpace:'从纹理获取CIImage,然后应用CIFilter并以某种方式将其转换回纹理?但是如何? – hockeyman 2012-08-14 06:18:40

+0

你不必得到CGContextRef,你已经拥有它了。您在CGBitmapContextCreate()中传递的void *数据是您的图像缓冲区。您对该数据所做的任何操作都是间接的图像。说得通? – MacGeek 2012-08-14 08:20:35