gl_InstanceID всегда равен нулю - PullRequest
0 голосов
/ 27 марта 2019

Я хотел бы знать, почему глобальная переменная gl_InstanceID всегда имеет значение 0. Неважно, какую инстансированную функцию рисования я использую.

Мой проект написан на OpenGL 3.3 с помощью GLFW и GLAD . Кроме того, в моем вершинном шейдере мне приходилось использовать ключевое слово flat всякий раз, когда я хочу передать gl_InstanceID фрагментному шейдеру, но это не имеет значения, поскольку переменная in все равно будет ноль.

Справочные страницы Хроноса гласят:

Если текущий примитив не происходит из экземпляра команда, значение gl_InstanceID равно нулю.

Однако в моем цикле я использую что-то вроде:

    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(program0);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture0);

    glBindVertexArray(VAO);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
    glDrawElementsInstancedBaseVertex(GL_TRIANGLES, 1536, GL_UNSIGNED_INT, NULL, 255, 0);

1 Ответ

0 голосов
/ 02 апреля 2019

Если вы используете RenderDoc для своих проектов OpenGL и т. Д. И, как и я, хотите проверить значение gl_InstanceID , то вы можете продвинуть с нуля, щелкнув по крошечному стрелка вверх на вкладке Mesh Output справа от поля Экземпляр , показанного в это изображение.

...