2013-09-05 8 views
7

मैं निम्नलिखित साथ परेशानी हो रही हूँ की चोटी पर प्रस्तुत बनावट:एसडीएल: एक और बनावट

मैं एक और बनावट के शीर्ष पर एक बनावट प्रस्तुत करना और फिर उस मुख्य बनावट प्रस्तुत करना की जरूरत है। उदाहरण के लिए मेरे पास नीला आयताकार बनावट है, और मैं इस नीले रंग के रेक्ट के ऊपर लाल आयतों को आकर्षित करना चाहता हूं। हालांकि मैं चाहता हूं कि वे केवल इस आयत पर रेंडर प्रतिबंधित करें। निम्न छवि की तरह: enter image description here

मैं उस तरह उन दोनों के बीच बनावट Blit या कुछ और के बारे में कुछ पढ़ा लेकिन im यकीन नहीं है कि अगर यह posible है।

मेरे कोड इस तरह दिखता है:

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

कोई एक कैसे एसडीएल 2.0 में यह करने के लिए के बारे में जानता है? मैं जिस तरह से उपयोग कर रहा हूँ।

उत्तर

7

मंगल का जवाब काम नहीं करता क्योंकि यह एक काला बनावट खींचता है और उस पर कुछ भी नहीं खींचा जा सकता है।

लेकिन यह काम करता है !:

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

चीयर्स।

+3

भविष्य के पाठकों के लिए कुछ सुझाव। हमेशा सुनिश्चित करें कि आप रेंडर लक्ष्यों का समर्थन करने के लिए 'SDL_RENDERER_TARGETTEXTURE' ध्वज के साथ अपना 'SDL_Renderer' प्रारंभ करें। साथ ही, 'SDL_CreateTextureFromSurface' फ़ंक्शन का उपयोग करके' SDL_Surface' से बनाए गए 'SDL_Texture' का उपयोग करने का प्रयास न करें। यह सिर्फ काम नहीं करेगा। –

+0

@ जस्टिनस्काइल मुझे खुशी है कि किसी ने एसडीएल_RENDERER_TARGETTEXTURE की कमी देखी, एक संक्षिप्त पल के लिए मैंने सोचा कि या तो मैं पागल हो गया था या एपीआई अचानक बदल गया था ताकि सभी प्रस्तुतकर्ता सीधे लक्षित बनावट प्रस्तुत करने की अनुमति दे सकें। – Pharap

3

सबसे पहले, आपको अपना बनावट बनाना होगा जिस पर आप SDL_TEXTUREACCESS_TARGET ध्वज के साथ आकर्षित करना चाहते हैं। तो back बनावट इस प्रकार बना: तो फिर तुम आकर्षित तुम क्या चाहते

SDL_SetRenderTarget(renderer, back); 

, और:

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

तब, जब ड्राइंग कार्यों बुला, आप लक्ष्य के रूप में back बनावट सेट करने के लिए, की जरूरत है ताकि तरह उसके बाद आप अशक्त करने के लिए लक्ष्य को बदलने:

SDL_SetRenderTarget(renderer, NULL); 

और प्रस्तुत करना back बनावट:

SDL_RenderCopy(renderer, back, NULL, &some_rect); 
संबंधित मुद्दे