switched up some pointers to shared, added some more rendering example

This commit is contained in:
2021-12-06 23:38:36 -05:00
parent 994a128c14
commit ea172110ea
14 changed files with 43 additions and 48 deletions

View File

@@ -48,10 +48,9 @@ void SdlRenderer::draw_point(int x, int y, Color color) {
}
void SdlRenderer::draw_text(TextRenderDetails details, std::string text, int x, int y) {
TTF_Font *font = this->font_manager->fetch_resource(SdlFontArgs(details.size, details.font_path));
SDL_Texture *texture = this->texture_manager->load_text_as_texture(text, font, details.color);
std::shared_ptr<TTF_Font> font = this->font_manager->fetch_resource(SdlFontArgs(details.size, details.font_path));
std::shared_ptr<SDL_Texture> texture = this->texture_manager->load_text_as_texture(text, font, details.color);
render_texture(x, y, texture, nullptr);
SDL_DestroyTexture(texture);
}
SdlRenderer::~SdlRenderer() {
@@ -67,30 +66,24 @@ SdlRenderer::~SdlRenderer() {
SDL_Quit();
}
void SdlRenderer::render_texture(int x, int y, SDL_Texture *texture, SDL_Rect *src) {
void SdlRenderer::render_texture(int x, int y, const std::shared_ptr<SDL_Texture>& texture, SDL_Rect *src) {
int w, h;
if(src == nullptr) {
SDL_QueryTexture(texture, nullptr, nullptr, &w, &h);
SDL_QueryTexture(texture.get(), nullptr, nullptr, &w, &h);
}
else {
w = src->w;
h = src->h;
}
if(x+w >= renderer_params.width) {
x = renderer_params.width - w;
}
if(y+h >= renderer_params.height) {
y = renderer_params.height - h;
}
SDL_Rect rect = {x,y,w,h};
SDL_RenderCopy(this->renderer, texture, src, &rect);
SDL_RenderCopy(this->renderer, texture.get(), src, &rect);
}
void SdlRenderer::draw_sprite(Sprite sprite, int x, int y) {
SpriteSheet *sprite_sheet = sprite.sprite_sheet;
SDL_Texture *texture = this->texture_manager->fetch_resource(sprite_sheet->path);
std::shared_ptr<SDL_Texture> texture = this->texture_manager->fetch_resource(sprite_sheet->path);
int w, h;
SDL_QueryTexture(texture, nullptr, nullptr, &w, &h);
SDL_QueryTexture(texture.get(), nullptr, nullptr, &w, &h);
int l = (sprite_sheet->sprite_width * sprite.index) / w;
int src_y = l*sprite_sheet->sprite_height;
int src_x = (sprite_sheet->sprite_width * sprite.index) % w;