gpt4 book ai didi

c++ - OpenGL 不使用 GLFW 和 GLLoadGen 绘制 Mavericks

转载 作者:行者123 更新时间:2023-11-28 02:40:24 25 4
gpt4 key购买 nike

我正在尝试为 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;
}

通过 Xcode 编译,使用 2013 Macbook Mini,Intel HD Graphics 5000。可能还值得注意的是,GLLoadGen GetNumMissing() 方法在 OSX 上返回 82 个缺失函数,我不知道为什么会这样或如何修复它。 GLFW 包括 gl.h 而不是 gl3.h,但是通过声明所需的宏输出一个关于包括两个 header 但仍然没有绘制的警告来强制它包括 gl3.h。任何帮助或建议都会很棒。

最佳答案

您必须在调用任何其他 GLFW 函数之前调用 glfwInit。还要注册一个错误回调,以便诊断某个 GLFW 操作失败的原因。您请求的 OpenGL 配置文件不受 MacOS X Mavericks 支持。但是在设置窗口提示后调用 glfwInit 会重置该选择,因此您得到的是窗口+上下文,而不是所需的配置文件。将 glfwInit 拉到前面可以解决该问题,但现在由于缺少操作系统支持,您的窗口+上下文创建失败。

关于c++ - OpenGL 不使用 GLFW 和 GLLoadGen 绘制 Mavericks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com