【问题标题】:SDL2 window is transparentSDL2 窗口是透明的
【发布时间】:2018-06-22 10:19:27
【问题描述】:

我创建的 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;
}

【问题讨论】:

    标签: c++ sdl-2


    【解决方案1】:

    如果你想做简单的渲染,你应该使用 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 以了解有关每个函数的作用的详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多