SDL2 OpenGL 窗口立即关闭

Posted

技术标签:

【中文标题】SDL2 OpenGL 窗口立即关闭【英文标题】:SDL2 OpenGL Window Instantly closes 【发布时间】:2017-06-02 01:46:28 【问题描述】:

我正在尝试使用 OpenGL 和 SDL2 编写一个基本游戏,但是每当我运行程序时,窗口都会立即关闭

窗口.cpp

 #include "Window.h"
 #include <GL/glew.h>

 Window::Window(const char* title)

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 900, 900, SDL_WINDOW_OPENGL);
context = SDL_GL_CreateContext(window);

GLenum status = glewInit();

 


 Window::~Window()
 
SDL_DestroyWindow(window);
SDL_GL_DeleteContext(context);
SDL_Quit();
 

   void Window::Input()
 
SDL_Event e;

while (true)

    if (e.type = SDL_QUIT)
    
        exit(0);
    

   

   void Window::Update()
    
SDL_GL_SwapWindow(window);
Input();
     

窗口.h

   #pragma once
   #include <SDL.h>
   #include <GL/glew.h>

   class Window
    
SDL_Window* window;
SDL_GLContext context;

   public:
void Input();
void Update();
Window(const char* title);
~Window();
   ;

Main.cpp

   #include <SDL.h>
   #include <GL\glew.h>
   #include "Window.h"
   #include <iostream>

   using namespace std;

   int main(int argc, char* argv[])
   
Window window("Window");

while (true)

    glClearColor(0, 1, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT);

    window.Update();


return 0;
  

当我运行代码时,我得到一个绿色窗口的短暂闪烁,然后它立即崩溃。当我删除 Input();从我的更新功能来看,窗口不会崩溃,但没有响应。我尝试将 SDL_PollEVent 更改为 SDL_WaitEvent 并为 Input 函数添加延迟,但没有任何效果

【问题讨论】:

【参考方案1】:

首先,当您可能想要检查等价时,您正在使用赋值运算符:

if (e.type = SDL_QUIT)

应该是:

if (e.type == SDL_QUIT)

此外,您还有其他问题。您在测试之前声明了 SDL_Event e; 联合,但您没有将其初始化为任何值。然后你继续循环该变量等待它被设置为退出。没有什么可以改变该变量的值,那么您的循环将如何退出?

【讨论】:

@Abdision:你应该使用Yoda conditionals!

以上是关于SDL2 OpenGL 窗口立即关闭的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 不绘制到 SDL2 窗口

使用 openGL 在 SDL2 中全屏显示窗口

SDL2:如何同时拥有 SDL2 菜单和 OpenGL 上下文?

SDL2 使用高版本opengl

SDL2 使用高版本opengl

SDL2 简明教程:OpenGL 绘制