Ich versuche gerade OpenGl zu lernen. Und ich habe folgendes Problem, wenn ich mit glGetUniformLocation versuche meine Uniform vom Shader ausfindig zu machen findet er diesen uniform einfach nicht. Habt ihr eine Idee wieso?
Mein Code:
const char* vertexShaderSource = R"(
#version 460 core
uniform vec3 transformation;
in vec3 position;
out vec4 color;
void main()
{
gl_Position = vec4(position, 1.0);
color = vec4(1.0, 1.0, 0.0, 1.0);
}
)";
const char* fragmentShaderSource = R"(
#version 460 core
in vec4 color;
out vec4 outColor;
void main()
{
outColor = color;
}
)";
int main()
{
SDL_Init(SDL_INIT_VIDEO);
Window2D window2D("Debug", 800, 600);
gladLoadGL();
glViewport(0, 0, 800, 600);
//Dreieck vertices
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
//Shader
//Vertex Shader
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
//Fragment Shader
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
//Programm
GLuint program = glCreateProgram();
glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader);
glLinkProgram(program);
//Uniform
GLint uniform = glGetUniformLocation(program, "transformation");
if (uniform == -1) {
std::cerr << "Error: Not Found" << std::endl;
}
//Shader
//VBO and VAO
GLuint VBO, VAO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*) 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
while(window2D.windowRun() == false)
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(program);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
window2D.closeWindow();
return 0;
}
Sonst funktioniert tatsächlich alles, das Dreieck wird Gelb angezeigt nur der Uniform funktioniert nicht.