SDL2 window 透明
SDL2 window is transparent
我创建的 SDL window 有问题:我可以创建一个 window 但它是绝对透明的,你可以透过它看到它(不是白屏而且我没有错误)。
#include <SDL.h>
#include <iostream>
int main(int argc, char *argv[])
{
SDL_Window *window = nullptr;
if (SDL_Init(SDL_INIT_VIDEO) < 0)
std::cout << "SDL Initialization Error : " << SDL_GetError() << std::endl;
else
{
window = SDL_CreateWindow("SDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
if (window == NULL)
{
std::cout << "Window creation error :" << SDL_GetError() << std::endl;
}
else
{
SDL_UpdateWindowSurface(window);
SDL_Delay(2000000);
}
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
如果你想做简单的渲染你应该使用 SDL_Renderer API;具体来说 SDL_CreateRenderer
、SDL_SetRenderDrawColor
、SDL_RenderClear
和 SDL_RenderPresent
。 SDL_UpdateWindowSurface
内容主要用于移植古老的 SDL 1 应用程序,并不是真正用于编写新内容。无论如何,您实际上并没有在 window 表面上放置任何东西(当然不是白色背景),因此它不包含任何东西也就不足为奇了。
使用SDL_Renderer的简单示例:
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
for(bool keep_running = true; keep_running;) {
for(SDL_Event ev; SDL_PollEvent(&ev);) {
if(ev.type == SDL_QUIT) {
keep_running = false;
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
您可以将其放在 SDL_CreateWindow
和 SDL_DestroyWindow
调用之间 - 查看 SDL2 Wiki 了解每个函数的功能的详细信息。
我创建的 SDL window 有问题:我可以创建一个 window 但它是绝对透明的,你可以透过它看到它(不是白屏而且我没有错误)。
#include <SDL.h>
#include <iostream>
int main(int argc, char *argv[])
{
SDL_Window *window = nullptr;
if (SDL_Init(SDL_INIT_VIDEO) < 0)
std::cout << "SDL Initialization Error : " << SDL_GetError() << std::endl;
else
{
window = SDL_CreateWindow("SDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
if (window == NULL)
{
std::cout << "Window creation error :" << SDL_GetError() << std::endl;
}
else
{
SDL_UpdateWindowSurface(window);
SDL_Delay(2000000);
}
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
如果你想做简单的渲染你应该使用 SDL_Renderer API;具体来说 SDL_CreateRenderer
、SDL_SetRenderDrawColor
、SDL_RenderClear
和 SDL_RenderPresent
。 SDL_UpdateWindowSurface
内容主要用于移植古老的 SDL 1 应用程序,并不是真正用于编写新内容。无论如何,您实际上并没有在 window 表面上放置任何东西(当然不是白色背景),因此它不包含任何东西也就不足为奇了。
使用SDL_Renderer的简单示例:
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
for(bool keep_running = true; keep_running;) {
for(SDL_Event ev; SDL_PollEvent(&ev);) {
if(ev.type == SDL_QUIT) {
keep_running = false;
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
您可以将其放在 SDL_CreateWindow
和 SDL_DestroyWindow
调用之间 - 查看 SDL2 Wiki 了解每个函数的功能的详细信息。