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);
    }
}

Обратите внимание, что это даст вам один и тот же буфер несколько раз, если он используется для нескольких атрибутов.

Другие вопросы по тегам