OpenGL: как мне получить доступ ко информации обо всех текущих буферах в моем приложении?
Как мне получить информацию обо всех текущих буферах в моем приложении? Например, чтобы узнать все активные VBO, используемые моим приложением в определенном кадре.
Редактировать 1: Ответы полковника Тридцать два и Рето Коради дали мне общую идею для получения информации о буфере, кажется, приложение не показывало никакого буфера с (glGetVertexAttribiv
), однако мне удалось перечислить мои текущие буферы с помощью:
GLint isEnabled = GL_TRUE;
for (GLint iAttrib = 1; isEnabled; ++iAttrib) {
isEnabled = glIsBuffer(iAttrib);
if (isEnabled) {
//I'm listing all buffer data in a string vector at the moment
bufferInfoData.push_back("Buffer: " + std::to_string(iAttrib) + ">");
}
}
Это приводит к следующему выводу из буферов с 1 по 15:
Buffer: 1>
Buffer: 2>
Buffer: 3>
... etc etc
Buffer: 14>
Buffer: 15>
Однако я хотел бы знать, какой тип и данные в этих буферах, также я не уверен, является ли правильный счет для перечисления всех, если подсчет буферов включен, пока один не включен.
1 ответ
Чтобы получить все буферы, которые используются для текущего включенного атрибута вершины, вы можете использовать код, подобный следующему:
GLint nAttrib = 0;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nAttrib);
for (GLint iAttrib = 0; iAttrib < nAttrib; ++iAttrib) {
GLint isEnabled = GL_FALSE;
glGetVertexAttribiv(iAttrib, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &isEnabled);
if (isEnabled) {
GLint bufferId = 0;
glGetVertexAttribiv(iAttrib, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, &bufferId);
}
}
Обратите внимание, что это даст вам один и тот же буфер несколько раз, если он используется для нескольких атрибутов.