gl3w的isSupported功能发生了一些奇怪的事情。当我调用isSupported(4, 0)
时,它返回false,这意味着不支持OpenGL 4.0。但是,当我打电话给glGetString(GL_VERSION)
时,它说的是OpenGL 4.0版。
这是否意味着我可以使用OpenGL 4.0函数?
我在C ++和Visual Studio 2017中使用gl3w
#include <GL/gl3w.h>
#include <GLFW/glfw3.h>
int main(int argc, char** argv){
if(!glfwInit()) {
FATAL_ERROR("Failed to initialise GLFW");
}
glfwSetErrorCallback(glfwErrorCallback);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
GLFWwindow* window = glfwCreateWindow(640, 480, "OpenGL", nullptr, nullptr);
//If i put glfwMakeContextCurrent here gl3wInit fails
//glfwMakeContextCurrent(window);
if (!window) {
glfwTerminate();
FATAL_ERROR("Window creation failed");
}
if(!gl3wInit()) {} // handle that
glfwMakeContextCurrent(window);
bool support = gl3wIsSupported(4, 0); // returns false
const char* version = glGetString(GL_VERSION); // return "4.0.0"
}
答案 0 :(得分:2)
在致电gl3wInit()
或常规OpenGL函数之前,您必须make a GL context current,否则他们将无法执行任何有用的操作。
答案 1 :(得分:2)
在OpenGL wiki中,您可以阅读:
GL3W库专注于OpenGL 3和4的核心配置文件 仅加载这些OpenGL版本的核心入口点。它支持 Windows,Mac OS X,Linux和FreeBSD。
注意:GL3W加载核心OpenGL 只是默认情况下。如果是--ext,将加载所有OpenGL扩展 flag被指定为gl3w_gen.py。
在code:
内部确认了这一点int gl3wIsSupported(int major, int minor)
{
if (major < 3) // <<<<=========== SEE THIS
return 0;
if (version.major == major)
return version.minor >= minor;
return version.major >= major;
}
您要求glfwWindowHint
提供旧的2.0版本。因此,gl3wIsSupported
将返回false
,gl3wInit
将返回GL3W_ERROR_OPENGL_VERSION
。
glGetString(GL_VERSION)
返回&#34; 4.0&#34;意味着,是的,您可以使用该4.0版本。通过glfwWindowHint
来询问。
答案 2 :(得分:0)
我通过切换到高兴来修复它
if (!glfwInit()) {
FATAL_ERROR("Failed to initialise GLFW");
}
glfwSetErrorCallback(glfwErrorCallback);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
GLFWwindow* window = glfwCreateWindow(640, 480, "OpenGL", nullptr, nullptr);
if (!window) {
glfwTerminate();
FATAL_ERROR("Window creation failed");
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
glfwDestroyWindow(window);
glfwTerminate();
FATAL_ERROR("Failed to initialise OpenGL context");
}
PRINT("OpenGL Version: " << GLVersion.major << "." << GLVersion.minor);