diff --git a/projects/apis/opengl/loader/opengl_device_loader.c b/projects/apis/opengl/loader/opengl_device_loader.c index f8978c6..f5b9408 100644 --- a/projects/apis/opengl/loader/opengl_device_loader.c +++ b/projects/apis/opengl/loader/opengl_device_loader.c @@ -10,6 +10,7 @@ #include "textures/opengl_texture.h" #include "framebuffer/opengl_framebuffer.h" #include "graphics_pipeline/opengl_graphics_pipeline.h" +#include "submit/opengl_submit.h" gnDeviceFunctions loadOpenGLDeviceFunctions() { return (gnDeviceFunctions){ @@ -51,7 +52,7 @@ gnDeviceFunctions loadOpenGLDeviceFunctions() { ._gnTextureData = openglTextureData, ._gnDestroyTexture = openglDestroyTexture, - ._gnSubmit = NULL, + ._gnSubmit = openglSubmit, ._gnPresent = NULL, ._gnWaitForDevice = waitForOpenGLDevice diff --git a/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp b/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp index 126b93c..592f982 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp +++ b/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp @@ -6,6 +6,10 @@ typedef struct openglCommandRunner_t { } glCommandRunner; GN_CPP_FUNCTION openglCommandRunner openglCreateCommandRunner() { return new glCommandRunner(); } +GN_CPP_FUNCTION void openglRunCommandRunner(openglCommandRunner runner) { + for (int i = 0; i < runner->commands.size(); i++) + runner->commands[i](); +} GN_CPP_FUNCTION void openglResetCommandRunner(openglCommandRunner runner) { runner->commands.clear(); } GN_CPP_FUNCTION void openglDestroyCommandRunner(openglCommandRunner* runner) { *runner = NULL; diff --git a/projects/apis/opengl/src/commands/commands/opengl_command_runner.h b/projects/apis/opengl/src/commands/commands/opengl_command_runner.h index 4786f7d..d18533d 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_command_runner.h +++ b/projects/apis/opengl/src/commands/commands/opengl_command_runner.h @@ -5,6 +5,7 @@ typedef void (*openglFunctionBinding)(); GN_CPP_FUNCTION openglCommandRunner openglCreateCommandRunner(); GN_CPP_FUNCTION void openglResetCommandRunner(openglCommandRunner runner); +GN_CPP_FUNCTION void openglRunCommandRunner(openglCommandRunner runner); GN_CPP_FUNCTION void openglDestroyCommandRunner(openglCommandRunner* runner); void openglCommandRunnerBindFunction(openglCommandRunner runner, openglFunctionBinding binding); diff --git a/projects/apis/opengl/src/submit/opengl_submit.c b/projects/apis/opengl/src/submit/opengl_submit.c new file mode 100644 index 0000000..14db388 --- /dev/null +++ b/projects/apis/opengl/src/submit/opengl_submit.c @@ -0,0 +1,11 @@ +#include "core/src/submit/gryphn_submit.h" +#include "commands/buffers/opengl_command_buffer.h" + +gnReturnCode openglSubmit(gnOutputDevice device, gnSubmitInfo info) { + if (device == GN_NULL_HANDLE) return GN_INVALID_HANDLE; + + for (uint32_t i = 0; i < info.commandBufferCount; i++) + openglRunCommandRunner(info.commandBuffers[i]->commandBuffer->commmandRunner); + + return GN_SUCCESS; +} diff --git a/projects/apis/opengl/src/submit/opengl_submit.h b/projects/apis/opengl/src/submit/opengl_submit.h new file mode 100644 index 0000000..35d8543 --- /dev/null +++ b/projects/apis/opengl/src/submit/opengl_submit.h @@ -0,0 +1,3 @@ +#pragma once +#include "core/src/submit/gryphn_submit.h" +gnReturnCode openglSubmit(gnOutputDevice device, gnSubmitInfo info);