Я начал изучать Opengl из учебников и для этого использовал GLFW и GLAD. Я создал этот код, чтобы нарисовать простой треугольник:
#include <Glad/glad.h>
#include <Glfw/glfw3.h>
#include <iostream>
void error_callback(int error, const char* description) {
std::cout << description << std::endl;
std::cout << error << std::endl;
}
int main() {
GLFWwindow* window;
if (!glfwInit()) {
std::cout << "Glfw init failed!" << std::endl;
return -1;
}
glfwSetErrorCallback(error_callback);
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window) {
glfwTerminate();
std::cout << "Failed to load glfw window!" << std::endl;
return -1;
}
glfwMakeContextCurrent(window);
if( !gladLoadGLLoader((GLADloadproc) glfwGetProcAddress) ) {
std::cout << "Failed to load Opengl Context!" << std::endl;
return -1;
}
float positions[6] = {
-0.5f, -0.5f,
0.0f, 0.5f,
0.5f, -0.5f
};
unsigned int buffer;
glGenBuffers(1, &buffer);
std::cout << "Buffer generated successfully" << std::endl;
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), positions, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, (void*)0);
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
И исполняемый файл создается этим make-файлом:
VER = -std=c++17
DEPDIR = -IInclude
LIBDIR = -LLibraries
LIBS = -lglfw3 -lopengl32 -lglu32 -lgdi32 -luser32 -lkernel32
main: main.cpp
g++ $(VER) -Wall main.cpp glad.c -o main $(DEPDIR) $(LIBDIR) $(LIBS)
clean:
rm *.o main
Код компилируется без ошибок, но когда я запускаю в программе происходит сбой.
Я также заметил, что консоль не печатает сообщение, которое появляется после функции glGenBuffers ().
Я исследовал проблемы, подобные этой, но ни одна из них не решила проблема.
Версия Opengl - 1.4