2012-08-13 43 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