diff --git a/src/game/scenes/ingame.c b/src/game/scenes/ingame.c index c4de337..b018f25 100644 --- a/src/game/scenes/ingame.c +++ b/src/game/scenes/ingame.c @@ -11,6 +11,21 @@ static void ingame_tick(struct state *state) { world_drawdef(scn->world); player_calc(scn->player); + push_sprite_ex((t_frect){ .x = 32, .y = 64, .w = 64, .h = 64 }, (t_push_sprite_args){ + .path = "/assets/light.png", + .color = (t_color){255, 0, 0, 255}, + .blend = true }); + + push_sprite_ex((t_frect){ .x = 48, .y = 64, .w = 64, .h = 64 }, (t_push_sprite_args){ + .path = "/assets/light.png", + .color = (t_color){0, 255, 0, 255}, + .blend = true }); + + push_sprite_ex((t_frect){ .x = 64, .y = 64, .w = 64, .h = 64 }, (t_push_sprite_args){ + .path = "/assets/light.png", + .color = (t_color){0, 0, 255, 255}, + .blend = true }); + push_sprite_ex((t_frect){ .x = 32, .y = 32, .w = 64, .h = 64 }, (t_push_sprite_args){ .path = "/assets/player/baron-walk.png", .color = (t_color){255, 255, 255, 255}, diff --git a/src/rendering.c b/src/rendering.c index f9538bf..27bd18d 100644 --- a/src/rendering.c +++ b/src/rendering.c @@ -71,7 +71,8 @@ static void render_2d(void) { glEnable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); glDisable(GL_CULL_FACE); - glDepthFunc(GL_LESS); + glDisable(GL_ALPHA_TEST); + glEnable(GL_DEPTH_TEST); const size_t render_queue_len = arrlenu(ctx.render_queue_2d); @@ -85,21 +86,17 @@ static void render_2d(void) { const struct sprite_batch batch = collect_sprite_batch(current, render_queue_len - i); + glDepthRange((double)batch_count / UINT16_MAX, 1.0); + if (batch.blend) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_DEPTH_TEST); glDepthFunc(GL_ALWAYS); - glDepthRange((double)batch_count / UINT16_MAX, 1.0); - glDisable(GL_ALPHA_TEST); render_sprites(current, batch.size, false); } else { glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); - glDepthRange((double)batch_count / UINT16_MAX, 1.0); - glDisable(GL_ALPHA_TEST); render_sprites(current, batch.size, true); } diff --git a/src/rendering/sprites.h b/src/rendering/sprites.h index 6c78b5b..0a7fb79 100644 --- a/src/rendering/sprites.h +++ b/src/rendering/sprites.h @@ -115,8 +115,6 @@ static void render_sprites(const struct primitive_2d primitives[], NULL, GL_STREAM_DRAW); - const t_rect srcrect = - textures_get_srcrect(&ctx.texture_cache, primitives->sprite.texture_key); const t_rect dims = textures_get_dims(&ctx.texture_cache, primitives->sprite.texture_key); @@ -130,6 +128,9 @@ static void render_sprites(const struct primitive_2d primitives[], const size_t cur = reversed ? len - i - 1: i; const struct sprite_primitive sprite = primitives[cur].sprite; + const t_rect srcrect = + textures_get_srcrect(&ctx.texture_cache, primitives[cur].sprite.texture_key); + const float wr = (float)srcrect.w / (float)dims.w; const float hr = (float)srcrect.h / (float)dims.h; const float xr = (float)srcrect.x / (float)dims.w; diff --git a/src/textures.c b/src/textures.c index d912581..ca9ea9c 100644 --- a/src/textures.c +++ b/src/textures.c @@ -75,6 +75,7 @@ static void add_new_atlas(struct texture_cache *cache) { a_mask); SDL_FreeFormat(native_format); + SDL_SetSurfaceBlendMode(new_atlas, SDL_BLENDMODE_NONE); SDL_SetSurfaceRLE(new_atlas, true); arrput(cache->atlas_surfaces, new_atlas); arrput(cache->atlas_textures, new_gl_texture()); @@ -108,7 +109,7 @@ static void upload_texture_from_surface(GLuint texture, SDL_Surface *surface) { glTexImage2D(GL_TEXTURE_2D, 0, - GL_RGBA, + GL_RGBA8, surface->w, surface->h, 0,