Witam, od niedawna bawię się w opengl, i mam taki kod funkcji:
GLint loadShader(std::string wayToVertexShader, std::string wayToFragmentShader)
{
//nadaje id shaderowi
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
std::string vertexShaderData;
std::ifstream vertexShaderFile(wayToVertexShader);
if (vertexShaderFile.is_open())
{
std::string line;
while (std::getline(vertexShaderFile, line))
{
vertexShaderData += "\n" + line;
}
vertexShaderFile.close();
}
std::string fragmentShaderData;
std::ifstream fragmentShaderFile(wayToFragmentShader);
if (vertexShaderFile.is_open())
{
std::string line;
while (std::getline(fragmentShaderFile, line))
{
fragmentShaderData += "\n" + line;
}
fragmentShaderFile.close();
}
const char *vertexPTR = vertexShaderData.c_str();
const char *fragmentPTR = fragmentShaderData.c_str();
//wstaria kod rudøowy shadera do niego
glShaderSource(vertexShader, 1, &vertexPTR, NULL);
glShaderSource(fragmentShader, 1, &fragmentPTR, NULL);
//kompiluje shader
glCompileShader(vertexShader);
glCompileShader(fragmentShader);
//tworzy obiekt i jego identyfikator
GLuint shaderPrograme = glCreateProgram();
//dodaje shadery do programy ^
glAttachShader(shaderPrograme, vertexShader);
glAttachShader(shaderPrograme, fragmentShader);
//łączy shadery
glLinkProgram(shaderPrograme);
//usuwa zajętą pamięć
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
//identyfikator obiektu
return shaderPrograme;
}
i wywołanie:
GLuint shader = loadShader("C:\Shaders\vertexShader.glsl", "C:\Shaders\fragmentShader.glsl");
while (!glfwWindowShouldClose(window))
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(shader);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 6);
glfwSwapBuffers(window);
glfwPollEvents();
}
Oraz takie kody shaderów:
vertexShader:
#version 303
layout(location = 0) in vec3 vp;
void main()
{
gl_Position = vec4(vp, 1.0);
}
i fragment shader:
#version 303
out vec4 frag_colour;
void main()
{
frag_colour = vec4(1.0, 0.0, 0.0, 1.0);
}
i nie wiem dlaczego kwadrat(a raczej 2 trójkąty) nadal są białe