SDL OpenGL窗口不响应,透明
SDL OpenGL window not responding, transparent
我用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,我已经检查过了:)
在之后设置像素格式属性创建上下文是相当没有意义的。一旦上下文被创建,默认framebuffer的像素格式是不可变的。
将所有调用移到SDL_GL_SetAttribute (...)
,使它们位于SDL_GL_CreateContext(window)
之前。
可以在任何时候设置交换间隔,但是该代码块中的其他内容都需要移动:
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);
现在,您可能会得到一个单缓冲像素格式。这并不适合现代窗口管理器,它只在交换后/前缓冲区时更新单个窗口。缓冲区交换会导致隐式刷新(无论是否交换缓冲区),所以这个问题很可能是由合成窗口管理器引起的。
相关文章:
- C++ 信号和插槽不工作:插槽不响应事件
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- 如何创建子窗口是透明的,父窗口是不透明的?
- 为什么我不能返回带有透明函子的法线映射引用?
- 从静态库使用时隐藏不透明结构的内容
- Qt应用程序不响应鼠标和键盘事件
- ESP8266不响应 AT 命令
- OpenGL/GLFW-滚动轮不响应
- 对话框菜单不响应单击
- 服务器 API 不响应 Curl 函数
- 前和后条件用法。为什么程序不响应条件
- 矩阵的动态分配使程序不响应
- QTableView 不响应数据未聚焦时更改
- 提升 Daytime7 服务器示例不响应 NetCat 客户端
- Qt程序挂起(不响应),直到函数结束,然后再次开始工作
- BOOST-ASIO阻塞服务器不响应阻塞客户端
- MFC应用程序:动画图形导致程序不响应
- WPF应用程序不响应WM_CLOSE
- SDL OpenGL窗口不响应,透明
- c++ socket客户端/服务器端不响应客户端