OpenGL无法使用GLFW和GLLoadGen在Mavericks上绘图

詹姆斯·希思

我正在尝试为OpenGL工作设置跨平台代码库,并且以下代码在我的硬盘驱动器的Windows 7分区上绘制得很好。但是,在Mavericks上,我只有黑屏,无法弄清原因。我已经尝试了指南中建议的所有内容以及此处的相关问题,但是到目前为止,仍然没有任何效果!希望我只是缺少一些明显的东西,因为我还是OpenGL的新手。

#include "stdafx.h"

#include "gl_core_4_3.hpp"
#include <GLFW/glfw3.h>

int main(int argc, char* argv[])
{
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, 1);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    if (!glfwInit())
    {
        fprintf(stderr, "ERROR");
        glfwTerminate();
        return 1;
    }

    GLFWwindow* window = glfwCreateWindow(640, 480, "First GLSL Triangle", nullptr, nullptr);
    if (!window)
    {
        fprintf(stderr, "ERROR");
        glfwTerminate();
        return 1;
    }

    glfwMakeContextCurrent(window);

    gl::exts::LoadTest didLoad = gl::sys::LoadFunctions();
    if (!didLoad)
    {
        fprintf(stderr, "ERROR");
        glfwTerminate();
        return 1;
    }

    printf("Number of functions that failed to load: %i\n", didLoad.GetNumMissing()); // This is returning 16 on Windows and 82 on Mavericks, however i have no idea how to fix that.

    gl::Enable(gl::DEPTH_TEST);
    gl::DepthFunc(gl::LESS);

    float points[] =
    {
        0.0f, 0.5f, 0.0f,
        0.5f, -0.5f, 0.0f,
        -0.5f, -0.5f, 0.0f,
    };

    GLuint vbo = 0;
    gl::GenBuffers(1, &vbo);
    gl::BindBuffer(gl::ARRAY_BUFFER, vbo);
    gl::BufferData(gl::ARRAY_BUFFER, sizeof(points) * sizeof(points[0]), points, gl::STATIC_DRAW);

    GLuint vao = 0;
    gl::GenVertexArrays(1, &vao);
    gl::BindVertexArray(vao);
    gl::EnableVertexAttribArray(0);
    gl::BindBuffer(gl::ARRAY_BUFFER, vbo);
    gl::VertexAttribPointer(0, 3, gl::FLOAT, 0, 0, NULL);

    const char* vertexShader = 
        "#version 400\n"
        "in vec3 vp;"
        "void main() {"
        "   gl_Position = vec4(vp, 1.0);"
        "}";

    const char* fragmentShader =
        "#version 400\n"
        "out vec4 frag_colour;"
        "void main() {"
        "   frag_colour = vec4(1.0, 1, 1, 1.0);"
        "}";

    GLuint vs = gl::CreateShader(gl::VERTEX_SHADER);
    gl::ShaderSource(vs, 1, &vertexShader, nullptr);
    gl::CompileShader(vs);

    GLuint fs = gl::CreateShader(gl::FRAGMENT_SHADER);
    gl::ShaderSource(fs, 1, &fragmentShader, nullptr);
    gl::CompileShader(fs);

    GLuint shaderProgram = gl::CreateProgram();
    gl::AttachShader(shaderProgram, fs);
    gl::AttachShader(shaderProgram, vs);
    gl::LinkProgram(shaderProgram);

    while (!glfwWindowShouldClose(window))
    {
        gl::ClearColor(0, 0, 0, 0);
        gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT);
        gl::UseProgram(shaderProgram);
        gl::BindVertexArray(vao);

        gl::DrawArrays(gl::TRIANGLES, 0, 3);

        glfwPollEvents();
        glfwSwapBuffers(window);
    }

    glfwTerminate();
    return 0;
}

使用2013年的Macbook Mini,Intel HD Graphics 5000通过Xcode进行编译。可能还值得注意的是,GLLoadGen GetNumMissing()方法在OSX上返回了82个缺少的函数,我不知道为什么这样做或如何修复它。GLFW包含gl.h而不是gl3.h,但通过声明所需的宏输出来警告它包括标头和仍未包含任何内容,从而强制其包含gl3.h。任何帮助或建议将是巨大的。

数据狼

在调用任何其他GLFW函数之前,必须先调用glfwInit。以便获取诊断也注册一个错误回调,为什么一定GLFW操作失败。您请求了MacOS X Mavericks不支持的OpenGL配置文件。但是glfwInit在设置了窗口提示后调用将重置该选择,因此为什么要获得窗口+上下文,而不是所需的配置文件。glfwInit在前面解决了这个问题,但现在你的窗口+上下文创建失败,由于缺乏操作系统的支持。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在GUI上使用GLFW和OpenGL的局限性

使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL

如何在 Windows 上使用 Cygwin 编译和链接 OpenGL/GLFW 程序?

OpenGL glfw无法使用着色器绘制点

使用glutDisplayFunc(opengl)绘图

Android OpenGL ES无法绘图

无法使用捆绑安装在Mavericks上安装gem

无法在MATLAB上绘图

在Windows上使用ANGLE和GLFW设置C ++项目

无法在NetBeans中的Linux中的C ++和OpenGL(GLFW)中编译简单的源代码

我无法在OpenGL和glfw中制作有效的keyCallback函数

即使使用 beginPath() 和 Closepath() 在画布上绘图时也无法为 fillStyle 使用不同的颜色

使用OpenGL在OpenCV中绘图

在OOP中使用OpenGL绘图

是否可以使用glfw3在Macbok Pro 2015 mid上运行OpenGL 3.0?

Android上的OpenGL绘图与Unity结合以通过帧缓冲区传输纹理无法正常工作

使用glfw3 glew和opengl在Visual Studio社区中获取访问冲突异常

在Mesa 10和GLFW3中使用OpenGL核心配置文件

在某些设备上使用OpenGL ES 2.0的Android绘图纹理在某些设备上运行缓慢

Linux上的opengl:无法使用正确的版本

如何使用GLFW在openGL中旋转相机?

Pygame无法在Mac上绘图

在Linux上使用OpenGL编译C ++程序时,错误:'GL / glfw3.h:无此类文件或目录

OpenGL C ++ glfw 3在glGenVertexArrays上出现错误1282

使用AppleScript为Mavericks上的应用程序启用辅助访问:本地化和优雅

OpenGL和GLFW:不绘制多边形

为什么 opengl 不显示 glfw 和 glbuffersubdata

无法使用Seaborn进行绘图

无法使用Matplotlib进行绘图