CIFilters непосредственно на текстуре OpenGL

Как я могу применить CIFilters непосредственно к текстуре OpenGL? Чтобы избежать действий VRAM->RAM->VRAM (GPU->CPU->GPU). Я имею в виду, чтобы избежать этого типа конвейера:

введите здесь описание изображения

Потому что они медленные. Мне нужно как-то сделать как можно больше в GPU. Но как?


person hockeyman    schedule 13.08.2012    source источник


Ответы (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.

person RLT    schedule 13.08.2012
comment
А как тогда получить CGContextRef напрямую в CIFilter и обратно? Может быть, я должен использовать imageWithTexture:size:flipped:colorSpace:, чтобы получить CIImage из текстуры, затем применить CIFilter и каким-то образом преобразовать обратно в текстуру? Но как? - person hockeyman; 14.08.2012
comment
Вам не нужно получать CGContextRef, он у вас уже есть. void * данные, которые вы передали в CGBitmapContextCreate(), являются вашим буфером изображения. Любая операция, которую вы выполняете с этими данными, косвенно относится к изображению. Имеет смысл? - person RLT; 14.08.2012