diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d2f859..f7528dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ project(FLOPPE_FION) set(SRC src/main.c src/renderer.c + src/text.c ) # add the executable diff --git a/src/main.c b/src/main.c index 2f6aa36..5a0eb2b 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,17 @@ #include "renderer.h" +#include "text.h" int main(void) { renderer_main(); + RenderObject_t text; + SDL_Color white = {128, 128, 128, 128}; + TTF_Init(); + if(text_renderText(&text, 0.f, 0.f, 1, white, "/home/gryf/.local/share/fonts/ARIAL.TTF", 25, "Hello World") < 0){ + printf("error"); + exit(1); + } + renderer_renderObject(text); while(1); + + text_freeFontCache(); } diff --git a/src/renderer.c b/src/renderer.c index bdc7f47..f8ead66 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -1,6 +1,7 @@ #include "renderer.h" #include #include +#include #include #include #include @@ -33,18 +34,22 @@ static int compartSort(const RenderItem_t * a, const RenderItem_t * b) { static void * render_thread(void *) { SDL_GetRendererOutputSize(renderer, &monitorSize.width, &monitorSize.height); - objectStorageSize = 1000; - objects = malloc(objectStorageSize); - while(true) { for(int i = 0; i < objectCount; i++) { RenderItem_t * object = &objects[i]; if(object->cache == NULL) { SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, object->object.surface); - SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); + if(texture == NULL) { + fprintf(stderr, "Error while creating texture %s is_null: %d\n", SDL_GetError(), object->object.surface == NULL); + } + SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_NONE); object->cache = texture; + printf("Built cache\n"); + } + int error = SDL_RenderCopyEx(renderer, object->cache, &object->rect, NULL, object->object.angle_degre, NULL, SDL_FLIP_NONE); + if(error != 0) { + fprintf(stderr, "Render error in object %d with error %s\n", object->id, SDL_GetError()); } - SDL_RenderCopyEx(renderer, object->cache, &object->rect, NULL, object->object.angle_degre, NULL, SDL_FLIP_NONE); } SDL_Delay(1000 / 400); //400fps or u a pussy } @@ -66,6 +71,9 @@ void renderer_main() { // creates a renderer to render our images renderer = SDL_CreateRenderer(win, -1, render_flags); + objectStorageSize = 1000; + objects = malloc(objectStorageSize); + pthread_create(&thread, NULL, render_thread, NULL); } diff --git a/src/text.c b/src/text.c index b889b6e..9184de6 100644 --- a/src/text.c +++ b/src/text.c @@ -1,3 +1,5 @@ +#include +#include #include "text.h" #include @@ -20,7 +22,11 @@ void text_freeFontCache(void){ } } -int text_renderText(RenderObject_t* renderObject, Position position, SDL_Color color, const char* fontFilename, int fontSize, char* format, ...){ +int text_renderText(RenderObject_t* renderObject, float x, float y, int z, SDL_Color color, const char* fontFilename, int fontSize, char* format, ...){ + if(access(fontFilename, F_OK) != 0) { + fprintf(stderr, "Font file not found: %s\n", fontFilename); + return -1; + } TTF_Font* font = NULL; for(unsigned i = 0; i < fontCacheSize; ++i){ @@ -33,6 +39,7 @@ int text_renderText(RenderObject_t* renderObject, Position position, SDL_Color c font = TTF_OpenFont(fontFilename, fontSize); if(font == NULL) { SDL_LogError(SDL_LOG_PRIORITY_ERROR, "TTF_OpenFont"); + fprintf(stderr, "Error while opening font: %s\n", SDL_GetError()); return -1; } FontCacheObject_t fontCacheObject; @@ -56,9 +63,12 @@ int text_renderText(RenderObject_t* renderObject, Position position, SDL_Color c SDL_Surface* surface = TTF_RenderText_Blended(font, text, color); - renderObject->x = position.x; - renderObject->y = position.y; - renderObject->z = position.z; + renderObject->x = x; + renderObject->y = y; + renderObject->z = z; + renderObject->width = strlen(text) * fontSize; + renderObject->height = fontSize; + renderObject->angle_degre = 0; renderObject->surface = surface; return 0; diff --git a/src/text.h b/src/text.h index 1bfbbdc..f9a4b06 100644 --- a/src/text.h +++ b/src/text.h @@ -12,7 +12,7 @@ typedef struct { } Position; -int text_renderText(RenderObject_t* renderObject, Position position, SDL_Color color, const char* fontFilename, int fontSize, char* format, ...); +int text_renderText(RenderObject_t* renderObject, float x, float y, int z, SDL_Color color, const char* fontFilename, int fontSize, char* format, ...); void text_freeFontCache(void);