This project aims to be a simple application with various implementations of image processing
algorithms implemented mainly on GPU in one place. It's GUI is made with GTK3, with image
rendering through OpenGL and operations in OpenCL. This project was started by me and
Michał Siejak as a programming assignment for Image Processing
class that took place in winter semester in 2011/2012 acadaemic year at Adam Mickiewicz
University of Poznań under supervision of Mr Wojciech Kowalewski PhD.
I implemented OpenGL context in GTK, most of user interface, plugin API, file loading plugin
API, ppm loading/saving plugin and all image processing operations except convolutions.
User interface is implemented using GTK+3. However, the canvas on which the images are drawn is
an OpenGL window. Since GTK3 didn't have any support for embedding OpenGL when the program was
written, it's done by a nasty hack, that takes native X11 window handler and tries to establish
GLX context in that window.
To avoid sending big images back and forth through PCI Express bus CLIPT uses buffer sharing
between OpenCL and OpenGL introduced in OpenCL 1.1. Internal image format is 32 bits per channel
RGB stored as floats. This fact establishes 1GB of VRAM as a reasonable minimum when working
with large (4k x 4k) images, since two copies of the image must be stored in GPU memory. When
user previews some filter/operation and adjusts parameters in real time, the data is not leaving
the GPU. This makes interaction with program more smooth. Only when the user hits Apply on some
effect's window, the result of the GPU computation is sent back to RAM.