2013-02-08 171 views
0

我一直在與SDL TTF,現在,我創造了多行文本渲染文本呈現功能。SDL_Surface透明度問題

我創建一個表面的每一行,在「全球」面塊傳輸的,然後說:「全球性」的表面轉換成一個紋理。

其實我的問題如下:如果我讓全局表面透明,blitting不起作用(它顯示空的表面),如果我設置了SDL_FillRect,然後執行SDL_SetColorKey,則不起作用。

我想這樣做與每個像素的方法,它的工作原理,但它不是預期的結果。

我實際上需要的是:BLIT上(帶TTF_RenderText_Blended文本被渲染表面),它們的blit一個SDL_Surface內具有透明背景,僅此而已。

SDL_Surface * surfed_texture = SDL_CreateRGBSurface(SDL_SWSURFACE,surface_width,surface_height,32, 
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000); 

Uint32 tormv = SDL_MapRGB(surfed_texture->format,255,0,255); 

int possiblecolors[] = { 255,0,255,255,255,255 }; 

int in_pc = 0; 

if(color.r == possiblecolors[0] && color.g == possiblecolors[1] && color.b == possiblecolors[2]){ 
    in_pc=3; 
} 

/*SDL_FillRect(surfed_texture,NULL,SDL_MapRGB(surfed_texture->format,possiblecolors[in_pc],possiblecolors[in_pc+1],possiblecolors[in_pc+2])); 
SDL_SetColorKey(surfed_texture, SDL_SRCCOLORKEY, SDL_MapRGB(surfed_texture->format,possiblecolors[in_pc],possiblecolors[in_pc+1],possiblecolors[in_pc+2])); 
*/ 
SDL_Surface * temporal = NULL; 
for(int i=0;i<(int)buff_split.size();i++){ 
    const char* c_text = buff_split.at(i).c_str(); 

    temporal = TTF_RenderText_Blended(font,c_text,color); 

    int w_fo; 
    int h_fo; 
    TTF_SizeText(font,c_text,&w_fo,&h_fo); 

    SDL_Rect rct; 
    rct.y=i*lineSkip; 

    if(txt_align==ALIGN_LEFT){ 
     rct.x=0; 
    }else if(txt_align==ALIGN_CENTER){ 
     rct.x = surface_width/2 - w_fo/2; 
    }else if(txt_align==ALIGN_RIGHT){ 
     rct.x = surface_width - w_fo; 
    } 

    rct.w=0; 
    rct.h=0; 

    // Blit surface 

    SDL_BlitSurface(temporal,NULL,surfed_texture,&rct); 

    SDL_FreeSurface(temporal); 

} 

用透明background = blive into「surfed_texture」不顯示blitted表面。 每像素方法:不刪除所有背景。

而且SDL_SetColorKey不工作! (我已經嘗試過SDL_DisplayFormatAlpha並且仍然無法工作)。

有幫助嗎?

回答

1

的解決方案如下:

使用SDL_SetAlpha沒有在「全球性」的表面,適用SDL_SetAlpha每個「時間」表面沒有任何標誌,並與值0:

SDL_SetAlpha(temporal,NULL,0); 

現在它的正常工作!