2013-09-05 13 views
7

Sto avendo difficoltà con il seguente:SDL: renda struttura sopra l'altro tessitura

ho bisogno di rendere una texture in cima ad un'altra consistenza e quindi rendere quella struttura principale. Ad esempio, ho la texture del rettangolo blu e voglio disegnare rettangoli rossi sopra questo rettangolo blu. Comunque voglio che restringano il rendering solo su questo rettangolo. Mi piace la seguente immagine: enter image description here

Ho letto qualcosa sulla texture blit tra di loro o qualcosa del genere ma non sono sicuro che sia possibile.

Il mio codice è simile al seguente:

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

Qualsiasi si sa su come fare questo in SDL 2.0? questo è quello che sto usando a proposito.

risposta

7

La risposta di Marte non ha funzionato perché ha tracciato una trama nera e nulla potrebbe essere disegnato su questo.

Ma questo funziona !:

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); 

Cin cin.

+3

Alcuni suggerimenti per i futuri lettori. Assicurati sempre di inizializzare 'SDL_Renderer' con il flag' SDL_RENDERER_TARGETTEXTURE' per supportare le destinazioni di rendering. Inoltre, non provare mai a usare un 'SDL_Texture' creato da un' SDL_Surface' usando la funzione 'SDL_CreateTextureFromSurface'. Semplicemente non funzionerà. –

+0

@JustinSkiles Sono contento che qualcuno abbia notato la mancanza di SDL_RENDERER_TARGETTEXTURE, per un breve momento ho pensato che ero impazzito o che l'api era improvvisamente cambiata per consentire a tutti i renderer di eseguire direttamente il rendering delle trame di destinazione. – Pharap

3

Innanzitutto, è necessario creare la trama su cui si desidera disegnare con il flag SDL_TEXTUREACCESS_TARGET. Quindi creare back consistenza simile a questo:

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

Poi, quando si chiama funzioni di disegno, è necessario impostare la back texture come il bersaglio, in questo modo:

SDL_SetRenderTarget(renderer, back); 

Poi si disegna ciò che si vuole, e dopo che si modifica la destinazione per nulla:

SDL_SetRenderTarget(renderer, NULL); 

e rendere back texture:

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