SDL2窗口是透明的

时间:2018-06-22 10:19:27

标签: c++ sdl-2

我创建的SDL窗口有问题:我可以创建一个窗口,但是它是绝对透明的,您可以看穿它(不是白屏,也没有错误)。

#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;
}

1 个答案:

答案 0 :(得分:2)

如果要进行简单渲染,则应使用SDL_Renderer API;特别是SDL_CreateRendererSDL_SetRenderDrawColorSDL_RenderClearSDL_RenderPresentSDL_UpdateWindowSurface东西主要用于移植古老的SDL 1应用程序,而并非真正意在编写新东西。无论如何,您实际上都没有在窗口表面放置任何东西(肯定不是白色背景),因此它不包含任何东西也就不足为奇了。

使用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_CreateWindowSDL_DestroyWindow调用之间放这个选项-请查看SDL2 Wiki,以详细了解这些功能的作用。