2011-07-10 5 views
13

Nie chcę wykonywać obliczonego pixelart z OpenCL i wyświetlać go bezpośrednio na ekranie bez obierania procesora. Mógłbym wykorzystać interoperacyjność OpenCL z OpenGL i napisać do banków tekstur GPU i wyświetlić teksturę z OpenGL. Zastanawiam się, jaki byłby najlepszy sposób, aby to zrobić, ponieważ nie potrzebuję żadnych rzeczy 3d, tylko 2d pixelart.Jak narysować piksele obliczone w OpenCL na ekranie za pomocą OpenGL?

Odpowiedz

13

Najlepszym sposobem byłoby użycie współdziałania OpenCL/OpenGL, jeśli obsługuje go implementacja OpenCL. Dzięki temu OpenCL może uzyskać dostęp do niektórych obiektów OpenGL (obiektów buforowych i tekstur/buforów renderowania). Nie będzie można uzyskać bezpośredniego dostępu do domyślnego bufora ramki OpenGL (np. Wyświetlacza), ale będziesz mógł uzyskać dostęp do obrazu związanego z framebuffer object. Stamtąd możesz w OpenGL zrobić blur bufora ramki do domyślnego bufora ramki. Nic nie dotknie pamięci procesora.

Będziesz musiał sprawdzić szczegóły na stronie CL/GL interop, aby poznać szczegóły. Podstawową ideą jest utworzenie bufora renderowania w OpenGL (który wiążesz z serwerem FBO). Następnie przekazujesz ten bufor renderowania do OpenCL i wykonujesz swoje obliczenia w buforze renderowania. Po zakończeniu wykonuje się glBlitFramebuffer, aby skopiować dane z bufora renderowania do domyślnego bufora ramki, a następnie zamienić bufory, aby je wyświetlić.

+1

Dobra. Znam tę metodę, ale mam pewne problemy z realizacją CL i GL interop. Czy możesz zobaczyć mój problem tutaj: http://stackoverflow.com/questions/8789662/interoperability-texture-access-block? – itun

Powiązane problemy