sprites and ttf work
This commit is contained in:
@@ -11,7 +11,11 @@ void SdlRenderer::initialize(RendererParams params) {
|
||||
}
|
||||
auto img_flags = IMG_INIT_PNG;
|
||||
if(!(IMG_Init(img_flags) & img_flags)) {
|
||||
printf("Failed to init image loading: %s", IMG_GetError());
|
||||
printf("Failed to init image loading: %s\n", IMG_GetError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if(TTF_Init() < 0) {
|
||||
printf("Failed to initialize font loading: %s\n", TTF_GetError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
SDL_Window* sdl_window = SDL_CreateWindow(params.title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, params.width, params.height, SDL_WINDOW_SHOWN);
|
||||
@@ -24,7 +28,9 @@ void SdlRenderer::initialize(RendererParams params) {
|
||||
SDL_Renderer* sdl_renderer = SDL_CreateRenderer(this->window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||
this->renderer = sdl_renderer;
|
||||
|
||||
this->texture_manager = std::make_unique<SdlTextureManager>();
|
||||
this->texture_manager = std::make_unique<SdlTextureManager>(this->renderer);
|
||||
this->font_manager = std::make_unique<SdlFontManager>();
|
||||
this->renderer_params = params;
|
||||
|
||||
SDL_RenderClear(this->renderer);
|
||||
}
|
||||
@@ -32,7 +38,7 @@ void SdlRenderer::initialize(RendererParams params) {
|
||||
|
||||
void SdlRenderer::flush() {
|
||||
SDL_RenderPresent(this->renderer);
|
||||
SDL_SetRenderDrawColor(this->renderer, 0, 0, 0, 255);
|
||||
SDL_SetRenderDrawColor(this->renderer, COLOR_BLACK.r, COLOR_BLACK.g, COLOR_BLACK.b, COLOR_BLACK.a);
|
||||
SDL_RenderClear(this->renderer);
|
||||
}
|
||||
|
||||
@@ -41,8 +47,10 @@ void SdlRenderer::draw_point(int x, int y, Color color) {
|
||||
SDL_RenderDrawPoint(this->renderer, x, y);
|
||||
}
|
||||
|
||||
void SdlRenderer::draw_text(std::string text, int x, int y) {
|
||||
|
||||
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);
|
||||
render_texture(x, y, texture, nullptr);
|
||||
}
|
||||
|
||||
SdlRenderer::~SdlRenderer() {
|
||||
@@ -54,5 +62,37 @@ SdlRenderer::~SdlRenderer() {
|
||||
|
||||
// exit subsystems
|
||||
IMG_Quit();
|
||||
TTF_Quit();
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
void SdlRenderer::render_texture(int x, int y, SDL_Texture *texture, SDL_Rect *src) {
|
||||
int w, h;
|
||||
if(src == nullptr) {
|
||||
SDL_QueryTexture(texture, 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);
|
||||
}
|
||||
|
||||
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);
|
||||
int w, h;
|
||||
SDL_QueryTexture(texture, 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;
|
||||
auto source = SDL_Rect{src_x, src_y, sprite_sheet->sprite_width, sprite_sheet->sprite_height};
|
||||
render_texture(x, y, texture, &source);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user