Операции с кадровым буфером OpenGL, drawPixels не работает с альфа-каналом - PullRequest
0 голосов
/ 30 января 2011

Я возиться с кадровым буфером с OpenGL и JOGL.У меня есть объект Graphics, в котором я рисую.

Каждый раз, когда графика изменяется, я извлекаю информацию R, G, B и A в виде байтов для каждого пикселя и записываю ее в ByteBuffer в порядке ARGB.Я проверил преобразование, все в порядке.

Если я вызываю метод drawPixels с использованием режима GL_RGB, он рисует прямоугольник с заданными координатами, он рисуется черным независимо от того, какие цвета у меня были в моей графике.Если я использую режим GL_RGBA, он ничего не рисует.

Так что мой код для операций кадрового буфера, ib1 - это байтовый буфер с данными изображения:

    GL gl=canvas.getGL();

    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrtho (0, canvas.getWidth(), canvas.getHeight(),0, -1.0, 1.0);
    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glDisable(GL.GL_DEPTH_TEST);
    gl.glColor3f(1, 1, 1);
    //
    gl.glRasterPos2i(0, height);
    //gl.glDrawPixels(width, height, GL.GL_RGB, GL.GL_BYTE, ib1);
    gl.glDrawPixels(width, height, GL.GL_RGBA, GL.GL_BYTE, ib1);

Заранее спасибо за вашу помощь

1 Ответ

0 голосов
/ 06 февраля 2011

Проблема заключалась в формате данных пикселей, ожидаемых OpenGL.

Мой вывод был массивом целых чисел, которые я мог разделить на 4 однобайтовых значения для RGBA. Однако OpenGL ожидает, что они будут в подписанном формате, поэтому 01111111 является самым высоким, 10000000 - самым низким значением. мой вывод Java из объекта Graphics2D был без знака, поэтому значения от 00000000 (самый низкий) до 11111111. Через несколько бит операций он работает и сейчас.

...