При запуске программы два раза, она не отображает тот же результат во время выполнения, даже если я использую тот же исполняемый файл.
Вот немного контекста:
Я программирую на MacAir с Sierra 10.13, и моя IDE - Xcode 10.1.
Я понял, что моя проблема вызвана добавлением матрицы преобразования в вершинный шейдер:
// This code is not working
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec2 textureCoords;
out vec2 pass_textureCoords;
uniform mat4 transformM;
void main() {
gl_Position = transformM * vec4(position, 1.0);
pass_textureCoords = textureCoords;
}
И я загружаю матрицу transformM таким образом (я использую библиотеку GLM для математики):
void LoadMatrix(int location, glm::mat4 matrix) {
glUniformMatrix4fv(location, 1, GL_FALSE, &matrix[0][0]);
}
, где location :
uniformName = "transformM";
location = glGetUniformLocation(_shaderID, uniformName.c_str());
(Я сохранил это простым, но вы можете найти полный код здесь: https://github.com/Cuiyere/Ecosystem)
На самом деле, я ожидаю, что мой код отобразит куб и повернет его, но это не такпоявляется примерно в 50% случаев.
Я не понимаю, ПОЧЕМУ эта проблема возникает. Я проверял свой код сто раз, проверял сайт docs.gl, сравнивал код ThinMatrix с моим (даже если оннаписано на Java, общая структура и функции OpenGL остаются практически неизменными), проверилФорумы OpenGL, но, насколько я понимаю, никто никогда не сталкивался с этой проблемой.
Я думаю, что проблема в том, как OpenGL использует вершинный шейдер, но я не могу это подтвердить.