aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/SdlContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/SdlContext.cpp')
-rw-r--r--src/crepe/SdlContext.cpp156
1 files changed, 45 insertions, 111 deletions
diff --git a/src/crepe/SdlContext.cpp b/src/crepe/SdlContext.cpp
index 44d1bdf..17edfbc 100644
--- a/src/crepe/SdlContext.cpp
+++ b/src/crepe/SdlContext.cpp
@@ -1,12 +1,10 @@
#include "SdlContext.h"
-#include "SDL_hints.h"
-#include "SDL_rect.h"
-#include "SDL_stdinc.h"
+
#include "api/Sprite.h"
+#include "api/Texture.h"
#include "api/Transform.h"
-#include "facade/Texture.h"
#include "util/log.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
@@ -15,7 +13,6 @@
#include <SDL2/SDL_video.h>
#include <cstddef>
#include <iostream>
-#include <ostream>
using namespace crepe;
@@ -24,7 +21,7 @@ SdlContext & SdlContext::get_instance() {
return instance;
}
-void SdlContext::handleEvents(bool & running) {
+void SdlContext::handle_events(bool & running) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
@@ -32,32 +29,25 @@ void SdlContext::handleEvents(bool & running) {
}
}
}
-void SdlContext::clearScreen() { SDL_RenderClear(this->m_game_renderer); }
-void SdlContext::presentScreen() { SDL_RenderPresent(this->m_game_renderer); }
+SdlContext::~SdlContext() {
+ dbg_trace();
-void SdlContext::draw(const api::Sprite & sprite,
- const api::Transform & transform) {
- static SDL_RendererFlip renderFlip
- = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flipX)
- | (SDL_FLIP_VERTICAL * sprite.flip.flipY));
+ if (m_game_renderer) SDL_DestroyRenderer(m_game_renderer);
- // needs maybe camera for position
- static SDL_Rect dstrect = {
- .x = static_cast<int>(transform.position.x),
- .y = static_cast<int>(transform.position.y),
- .w
- = static_cast<int>(sprite.sprite_image->get_rect().w * transform.scale),
- .h
- = static_cast<int>(sprite.sprite_image->get_rect().h * transform.scale),
- };
+ if (m_game_window) {
+ SDL_DestroyWindow(m_game_window);
+ }
- SDL_RenderCopyEx(this->m_game_renderer, sprite.sprite_image->get_texture(),
- &sprite.sprite_image->get_rect(), &dstrect, 0, NULL,
- renderFlip);
+ IMG_Quit();
+ SDL_Quit();
}
+void SdlContext::clear_screen() { SDL_RenderClear(this->m_game_renderer); }
+
SdlContext::SdlContext() {
+ dbg_trace();
+
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError()
<< std::endl;
@@ -80,95 +70,37 @@ SdlContext::SdlContext() {
SDL_DestroyWindow(m_game_window);
return;
}
- int imgFlags = IMG_INIT_PNG;
- if (!(IMG_Init(imgFlags) & imgFlags)) {
+
+ int img_flags = IMG_INIT_PNG;
+ if (!(IMG_Init(img_flags) & img_flags)) {
std::cout << "SDL_image could not initialize! SDL_image Error: "
<< IMG_GetError() << std::endl;
}
+}
+void SdlContext::present_screen() { SDL_RenderPresent(this->m_game_renderer); }
- SDL_SetHint(SDL_HINT_RENDER_BATCHING, "1");
- SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
- //SDL_SetHint(SDL_HINT_RENDER_OPENGL_SHADERS, "1");
- SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "X");
-
-
-
-
- const char * hint = SDL_GetHint(SDL_HINT_RENDER_BATCHING);
- if (hint != NULL) {
- std::cout << "SDL_HINT_RENDER_BATCHING: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_RENDER_DRIVER);
- if (hint != NULL) {
- std::cout << "SDL_HINT_RENDER_DRIVER: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_RENDER_OPENGL_SHADERS);
- if (hint != NULL) {
- std::cout << "SDL_HINT_RENDER_OPENGL_SHADERS: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_RENDER_SCALE_QUALITY);
- if (hint != NULL) {
- std::cout << "SDL_HINT_RENDER_SCALE_QUALITY: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_RENDER_VSYNC);
- if (hint != NULL) {
- std::cout << "SDL_HINT_RENDER_VSYNC: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_TIMER_RESOLUTION);
- if (hint != NULL) {
- std::cout << "SDL_HINT_TIMER_RESOLUTION: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT);
- if (hint != NULL) {
- std::cout << "SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT: " << hint
- << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN);
- if (hint != NULL) {
- std::cout << "SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN: "
- << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_RENDER_LOGICAL_SIZE_MODE);
- if (hint != NULL) {
- std::cout << "SDL_HINT_RENDER_LOGICAL_SIZE_MODE: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_VIDEO_DOUBLE_BUFFER);
- if (hint != NULL) {
- std::cout << "SDL_HINT_VIDEO_DOUBLE_BUFFER: " << hint << std::endl;
- }
-
- hint = SDL_GetHint(SDL_HINT_OPENGL_ES_DRIVER);
- if (hint != NULL) {
- std::cout << "SDL_HINT_OPENGL_ES_DRIVER: " << hint << std::endl;
- }
+void SdlContext::draw(const api::Sprite & sprite,
+ const api::Transform & transform) {
- hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION);
- if (hint != NULL) {
- std::cout << "SDL_HINT_FRAMEBUFFER_ACCELERATION: " << hint << std::endl;
- }
+ static SDL_RendererFlip render_flip
+ = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x)
+ | (SDL_FLIP_VERTICAL * sprite.flip.flip_y));
- std::cout << "HALLO " << std::endl;
-}
-
-SdlContext::~SdlContext() {
- if (m_game_renderer) SDL_DestroyRenderer(m_game_renderer);
+ int w, h;
+ SDL_QueryTexture(sprite.sprite_image->m_texture, NULL, NULL, &w, &h);
+ // needs maybe camera for position
+ SDL_Rect dstrect = {
+ .x = static_cast<int>(transform.position.x),
+ .y = static_cast<int>(transform.position.y),
+ .w = static_cast<int>(w * transform.scale),
+ .h = static_cast<int>(h * transform.scale),
+ };
- if (m_game_window) {
- SDL_DestroyWindow(m_game_window);
- }
- IMG_Quit();
- SDL_Quit();
+ SDL_RenderCopyEx(this->m_game_renderer, sprite.sprite_image->m_texture,
+ NULL, &dstrect, 0, NULL, render_flip);
}
+/*
SDL_Texture * SdlContext::setTextureFromPath(const char * path, SDL_Rect & clip,
const int row, const int col) {
dbg_trace();
@@ -178,7 +110,8 @@ SDL_Texture * SdlContext::setTextureFromPath(const char * path, SDL_Rect & clip,
std::cerr << "Error surface " << IMG_GetError << std::endl;
}
- clip.w = tmp->w / col;
+ clip.
+ w = tmp->w / col;
clip.h = tmp->h / row;
SDL_Texture * CreatedTexture
@@ -192,22 +125,23 @@ SDL_Texture * SdlContext::setTextureFromPath(const char * path, SDL_Rect & clip,
return CreatedTexture;
}
+*/
-SDL_Texture * SdlContext::setTextureFromPath(const char * path) {
+SDL_Texture * SdlContext::texture_from_path(const char * path) {
dbg_trace();
-
+
SDL_Surface * tmp = IMG_Load(path);
if (!tmp) {
std::cerr << "Error surface " << IMG_GetError << std::endl;
}
- SDL_Texture * CreatedTexture
+ SDL_Texture * created_texture
= SDL_CreateTextureFromSurface(m_game_renderer, tmp);
- if (!CreatedTexture) {
+ if (!created_texture) {
std::cerr << "Error could not create texture " << IMG_GetError
<< std::endl;
}
SDL_FreeSurface(tmp);
- return CreatedTexture;
+ return created_texture;
}