I am having troubles using OpenGL functions in my render loop.
Here is my code :
// This works, I have glad in an include folder with glad headers in it
#include "include/glad/glad.h"
#include <GLFW/glfw3.h>
#include <iostream>
int main(int argc, char *argv[])
{
if (!glfwInit())
{
std::cerr << "Failed to initialise GLFW !" << std::endl;
return -1;
}
glfwSetErrorCallback(callback_error);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
GLFWwindow *window = glfwCreateWindow(640, 480, "Block++", NULL, NULL);
if (!window)
{
std::cerr << "Failed to open window" << std::endl;
return -1;
}
glfwMakeContextCurrent(window);
gladLoadGL();
// This line works well so I guess the issue is not related to OpenGL imports
std::cout << "OpenGL version: " << glGetString(GL_VERSION) << std::endl;
glfwSwapInterval(1);
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
glClearColor(0.22f, 0.83f, 0.86f, 0.0f);
camera.setWindowSize(640, 480);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glClearDepth(1.0f);
//Some initialization stuff here, removing does not impact the result
// This is the main render loop
while (!glfwWindowShouldClose(window))
{
// The error happens here (I saw that using gdb with Visual Studio Code)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// And it happens here if I remove the glClear line
glLoadIdentity();
// The actual rendering stuff is never executed because of the error
glFlush();
glfwSwapBuffers(window);
glfwWaitEvents();
//glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
}
And the error message is not very helpful and specific :
OpenGL version: 4.6 (Core Profile) Mesa 21.1.1 // OpenGL seems to be working
[1] 19991 segmentation fault (core dumped) ./main
The answers I found on StackOverflow and on other websites didn't help me fix my problem as they often refer to GLUT which I was told is out-of-date.
I found two ways to "fix" the issue :
This is not really a fix but it allows the program to run deprecated and removed instructions.
This loads GLAD properly, but the rest of the code has to be refactored to fit modern OpenGL requirements (shaders, etc.).
I learned a lot about shaders and vertices arrays on this website.