我的程序是关于绘制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;
}
(注意:我在程序中没有任何窗口事件处理。)
我认为你需要把SDL_RenderClear(Renderer)
放在while循环的顶部。如果你喜欢这样,渲染后窗口永远不会被清除。例如,如果你没有清除窗口,一个移动的点将留下他的痕迹..我也工作SDL,我总是这样做