У меня проблемы со следующим:
Мне нужно визуализировать текстуру поверх другой текстуры, а затем визуализировать эту основную текстуру.
Например, у меня есть текстура синего прямоугольника, и я хочу нарисовать красные прямоугольники поверх этого синего прямоугольника. Однако я хочу, чтобы они ограничивали рендер только на этом прямоугольнике. Как следующее изображение:
Я читал что-то о текстурном блайте между ними или что-то подобное, но я не уверен, возможно ли это.
Мой код выглядит так:
SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect);
SDL_RenderCopy(ren,redtexture,NULL,dREDrect);
SDL_RenderPresent(ren);
Кто-нибудь знает, как это сделать в SDL 2.0? это то, что я использую, кстати.
Ответ Марса не сработал, потому что он нарисовал черную текстуру, и на этом ничего нельзя было нарисовать.
Но ЭТО РАБОТАЕТ!
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);
Приветствия.
Во-первых, вам нужно создать текстуру, на которой вы хотите рисовать 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);