2017-12-16 10 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]?スクリーンショット? Linux版、SDL版? –

+0

以前のデータを保持するためにフレームバッファが必要とは思わない。それが重要な場合は、テクスチャにレンダリングし、このテクスチャを画面に表示します。 – keltar

+0

SDLのこの消去動作をオフにすることはできますか? – csekri

答えて

0

を私はしばらくの上部にSDL_RenderClear(Renderer)を置く必要があると思いますループ。 このようにすると、レンダリング後にウィンドウがクリアされることはありません。 たとえば、ウィンドウをクリアしないと、動いているドットがトレースを残します。 私はSDLもやっていますが、私はいつもこれをします。

+0

動作しません。 – csekri

+0

whileループの最初の行に 'SDL_RenderClear(Renderer)'を置くと、画面が均一な色にクリアされますが、マンデルブロの設定に関連して描いたものを 'SDL_RenderPresent(Renderer) 'に保存します。プロセス中に別のウィンドウ(たとえば端末)をクリックすると、何らかのイベントが呼び出されて画面が黒くクリアされます。 – csekri

関連する問題