OpenGL在使用GLEW时崩溃

opengl crashing when use glew

本文关键字:崩溃 GLEW OpenGL      更新时间:2023-10-16

当我在无符号 int 缓冲区下使用这 3 行时,使用 glew 时 opengl 崩溃

if (glfwInit() != GLEW_OK) {
std::cout << "Error" << std::endl;
}
float positions[6] = {
-0.5, -0.5,
0, 0.5,
0.5, -0.5
};
unsigned int buffer;

//glGenBuffers(1, &buffer);
//glBindBuffer(GL_ARRAY_BUFFER, buffer);
//glBufferData(GL_ARRAY_BUFFER, 6* sizeof(float), positions, GL_STATIC_DRAW);

它在控制台中向我显示错误,但当我使用三个代码时不要崩溃 在未签名的int缓冲区下,我观看了Cherno项目并尝试了他的代码,但我认为这是相同的错误,因为我的GPU很旧

补充 Ripi2 的答案:

这是针对glfw(窗口gui(而不是glew(指向OGL API的函数指针(

这意味着:

GLFW用于创建OpenGL上下文,即创建窗口。它具有用于在各种平台上创建窗口的代码,因此您不必自己编写代码。

GLEW只是通过函数指针获取您的OpenGL实现供您使用。

因此,您应该始终在#include <GLFW/glfw3.h之前#include <GL/glew.h>

您可以通过以下方式检查 GLFW 初始化:

if (!glfwInit()) {
...
}

您可以通过以下方式检查 GLEW 初始化:

if (glewInit() != GLEW_OK) {
...
}

你必须初始化GLEW。在创建 OpenGL 上下文后立即调用glewInit

if ( glfwInit() != GLFW_TRUE ) {
// error handling
// ...
}
GLFWwindow *wnd = glfwCreateWindow( ... );
if ( wnd == nullptr ) {
// error handling
// ...
}
glfwMakeContextCurrent(wnd);
glewExperimental = GL_TRUE;
if ( glewInit() != GLEW_OK ) {
// error handling
// ...
}

请注意,如果成功,glewInit将返回GLEW_OKglewInit初始化 OpenGL 函数的函数指针。 如果尝试通过未初始化的函数指针调用函数,则会发生分段错误。

Glew 可以通过glewExperimental = GL_TRUE;启用其他扩展。请参阅GLEW文档,其中说:

GLEW 从图形驱动程序获取有关支持的扩展的信息。但是,实验性或预发布驱动程序可能不会通过标准机制报告每个可用的扩展,在这种情况下,GLEW 将报告它不受支持。为了规避这种情况,可以通过在调用glewInit()之前将其设置为GL_TRUE来打开glewExperimental全局开关,从而确保所有具有有效入口点的分机都将公开。

glfwInit()?不。这是针对glfw(窗口 GUI(而不是glew(指向 OGL API 的函数指针(。使用glewInit()