SDL: визуализация текстуры поверх другой текстуры

У меня проблемы со следующим:

Мне нужно визуализировать текстуру поверх другой текстуры, а затем визуализировать эту основную текстуру.
Например, у меня есть текстура синего прямоугольника, и я хочу нарисовать красные прямоугольники поверх этого синего прямоугольника. Однако я хочу, чтобы они ограничивали рендер только на этом прямоугольнике. Как следующее изображение:
введите описание изображения здесь

Я читал что-то о текстурном блайте между ними или что-то подобное, но я не уверен, возможно ли это.

Мой код выглядит так:

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

Кто-нибудь знает, как это сделать в SDL 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);

Приветствия.

7

Другие решения

Во-первых, вам нужно создать текстуру, на которой вы хотите рисовать SDL_TEXTUREACCESS_TARGET флаг. Так создай back текстура вот так:

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

Затем при вызове функций рисования вам необходимо установить back Текстура как цель, вот так:

SDL_SetRenderTarget(renderer, back);

Затем вы рисуете, что хотите, и после этого вы меняете цель на нуль:

SDL_SetRenderTarget(renderer, NULL);

И рендеринга back текстура:

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

По вопросам рекламы [email protected]