Я собираю исходный код GLSL на лету, используя Shaderc. Я знаю, что это работает, потому что я не получаю никаких ошибок OpenGL, а сетка правильно отображается на экране. Однако, когда я хотел загрузить некоторую дополнительную информацию с помощью унифицированных буферов, она не сработала. < /P>
код шейдера (вершина-шейдер еще проще, довольно стандартный материал): < /p>
Я собираю исходный код GLSL на лету, используя Shaderc. Я знаю, что это работает, потому что я не получаю никаких ошибок OpenGL, а сетка правильно отображается на экране. Однако, когда я хотел загрузить некоторую дополнительную информацию с помощью унифицированных буферов, она не сработала. < /P> код шейдера (вершина-шейдер еще проще, довольно стандартный материал): < /p> [code]#version 450 core
glLinkProgram(programId); glValidateProgram(programId); < /code> После всего этого я использую Spirv-Cross, чтобы получить данные отражения (имя, привязка, размер и т. Д.). Код для UBO: < /p> glm::vec3 colour = { 0.2f, 1.0f, 0.3f }; uint32_t ubo; glCreateBuffers(1, &ubo); glNamedBufferData(ubo, sizeof(glm::vec3), nullptr, GL_DYNAMIC_DRAW); glNamedBufferSubData(ubo, 0, sizeof(glm::vec3), glm::value_ptr(colour));
uint32_t bindingPoint = 0; // Actually this comes from the reflection glBindBuffer(GL_UNIFORM_BUFFER, ubo); glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, ubo); < /code> Все это не работает. Прямоугольник, который я хочу сделать, не зеленый, а черный. Как ни странно, когда я использую glshadersource [/code] и glcompileshader все работает нормально. У меня совершенно нет идей.