2012-11-01 4 views
0

다음 코드는 검정색 배경에 녹색 사각형을 표시하기위한 것입니다. 실행되지만 녹색 사각형이 표시되지 않습니다. 그러나 SDL_DisplayFormatAlphaSDL_DisplayFormat으로 변경하면 사각형이 올바르게 렌더링됩니다.SDL_DisplayFormat는 작동하지만 SDL_DisplayFormatAlpha는 작동하지 않습니다.

그래서 이해가 안되나요? 알파 마스크를 사용하여 *surface을 만들고 있는데 내 녹색 색상을 매핑하는 데 SDL_MapRGBA을 사용하고 있으므로 SDL_DisplayFormatAlpha을 사용하는 것이 일관성이 있습니다.

는 (나는 명확성을 위해 오류 검사를 제거하지만, SDL API 호출 중 어느 것도이 예에서 실패하지 않습니다.) 내가 SDL_MapRGBA에 대한 잘못된 형식을 사용했다

#include <SDL.h> 

int main(int argc, const char *argv[]) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 

    SDL_Surface *screen = SDL_SetVideoMode(
     640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF 
    ); 

    SDL_Surface *temp = SDL_CreateRGBSurface(
     SDL_HWSURFACE, 100, 100, 32, 0, 0, 0, 
     (SDL_BYTEORDER == SDL_BIG_ENDIAN ? 0x000000ff : 0xff000000) 
    ); 

    SDL_Surface *surface = SDL_DisplayFormatAlpha(temp); 

    SDL_FreeSurface(temp); 

    SDL_FillRect(
     surface, &surface->clip_rect, SDL_MapRGBA(
      screen->format, 0x00, 0xff, 0x00, 0xff 
     ) 
    ); 

    SDL_Rect r; 
    r.x = 50; 
    r.y = 50; 

    SDL_BlitSurface(surface, NULL, screen, &r); 

    SDL_Flip(screen); 

    SDL_Delay(1000); 

    SDL_Quit(); 

    return 0; 
} 

답변

0

. (surface->format 대신 screen->format의.)

SDL_FillRect(
    surface, NULL, SDL_MapRGBA(
     surface->format, 0xff, 0xff, 0x00, 0xff 
    ) 
); 

을 했어야 나는 두 개의 동등한 것이다라고 생각했다. 그리고 그들은 SDL_DisplayFormat()을 호출 한 후 SDL_DisplayFormatAlpha()을 호출 한 후에 이 아닌이 아니라고 부릅니다. 화면 표면에 알파 채널이 없으므로 두 형식간에 형식이 다릅니다.

(크로스 게시 gamedev.stackexchange.com)

관련 문제