summary refs log tree commit diff stats
path: root/src/renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer.cpp')
-rw-r--r--src/renderer.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/renderer.cpp b/src/renderer.cpp index 5ab623a..ea8a2ac 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp
@@ -178,6 +178,36 @@ void Renderer::render(Game& game) {
178 SDL_RenderCopy(ren_.get(), mapSwapTex_.get(), nullptr, nullptr); 178 SDL_RenderCopy(ren_.get(), mapSwapTex_.get(), nullptr, nullptr);
179 } 179 }
180 180
181 // Render mask sprite layer
182 if (!game.getMap().getMaskZone().empty()) {
183 texture_ptr spritesTex(
184 SDL_CreateTexture(
185 ren_.get(),
186 SDL_PIXELFORMAT_RGBA8888,
187 SDL_TEXTUREACCESS_TARGET,
188 mapBounds.w(),
189 mapBounds.h()));
190
191 if (!spritesTex) {
192 throw sdl_error();
193 }
194
195 SDL_SetRenderTarget(ren_.get(), spritesTex.get());
196 SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 0);
197 SDL_RenderClear(ren_.get());
198
199 for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Mask) | game.spriteView()) {
200 renderSprite(sprite);
201 }
202
203 const Zone& zone = game.getMap().getZone(game.getMap().getMaskZone());
204 SDL_Rect zoneArea { zone.ul.x(), zone.ul.y(), zone.dr.x() - zone.ul.x(), zone.dr.y() - zone.ul.y() };
205
206 SDL_SetRenderTarget(ren_.get(), canvas.get());
207 SDL_SetTextureBlendMode(spritesTex.get(), SDL_BLENDMODE_BLEND);
208 SDL_RenderCopy(ren_.get(), spritesTex.get(), &zoneArea, &zoneArea);
209 }
210
181 // Render normal sprite layer 211 // Render normal sprite layer
182 for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Normal) | game.spriteView()) { 212 for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Normal) | game.spriteView()) {
183 renderSprite(sprite); 213 renderSprite(sprite);