color keying for sprite sheets and properly keyed texture map params

This commit is contained in:
2021-12-10 11:53:07 -05:00
parent ea172110ea
commit d2826f08fe
14 changed files with 165 additions and 77 deletions

View File

@@ -24,27 +24,27 @@ void SdlRenderer::initialize(RendererParams params) {
exit(EXIT_FAILURE);
}
else {
this->window = sdl_window;
SDL_Renderer* sdl_renderer = SDL_CreateRenderer(this->window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
this->renderer = sdl_renderer;
this->window = std::unique_ptr<SDL_Window, SDL_WindowDeleter>(sdl_window);
SDL_Renderer* sdl_renderer = SDL_CreateRenderer(this->window.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
this->renderer = std::shared_ptr<SDL_Renderer>(sdl_renderer, SDL_DestroyRenderer);
this->texture_manager = std::make_unique<SdlTextureManager>(this->renderer);
this->font_manager = std::make_unique<SdlFontManager>();
this->renderer_params = params;
SDL_RenderClear(this->renderer);
SDL_RenderClear(this->renderer.get());
}
}
void SdlRenderer::flush() {
SDL_RenderPresent(this->renderer);
SDL_SetRenderDrawColor(this->renderer, COLOR_BLACK.r, COLOR_BLACK.g, COLOR_BLACK.b, COLOR_BLACK.a);
SDL_RenderClear(this->renderer);
SDL_RenderPresent(this->renderer.get());
SDL_SetRenderDrawColor(this->renderer.get(), COLOR_BLACK.r, COLOR_BLACK.g, COLOR_BLACK.b, COLOR_BLACK.a);
SDL_RenderClear(this->renderer.get());
}
void SdlRenderer::draw_point(int x, int y, Color color) {
SDL_SetRenderDrawColor(this->renderer, color.r, color.g, color.b, color.a);
SDL_RenderDrawPoint(this->renderer, x, y);
SDL_SetRenderDrawColor(this->renderer.get(), color.r, color.g, color.b, color.a);
SDL_RenderDrawPoint(this->renderer.get(), x, y);
}
void SdlRenderer::draw_text(TextRenderDetails details, std::string text, int x, int y) {
@@ -54,12 +54,6 @@ void SdlRenderer::draw_text(TextRenderDetails details, std::string text, int x,
}
SdlRenderer::~SdlRenderer() {
// destroy components
SDL_DestroyRenderer(this->renderer);
this->renderer = nullptr;
SDL_DestroyWindow(this->window);
this->window = nullptr;
// exit subsystems
IMG_Quit();
TTF_Quit();
@@ -76,12 +70,13 @@ void SdlRenderer::render_texture(int x, int y, const std::shared_ptr<SDL_Texture
h = src->h;
}
SDL_Rect rect = {x,y,w,h};
SDL_RenderCopy(this->renderer, texture.get(), src, &rect);
SDL_RenderCopy(this->renderer.get(), texture.get(), src, &rect);
}
void SdlRenderer::draw_sprite(Sprite sprite, int x, int y) {
SpriteSheet *sprite_sheet = sprite.sprite_sheet;
std::shared_ptr<SDL_Texture> texture = this->texture_manager->fetch_resource(sprite_sheet->path);
TextureManagerFetchArgs args = TextureManagerFetchArgs {sprite_sheet->path, sprite_sheet->color_key};
std::shared_ptr<SDL_Texture> texture = this->texture_manager->fetch_resource(args);
int w, h;
SDL_QueryTexture(texture.get(), nullptr, nullptr, &w, &h);
int l = (sprite_sheet->sprite_width * sprite.index) / w;