diff --git a/.cache/clangd/index/main.c.4CB5CE34A69A03F5.idx b/.cache/clangd/index/main.c.4CB5CE34A69A03F5.idx index 24bef8d..db4fde5 100644 Binary files a/.cache/clangd/index/main.c.4CB5CE34A69A03F5.idx and b/.cache/clangd/index/main.c.4CB5CE34A69A03F5.idx differ diff --git a/.cache/clangd/index/main.h.5E55335D654F222C.idx b/.cache/clangd/index/main.h.5E55335D654F222C.idx index b11dfbe..dc30cac 100644 Binary files a/.cache/clangd/index/main.h.5E55335D654F222C.idx and b/.cache/clangd/index/main.h.5E55335D654F222C.idx differ diff --git a/.gitignore b/.gitignore index 6870d94..e9e2286 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,8 @@ # Other -build/* -assets/* -bin/* -.cache/* +build/** +assets/** +bin/** +.cache/** # Prerequisites *.d diff --git a/memchk.sh b/memchk.sh new file mode 100755 index 0000000..2deb343 --- /dev/null +++ b/memchk.sh @@ -0,0 +1 @@ +valgrind --leak-check=yes ./bin/wotos ./assets/aa.mkv diff --git a/src/gfx/renderer.c b/src/gfx/renderer.c index dbc7f8b..da9ea2d 100644 --- a/src/gfx/renderer.c +++ b/src/gfx/renderer.c @@ -41,11 +41,9 @@ void renderer_init(struct Renderer *self) { { .index = 0, .name = "texcoord" } }); - // Define buffers _renderer_mpv(self); _renderer_glyph(self); - // Create bitmaps self->atlas = makeBitmaps(); } @@ -57,6 +55,7 @@ void renderer_destroy(struct Renderer *self) { vao_destroy(self->screenVAO); vbo_destroy(self->screenVBO); + free(self->params_fbo); free(self); } @@ -102,9 +101,17 @@ void _renderer_mpv(struct Renderer *self) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, self->video_textureColorbuffer, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){ printf("ERROR::FRAMEBUFFER:: VIDEO Framebuffer #%d is not complete!\n", self->video_framebuffer); + } self->mpv_fbo = (mpv_opengl_fbo){(int)(self->video_framebuffer), fbo_width, fbo_height, 0}; + + self->params_fbo = malloc(sizeof(mpv_render_param [3])); + memcpy(self->params_fbo, (mpv_render_param [3]){ + {MPV_RENDER_PARAM_OPENGL_FBO, &(self->mpv_fbo)}, + {MPV_RENDER_PARAM_FLIP_Y, &flip_y}, + {MPV_RENDER_PARAM_INVALID, NULL}}, sizeof(mpv_render_param [3])); + } /* diff --git a/src/gfx/renderer.h b/src/gfx/renderer.h index 70e35f1..f94f3c5 100644 --- a/src/gfx/renderer.h +++ b/src/gfx/renderer.h @@ -16,6 +16,8 @@ enum ShaderType { SHADER_BASIC_TEXTURE }; +extern int flip_y; + struct Renderer{ struct Shader shaders[SHADERS_LAST + 1]; diff --git a/src/main.c b/src/main.c index 01957eb..9c5af14 100644 --- a/src/main.c +++ b/src/main.c @@ -3,42 +3,32 @@ #include "gfx/vbo.h" #include "glad/glad.h" -static inline void check_error(int); -void init(); -void update(); -void render(); - +static inline void check_error(int); +static inline void _setup(); int main(int argc, char const *argv[]){ if (argc < 2){ return -1;} + _setup(); - /* Create the main window*/ - window = window_create(init, NULL, NULL, update, render); - - /* Set up the MPV player*/ - player = player_create(); - player_init(player); - - /* Setting the renderer*/ - renderer = renderer_create(); - renderer_init(renderer); - - /* Glyph shenanigans */ - //mat4s transformation = glms_ortho(0.0f, (float)(window_width), 0.0f, (float)window_height, -100, 100); - - // this doesn't work when called from inside the Renderer struct... - int flip_y = 1; - renderer->params_fbo = (mpv_render_param [3]){ - {MPV_RENDER_PARAM_OPENGL_FBO, &(renderer->mpv_fbo)}, - {MPV_RENDER_PARAM_FLIP_Y, &flip_y}, - {MPV_RENDER_PARAM_INVALID, NULL}}; - - /* Start video playback */ player_loadfile(player, argv[1]); window_loop(); return 0; } +void _setup(){ + window = window_create(init, NULL, NULL, update, render); + + player = player_create(); + player_init(player); + + renderer = renderer_create(); + renderer_init(renderer); + + /* Glyph shenanigans */ + //mat4s transformation = glms_ortho(0.0f, (float)(window_width), 0.0f, (float)window_height, -100, 100); +} + +// TODO Remove these function from here void processGLFWInput(GLFWwindow *window, mpv_handle *ctx) { glfwSetInputMode(window, GLFW_STICKY_KEYS, GLFW_FALSE); diff --git a/src/main.h b/src/main.h index 2f36df0..111a22c 100644 --- a/src/main.h +++ b/src/main.h @@ -42,9 +42,8 @@ int window_width = 1920; int window_height = 1080; struct Window *window; -GLFWwindow *wwindow = NULL; -mpv_handle *mpv; -mpv_render_context *mpv_ctx; + +int flip_y = 1; unsigned int screen_rbo; unsigned int video_rbo; @@ -78,6 +77,11 @@ float imgVertices[] = { int wakeup = 0; //extern int wakeup; +void init(); +void update(); +void render(); + + bool SetSocketBlockingEnabled(int fd, bool blocking);