单击Linux中另一个软件的窗口时,SDL会清除窗口屏幕

问题描述 投票:1回答:1

我的程序是关于绘制Mandelbrot集。我发现当我点击操作系统中的另一个窗口(例如Chrome或文​​本编辑器......)时,我的程序会将屏幕清除为黑色,但会继续绘制完成的位置。这是在绘画期间。如果绘图完成,我单击另一个窗口,则不会发生任何清除。

是否有解决方案来解决这个问题(例如,在SDL中打开或关闭某些内容)而不跟踪屏幕上的所有像素并始终打印整个像素矩阵?

最小代码:

#include <stdlib.h>
#include <stdbool.h>
#include <SDL2/SDL.h>

enum {WIDTH = 1700, HEIGHT = 950};

int main(){
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window *window = SDL_CreateWindow("Minimal", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN);
        SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
    SDL_RenderClear(renderer);
    SDL_RenderPresent(renderer);
    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
        SDL_Event event;
    bool exit_ = false;
    while (! exit_){
        for (int i = 1; i < WIDTH; i++){
            for (int j = 1; j < HEIGHT; j++){
                SDL_RenderDrawPoint(renderer, i, j);
            }
                SDL_RenderPresent(renderer);
        }

        while (SDL_PollEvent(&event)){
            if (event.type == SDL_QUIT) exit_ = true;
        }



    }
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
        SDL_Quit();
    return 0;
}

(注意:我在程序中没有任何窗口事件处理。)

c drawing sdl-2
1个回答
0
投票

我认为你需要把SDL_RenderClear(Renderer)放在while循环的顶部。如果你喜欢这样,渲染后窗口永远不会被清除。例如,如果你没有清除窗口,一个移动的点将留下他的痕迹..我也工作SDL,我总是这样做

© www.soinside.com 2019 - 2024. All rights reserved.