2013-09-05 8 views
7

Mam problemy z następujących czynności:SDL: Render tekstury na górze innej fakturze

muszę renderowania tekstur na górze innej fakturze, a następnie czyni tę główną teksturę. Na przykład mam tekstury niebieski prostokąt i chcę narysować czerwone prostokąty na górze tego niebieskiego rect. Jednak chcę, aby ograniczyć renderowanie tylko w tym prostokącie. Podobnie jak na poniższym obrazku: enter image description here

Przeczytałem coś o blicie tekstur między nimi lub coś podobnego, ale nie jestem pewien, czy jest to możliwe.

Mój kod wygląda następująco:

SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect); 
SDL_RenderCopy(ren,redtexture,NULL,dREDrect); 
SDL_RenderPresent(ren); 

Każdy wie o tym, jak to zrobić w SDL 2.0? to, co używam przy okazji.

Odpowiedz

7

Odpowiedź Marsa nie zadziałała, ponieważ rysowała czarną teksturę i nic na tym nie można było narysować.

Ale to działa !:

SDL_Texture* auxtexture = SDL_CreateTexture(ren, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 500, 500); 

//change the rendering target 

SDL_SetTextureBlendMode(auxtexture, SDL_BLENDMODE_BLEND); 
SDL_SetRenderTarget(ren, auxtexture); 

//render what we want 
triangle->render(ren); //render my class triangle e.g 


//change the target back to the default and then render the aux 

SDL_SetRenderTarget(ren, NULL); //NULL SETS TO DEFAULT 
SDL_RenderCopy(ren, auxtexture, NULL, canvas->drect); 
SDL_DestroyTexture(auxtexture); 

Cheers.

+3

Kilka wskazówek dla przyszłych czytelników. Zawsze upewnij się, że zainicjowałeś 'SDL_Renderer' z flagą' SDL_RENDERER_TARGETTEXTURE', aby obsługiwać obiekty renderowania. Ponadto, nigdy nie próbuj używać 'SDL_Texture', który został utworzony z' SDL_Surface' przy użyciu funkcji 'SDL_CreateTextureFromSurface'. To po prostu nie zadziała. –

+0

@JustinSkiles Cieszę się, że ktoś zauważył brak SDL_RENDERER_TARGETTEXTURE, przez krótką chwilę myślałem, że zwariowałem albo api nagle zmieniło się, aby umożliwić wszystkim renderers renderowanie bezpośrednio do renderowania tekstur docelowych. – Pharap

3

Najpierw musisz utworzyć teksturę, na której chcesz narysować flagę SDL_TEXTUREACCESS_TARGET. Więc utworzyć back teksturę tak:

back = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 50, 50); 

Następnie, podczas wywoływania funkcji rysunkowych, trzeba ustawić back teksturę jako cel, tak jak poniżej:

SDL_SetRenderTarget(renderer, back); 

Następnie narysować to, co chcesz, i po tym, trzeba zmienić cel na null:

SDL_SetRenderTarget(renderer, NULL); 

i uczynić back tekstury:

SDL_RenderCopy(renderer, back, NULL, &some_rect);