簡體   English   中英

OpenGL無法使用GLFW和GLLoadGen在Mavericks上繪圖

[英]OpenGL not drawing on Mavericks with GLFW and GLLoadGen

我正在嘗試為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重置該選擇,因此為什么要獲得window + context,而不是所需的配置文件。 glfwInit放在前面可以解決該問題,但是現在由於缺少操作系統支持,因此無法創建window + context。

在每個openGL調用之后,請檢查是否沒有錯誤(使用glGetError或gl :: GetError。使用着色器時,必須檢查以確保它們已正確編譯,可能存在錯誤。因此也請檢查(glGetShader和glShaderInfoLog)。對鏈接階段執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM