2013-09-05 2 views
7

Ich habe Probleme mit dem folgenden:SDL: Übertragen Sie Texture auf einer anderen Textur

Ich brauche eine Textur auf eine andere Textur zu machen und dann die Haupt Textur machen. Zum Beispiel habe ich die blaue Rechteck-Textur, und ich möchte rote Rechtecke auf diesem blauen Rechteck zeichnen. Ich möchte jedoch, dass sie das Rendering nur auf dieses Rechteck beschränken. Wie das folgende Bild: enter image description here

Ich lese etwas über Textur Blit zwischen ihnen oder so etwas, aber ich bin nicht sicher, ob dies möglich ist.

Mein Code sieht wie folgt aus:

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

Jeder weiß, wie diese 2.0 in SDL zu tun? das ist, was ich übrigens benutze.

Antwort

7

Mars Antwort funktionierte nicht, weil es eine schwarze Textur zeichnete und nichts konnte darauf gezeichnet werden.

Aber das funktioniert !:

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

Beifall.

+3

Einige Tipps für zukünftige Leser. Stellen Sie immer sicher, dass Sie Ihren 'SDL_Renderer' mit dem Flag' SDL_RENDERER_TARGETTEXTURE' initialisieren, um Renderziele zu unterstützen. Versuchen Sie auch nicht, ein 'SDL_Texture' zu ​​verwenden, das mit der Funktion' SDL_CreateTextureFromSurface' aus 'SDL_Surface' erstellt wurde. Es wird einfach nicht funktionieren. –

+0

@JustinSkiles Ich bin froh, dass jemand das Fehlen von SDL_RENDERER_TARGETTEXTURE bemerkt hat, für einen kurzen Moment dachte ich, entweder wäre ich verrückt geworden oder die API hätte sich plötzlich geändert, damit alle Renderer direkt gerendert werden können, um Zieltexturen zu rendern. – Pharap

3

Zuerst müssen Sie Ihre Textur erstellen, auf der Sie mit SDL_TEXTUREACCESS_TARGET Flag zeichnen möchten. So erstellen back Textur wie folgt aus:

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

Dann, wenn Zeichenfunktionen aufrufen, müssen Sie die back Textur als Ziel gesetzt, etwa so:

SDL_SetRenderTarget(renderer, back); 

Dann Sie zeichnen, was Sie wollen, und nach, dass Sie das Ziel auf null ändern:

SDL_SetRenderTarget(renderer, NULL); 

Und machen back Textur:

Verwandte Themen