Я занимаюсь программированием на MacOS 10.14.3, которая поддерживает OpenGL 4.1.
Я использую glfw для пользовательского интерфейса и glew для обнаружения расширений.
этомой код на данный момент:
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
const GLint WIDTH = 800, HEIGHT = 600;
int main() {
if (!glfwInit()) {
std::cout << "GLFW initialisation Failed";
glfwTerminate();
return 1;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,1);
// Core profile = No Backwards Compatibility
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
// Allow forward compatibility
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
GLFWwindow *mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "Test Window", nullptr, nullptr);
if (!mainWindow) {
std::cout << "GLFW window creation Failed!";
glfwTerminate();
return 1;
}
// get buffer size information
int bufferWidth, bufferHeight;
glfwGetFramebufferSize(mainWindow,&bufferWidth,&bufferHeight);
// Set context for GLEW to use
glfwMakeContextCurrent(mainWindow);
// Allow modern extension features
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK) {
std::cout << "GLEW initialisation Failed!";
glfwDestroyWindow(mainWindow);
glfwTerminate();
return 1;
}
// Setup viewport size
glViewport(0,0,bufferWidth,bufferHeight);
while(!glfwWindowShouldClose(mainWindow)) {
// Get + handle user input events
glfwPollEvents();
// Clear window
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(mainWindow);
}
return 0;
}
это должен быть базовый запуск для приложения opengl.он должен инициализировать glfw и glew и покрасить экран в красный цвет, а кроме того я могу добавить свои функции рисования / рендеринга opengl.
Когда я запускаю его вместо того, чтобы видеть окно с красным цветом фона, цвет фона мигает между красным и черным.
есть идеи почему?
update
кажется, что экран мерцает между черным и красным, даже если я выбираю другой цвет с glClearColor.
начинаю думать, что, возможно, glew не работает должным образом.... я вернусь к радости и посмотрим, есть ли какая-либо разница.
обновление 2
заменил glew на glad, удалив код glew, генерируя код радости с помощью веб-интерфейса, затем включив glad.h
и добавил glad.c
к компиляции, и инициализирован доволен:
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
хорошо, теперь все работает правильно ... но я хочу использовать glew ... в чем может быть проблема, которая вызывает это?