首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用glViewport进行故障分割(使用GLFW和GLAD进行openGL C++编程)

使用glViewport进行故障分割(使用GLFW和GLAD进行openGL C++编程)
EN

Stack Overflow用户
提问于 2021-06-20 07:55:46
回答 1查看 156关注 0票数 0

1)问题总结:

我完全按照LearnOpenGL .com上的教程进行操作。

每当调用glViewport时,我的程序就会崩溃(出现分段错误)。根据下面所示的代码(和教程中的代码),我如何才能在调用glViewport时不会崩溃。

2)我尝试的内容:

除了用谷歌搜索这个确切的东西并与多个教程相关联之外,我还尝试了摆弄代码。请参阅下面的代码。当它在main()中调用glViewport()时,我尝试将其注释掉并重新编译。程序不再崩溃,但如果我调整窗口大小,它会崩溃并出现分段错误。如果我注释掉glViewport调用和glfwSetFramebufferSizeCallback调用,那么我可以在不崩溃的情况下调整窗口大小。

3)下面是编译命令行、GLXINFO和代码。

编译时使用:

代码语言:javascript
复制
g++ program.cpp  -ldl -lGL -lglfw  -o program

我根据glxinfo上的说明和信息下载了GLAD (摘录在这里)

OpenGL核心配置文件版本字符串: 4.6.0 NVIDIA 460.80 OpenGL核心配置文件着色语言版本字符串: 4.60 NVIDIA OpenGL核心配置文件上下文标志:(无) OpenGL核心配置文件掩码:核心配置文件

OpenGL版本字符串: 4.6.0 NVIDIA 460.80 OpenGL着色语言版本字符串: 4.60 NVIDIA OpenGL上下文标志:(无) OpenGL配置文件掩码:(无)

OpenGL ES profile版本字符串: OpenGL ES 3.2 NVIDIA 460.80 OpenGL ES profile shading language版本字符串: OpenGL ES GLSL ES 3.20

代码

代码语言:javascript
复制
#include <iostream>
#include "../glad/glad.c"
//#include "glad.c"
#include </usr/include/GLFW/glfw3.h>

// FUNCTION PROTOTYPES 

// register callback function to resize viewport if user resizes window
void framebuffer_size_callback(GLFWwindow* window, int width, int height); 

using namespace std;
int main()
{
    //initializes GLFW
    if (!glfwInit())
        return -1; 
    
    // initializes what version to use
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    //glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    
    // create window object
    GLFWwindow* window; 
    window = glfwCreateWindow(1024, 768, "LearnOpenGL", NULL, NULL);
    if (window == NULL)
    {
        cout << "Failed to create GLFW window" << endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    
    // register viewport resize callback function to window (auto resize viewport)
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
    
    /* THIS IS CRASHING WITH SEG FAULT ** */
    // viewport
    glViewport(0, 0, 800, 600);
    
    
    //glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); 
    
    // window or application loop
    while(!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();    
    }
    
    
    // properly clean up and exit
    glfwTerminate(); 
    return 0;
}

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    /* THIS IS CRASHING WITH SEG FAULT ** */
    glViewport(0, 0, width, height); 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-20 09:42:58

在其他gl函数继续存在此问题并进行进一步研究后,可以通过将以下代码放在glfwMakeContextCurrent(窗口)之后来解决此问题。这解决了问题中列出的glViewport调用的所有分段故障。

代码语言:javascript
复制
gladLoadGL(); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68051588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档