2017-12-16 9 views
1

내 프로그램에서 만델 브로 세트를 그려야합니다. 운영 체제에서 다른 창 (예 : Chrome 또는 텍스트 편집기 ...)을 클릭하면 프로그램이 화면을 검은 색으로 지우지 만 완료 한 곳을 계속 그리는 것을 발견했습니다. 그것은 드로잉 중입니다. 드로잉이 끝나고 다른 창을 클릭하면 지우기가 수행되지 않습니다.Linux에서 다른 소프트웨어의 창을 클릭하면 SDL이 창 화면을 지 웁니다.

모든 픽셀을 화면에 추적하지 않고 전체 픽셀 행렬을 항상 인쇄하지 않고이 문제를 해결할 수있는 해결책이 있습니까 (예 : 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; 
} 

(참고 : 나는이 프로그램에서 처리하는 모든 윈도우 이벤트 없어요.)

+1

[mcve]? 스크린 샷? 리눅스 버전, SDL 버전? –

+0

이전 데이터를 유지하기 위해 프레임 버퍼가 필요하다고 생각하지 않습니다. 중요한 경우 텍스처로 렌더링 한 다음이 텍스처를 화면에 표시하십시오. – keltar

+0

SDL의 삭제 동작을 끌 수 있습니까? – csekri

답변

0

을 난 당신이 동안의 상단에 SDL_RenderClear(Renderer)을 넣을 필요가 있다고 생각 고리. 이렇게하면 렌더링 후에 창이 지워지지 않습니다. 예를 들어 창을 지우지 않으면 이동하는 점이 흔적을 남깁니다 .. 나는 SDS도 작동하며 항상이 작업을 수행합니다.

+0

작동하지 않습니다. – csekri

+0

while 루프의 첫 번째 줄에'SDL_RenderClear (Renderer)'를 넣으면 화면이 균일 한 색으로 지워지지만 Mandelbrot 집합과 관련된 내용을 저장하고'SDL_RenderPresent (Renderer) '하고 싶습니다. 처리 도중 다른 창 (예 : 터미널)을 클릭하면 무언가를 호출하여 화면을 검은 색으로 지 웁니다. – csekri

관련 문제