Я заинтересован в использовании вершинного шейдера для обработки буфера без создания какого-либо визуализированного вывода. Вот соответствующий фрагмент:
glUseProgram(program);
GLuint tfOutputBuffer;
glGenBuffers(1, &tfOutputBuffer);
glBindBuffer(GL_ARRAY_BUFFER, tfOutputBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(double)*4*3, NULL, GL_STATIC_READ);
glEnable(GL_RASTERIZER_DISCARD_EXT);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfOutputBuffer);
glBeginTransformFeedbackEXT(GL_TRIANGLES);
glBindBuffer(GL_ARRAY_BUFFER, positionBuffer);
glEnableVertexAttribArray(positionAttribute);
glVertexAttribPointer(positionAttribute, 4, GL_FLOAT, GL_FALSE, sizeof(double)*4, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer);
glDrawElements(GL_TRIANGLES, 1, GL_UNSIGNED_INT, 0);
Это работает нормально до вызова glDrawElements()
, который приводит к GL_INVALID_FRAMEBUFFER_OPERATION
. И glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
возвращает GL_FRAMEBUFFER_UNDEFINED
.
Я предполагаю, что это связано с тем, что в моем контексте GL нет кадрового буфера по умолчанию, и я не привязал другой FBO. Но, поскольку меня не волнует визуализированный вывод, и я включил GL_RASTERIZER_DISCARD_EXT
, я подумал, что фреймбуфер не нужен.
Итак, есть ли способ использовать обратную связь преобразования без фреймбуфера, или мне нужно сгенерировать и привязать фреймбуфер, даже если мне все равно на его содержимое?
glCheckFramebufferStatus (...)
, если у вас нет привязки FBO и нет фреймбуфера по умолчанию? GL_FRAMEBUFFER_UNDEFINED возвращается, если target является буфером кадра по умолчанию, но буфер кадра по умолчанию не существует. - person Andon M. Coleman   schedule 09.06.2014GL_RASTERIZER_DISCARD_EXT
означает, что фреймбуфер не нужен. Итак, я получил больше информации о ситуации с фреймбуфером и включил эту информацию сюда на случай, если она поможет ответить на вопрос. - person smokris   schedule 09.06.2014