2012-02-17 33 views
0

我正在執行SDL_BlitSurface(s_pScreen, 0, s_pScreen, 0);以使顯示屏變黑如下。如果src和dest在SDL_BlitSurface中相同,會發生什麼情況?

它的作品,但有時它看起來像崩潰。 我收到錯誤消息 "The exception Privileged Instruction. (0xC0000096) occured in the application at location (0x00700070)"

計劃:

Lock lock(&s_layer_cs); 
    // clear the back buffer 
    SDL_FillRect(s_pScreen, NULL, 0); 
    // Blit each layer to the back buffer 
    for (int i = 0; i < s_layers; ++i) 
    { 
     if (!s_layer_disabled[i]) 
     { 
      if (0U == IlluminationCmd) 
      { 
      //Make the display black 
      SDL_BlitSurface(s_pScreen, 0, s_pScreen, 0); 
      } 
      else 
      { 
      SDL_BlitSurface(s_pSurface[i], 0, s_pScreen, 0); 
      } 
     } 
    } 
    // Flip buffers 
    SDL_Flip(s_pScreen); 
+0

什麼's_pSurface'的聲明? – 2012-02-17 06:54:50

回答

1

SDL能處理重疊的位塊傳輸,在這種情況下,兩個表面。您可以在「SDL_blit.c」中看到此內容,並根據您在查看文件的方式,查看其他人報告的第308行或第298行。該行檢查源和目標是相同的並處理它。

if (surface == surface->map->dst) { 
       surface->map->sw_data->blit = SDL_BlitCopyOverlap; 

如果要我猜它不是源和目標是相同的,但與屏幕本身的錯誤的錯誤。

編輯:還有其他方法可以使屏幕變黑。實際上,如果你有任何事情已經發生在屏幕上或者如果屏幕是不同的顏色,SDL_BlitSurface(s_pScreen, 0, s_pScreen, 0);不會將屏幕清除爲黑色。我可以看到它的唯一原因是因爲在將整個屏幕設置爲黑色之後,您正在將其自身拍攝。

+0

是的,屏幕是SDL_Surface * – user1032187 2012-02-17 09:41:49

0

如果您仍在使用SDL-1.2.13,那麼它可能類似於我們的錯誤。我們固定它加入這個只是塊傳輸後:

asm("cld"); 

或者如果你是在Windows上:

__asm{cld}; 

A debian bug report about it

相關問題