Проблема: Opengl конвертирует целочисленный массив, который я по какой-то причине передал в массив вершин, в массив с плавающей точкой.
Когда я пытаюсь использовать вершины в качестве ivec2 в моем вершинном шейдере, я получаю несколько странных чисел в качестве выходных данных, однако, если я использую vec2 вместо этого, я получаю ожидаемый результат.
Код:
VertexShader:
#version 430 core
// \/ This is what I'm reffering to when talking about ivec2 and vec2
layout (location = 0) in ivec2 aPos;
uniform uvec2 window;
void main()
{
float xPos = float(aPos.x)/float(window.x);
float yPos = float(aPos.y)/float(window.y);
gl_Position = vec4(xPos, yPos, 1.0f, 1.0f);
}
Передача массива вершин:
GLint vertices[] =
{
-50, 50,
50, 50,
50, -50,
-50, -50
};
GLuint VBO, VAO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO); // \/ I'm passing it as an int
glVertexAttribPointer(0, 2, GL_INT, GL_FALSE, 2 * sizeof(GLint), (void*)0);
glEnableVertexAttribArray(0);
glUseProgram(sprite2DProgram);
glUniform2ui(glGetUniformLocation(sprite2DProgram, "window"), 640, 480);
Выход:
Первое изображение - это то, что происходит, когда я использую ivec2 (плохой вывод).
Вторая картина - это то, что радует, когда я использую vec2 (ожидаемый результат).
Если вам нужно узнать что-то еще, пожалуйста, задайте это в комментариях.