【发布时间】:2014-05-07 20:37:52
【问题描述】:
我用 OpenGL 上下文创建的 SDL 窗口有问题:
它是透明的,你可以看到它后面的控制台。从下面的代码中可以看出,我只是写了一些东西来在屏幕上显示红色。
它不响应任何东西。当我将鼠标悬停在屏幕上时,加载光标就会出现,点击什么也不做。
#define main SDL_main
#include "stdafx.h"
int main(int argc, char **argv)
{
bool quit = false;
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
SDL_Quit( );
return 1;
}
SDL_Window* window = NULL;
window = SDL_CreateWindow("SandVox", 100, 100, 600, 400, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
if (!window) {
std::cout << "Unable to create window" << std::endl;
SDL_DestroyWindow(window);
return 0;
}
SDL_GLContext glcontext = SDL_GL_CreateContext(window);
SDL_GL_MakeCurrent(window, glcontext);
glewInit( );
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetSwapInterval(1);
SDL_Renderer* render = NULL;
render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Event *mainEvent = NULL;
mainEvent = new SDL_Event( );
while (!quit && mainEvent->type != SDL_QUIT) ;
{
SDL_PollEvent(mainEvent);
/*
SDL_RenderClear(render);
SDL_RenderPresent(render);
*/
glClearColor(1.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapWindow(window);
}
SDL_GL_DeleteContext(glcontext);
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
delete mainEvent;
SDL_Quit( );
return 0;
}
stdafx.h 并没有什么令人兴奋的地方,就是这样:
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_mixer.h>
#include <GL/glew.h>
#include <GL/GL.h>
#include <GL/glxew.h>
#include <GL/wglew.h>
#include <GL/GLU.h>
编辑:为了抢占人们可能提出的问题,是的,我的计算机上安装了 OpenGL 4.0,我已经检查过 :)
【问题讨论】:
-
SDL_GL_SetAttribute()ing 之后你创建一个上下文并没有真正做任何事情。 -
我建议你好好看看你的事件循环
while声明。那里有一个分号,那不属于。专业提示:使用像 uncrustify 这样的工具来自动格式化代码的缩进;我对您的代码执行了此操作,并且由于多余的分号,“循环”左大括号最终位于不同的行中(您当然需要 K&R 样式的缩进才能看到这一点)。 -
datenwolf:哇,太笨拙了!我没看到:)