【发布时间】:2015-01-04 04:24:10
【问题描述】:
据我所知,当我在 GLFW 上设置这些上下文约束时:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
我应该在正在运行的机器上获得最大可用的 OpenGL 上下文,前提是它高于 OpenGL 3.3。但是,通过使用glGetString 获取 OpenGL 上下文版本,我发现情况并非如此。每次我查询glGetString 的上下文版本时,我只得到我用glfwWindowHint 设置的主要和次要版本,上面没有。请记住,我的 GPU 支持 OpenGL 4.5。
另外需要注意的是,当我没有设置任何约束时,我确实得到了一个 OpenGL 4.5 上下文。
这是完整的源代码,似乎复制了问题:
#define GLEW_STATIC
#include <iostream>
#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <glm\glm.hpp>
int main(int argc, char argv[])
{
if (!glfwInit())
{
std::cerr << "Failed to initialize GLFW 3.0.4" << std::endl;
getchar();
glfwTerminate();
return -1;
}
std::cout << "Initialized GLFW 3.0.4" << std::endl;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* m_window = glfwCreateWindow(640, 480, "Koala", NULL, NULL);
if (!m_window)
{
std::cerr << "Failed to create OpenGL 3.3+ context" << std::endl;
getchar();
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(m_window);
std::cout << "Created OpenGL 3.3+ context" << std::endl;
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
std::cerr << "Failed to initialize GLEW 1.11.0" << std::endl;
getchar();
glfwTerminate();
return -1;
}
std::cout << "Initialized GLEW 1.11.0" << std::endl;
const GLubyte* renderer = glGetString(GL_RENDERER);
const GLubyte* version = glGetString(GL_VERSION);
std::cout << "GPU: " << renderer << std::endl;
std::cout << "OpenGL Version: " << version << std::endl;
while (!glfwWindowShouldClose(m_window))
{
glfwSwapBuffers(m_window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
【问题讨论】:
-
您是否尝试过任何其他个人资料window hints,例如
GLFW_OPENGL_ANY_PROFILE或GLFW_OPENGL_COMPAT_PROFILE? -
@JoachimPileborg 将此设置为 GLFW_OPENGL_COMPAT_PROFILE 似乎已修复它,但为什么呢?它应该以任何一种方式工作,此外,我想要一个核心配置文件。有什么办法可以获得最大的核心配置文件?
-
您为什么想要支持的最高版本?如果他们稍后删除您的代码使用的函数怎么办?