2015-03-20 2 views
0

код OpenGL написанный с C++, как это:Как использовать glDrawBuffers с JOGL?

static const GLenum buffs[] = { GL_COLOR_ATTACHMENT0 }; 
glDrawBuffers(1, buffs); 

И я нашел тот же API в JOGL:

gl.glDrawBuffers(int n, IntBuffer bufs) 

Я не знаю, как порт код C++ выше JOGL с Этот метод. Кто-нибудь знает? Благодарю.

+0

почему не создавая IntBuffer, содержащий только GL_COLOR_ATTACHMENT0? Остальное остается неизменным. – BDL

ответ

0

Вы можете использовать его почти так же, как и в C++

IntBuffer buffer = BufferUtil.newIntBuffer(1); 
buffer.put(GL.GL_COLOR_ATTACHMENT0); 

gl.glDrawBuffers(1, buffer); 
+0

Скорее вызовите newDirectIntBuffer, чтобы JOGL не создавал для вас прямой буфер. Это больше «будущее доказательство», поскольку мы не уверены, что будем продолжать использовать косвенные буферы NIO в следующих основных версиях JOGL. – gouessej

+0

Кстати, используйте класс «Буферы», поскольку BufferUtil не существует в JOGL 2. – gouessej

1

Основываясь на documentation, есть две перегруженные точки входа для glDrawBuffers() в JOGL. Там тот, который вы уже видели с IntBuffer аргументом, но и this one:

void glDrawBuffers(int n, 
        int[] bufs, 
        int bufs_offset) 

Он принимает массив значений Жеребьевка буфера, а также смещение в массиве. Если значения в начале массива, смещение будет равно 0. Таким образом, ваш звонок будет:

int buffs[] = {GL.GL_COLOR_ATTACHMENT0}; 
gl.glDrawBuffers(1, buffs, 0); 
+0

У меня проблема с использованием фреймбуфера, не могли бы вы взглянуть на этот пост? [link] (http://stackoverflow.com/questions/29179885/wrong-framebuffer-status-return-36054-when-try-to-do-depth-attachment) – Oscar

+0

Пожалуйста, используйте правильную документацию, исправьте свой комментарий: http : //jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GL2ES2.html#glDrawBuffers (int,% 20java.nio.IntBuffer) @Reto Koradi Вы используете ссылку на полностью устаревшая документация Oracle для очень старой (2010) версии JOGL 2. – gouessej

+0

@ gouessej Взять на учет, вы можете редактировать комментарии и сами себя;) – elect

0

насчет

gl.glDrawBuffers(1,new int[]{GL.GL_COLOR_ATTACHMENT0},0); 
+1

Лучше избегать встроенных массивов, потому что таким образом вы можете управлять напрямую с кучи памяти и быть уверенным, что он удаляется – elect