Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glew使屏幕在红色和黑色之间闪烁。高兴的工作_C++_Macos_Opengl_Glfw_Glew - Fatal编程技术网

C++ glew使屏幕在红色和黑色之间闪烁。高兴的工作

C++ glew使屏幕在红色和黑色之间闪烁。高兴的工作,c++,macos,opengl,glfw,glew,C++,Macos,Opengl,Glfw,Glew,我正在MacOS 10.14.3上编程,它支持OpenGL 4.1 我将glfw用于ui,将glew用于扩展检测 这是迄今为止我的代码: #include <iostream> #include <GL/glew.h> #include <GLFW/glfw3.h> const GLint WIDTH = 800, HEIGHT = 600; int main() { if (!glfwInit()) { std::cout <

我正在MacOS 10.14.3上编程,它支持OpenGL 4.1

我将glfw用于ui,将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;
}

好了,现在可以正常工作了。。。但我想用glew。。。造成这种情况的原因可能是什么?

您有什么屏幕缓冲区格式?是单缓冲还是双缓冲?@BenVoigt-这是完整的代码。。我想我没有设置一些东西来启用双缓冲?:)我真的是个新手,如果我帮不上忙,那么很抱歉,文档中说glfw使用双缓冲我的默认值添加glfwWindowHint(glfw_DOUBLEBUFFER,GL_TRUE);提供相同的结果
glClearColor
只需调用一次,它告诉OpenGL使用哪种颜色来清除缓冲区
glClear
必须在每一帧调用(除非您确定覆盖了每一个像素),并实际使用之前指定的颜色清除缓冲区。
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }