據我所知,當我設置上GLFW這些方面的制約:爲什麼我沒有使用GLFW獲得向前兼容的OpenGL上下文?
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;
}
您是否嘗試過其他任何配置文件[窗口提示](http://www.glfw.org/docs/latest/window.html#window_hints),比如'GLFW_OPENGL_ANY_PROFILE'或'GLFW_OPENGL_COMPAT_PROFILE'? –
@JoachimPileborg將其設置爲GLFW_OPENGL_COMPAT_PROFILE似乎已修復它,但爲什麼?它應該以任何方式工作,而且,我想要一個核心配置文件。有什麼辦法獲得最大的核心配置文件? – Nooble
爲什麼你想要最高的支持版本?如果他們以後刪除你的代碼使用的功能呢? – immibis