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 592f982..7f1b52f 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp +++ b/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp @@ -2,7 +2,7 @@ #include "vector" typedef struct openglCommandRunner_t { - std::vector commands = {}; + std::vector> commands; } glCommandRunner; GN_CPP_FUNCTION openglCommandRunner openglCreateCommandRunner() { return new glCommandRunner(); } @@ -16,4 +16,8 @@ GN_CPP_FUNCTION void openglDestroyCommandRunner(openglCommandRunner* runner) { delete runner; } -void openglCommandRunnerBindFunction(openglCommandRunner runner, openglFunctionBinding binding) { runner->commands.push_back(binding); } +void openglCommandRunnerBindFunction(openglCommandRunner runner, std::function function) { + runner->commands.push_back(function); +} + +// void openglCommandRunnerBindFunction(openglCommandRunner runner, openglFunctionBinding binding) { runner->commands.push_back(binding); } 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 d18533d..2a53490 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_command_runner.h +++ b/projects/apis/opengl/src/commands/commands/opengl_command_runner.h @@ -1,11 +1,14 @@ #pragma once #include "utils/gryphn_cpp_function.h" typedef struct openglCommandRunner_t* openglCommandRunner; -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); +#ifdef __cplusplus +#include "functional" +#define openglBindFunction(expr) std::function([=]{ expr; }) +void openglCommandRunnerBindFunction(openglCommandRunner runner, std::function function); +#endif diff --git a/projects/apis/opengl/src/commands/commands/opengl_commands.cpp b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp index caf29d9..61852a3 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_commands.cpp +++ b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp @@ -2,26 +2,22 @@ #include "opengl_commands.h" #include "opengl_command_runner.h" #include "commands/buffers/opengl_command_buffer.h" -#include "stdio.h" -// #include "framebuffer/opengl_framebuffer.h" +#include "framebuffer/opengl_framebuffer.h" GN_CPP_FUNCTION void openglBeginRenderPass(gnCommandBuffer buffer, gnRenderPassInfo passInfo) { - openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, []{ - printf("Calling func: %s\n", "Begin Render Pass"); - }); - - // glBindFramebuffer(GL_FRAMEBUFFER, passInfo.framebuffer->framebuffer->framebuffers[0]); - // glClearColor(passInfo.clearValues[0].r, passInfo.clearValues[0].g, passInfo.clearValues[0].b, passInfo.clearValues[0].a); - // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - // glEnable(GL_DEPTH_TEST); - // glViewport(passInfo.offset.x, passInfo.offset.y, passInfo.size.x, passInfo.size.y); + const char* func_name = "begin render pass"; + openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function([passInfo]{ + glBindFramebuffer(GL_FRAMEBUFFER, passInfo.framebuffer->framebuffer->framebuffers[0]); + glClearColor(passInfo.clearValues[0].r, passInfo.clearValues[0].g, passInfo.clearValues[0].b, passInfo.clearValues[0].a); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glEnable(GL_DEPTH_TEST); + glViewport(passInfo.offset.x, passInfo.offset.y, passInfo.size.x, passInfo.size.y); + })); } GN_CPP_FUNCTION void openglEndRenderPass(gnCommandBuffer buffer) { - openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, []{ - printf("Calling func: %s\n", "End Render Pass"); - }); - - // glBindFramebuffer(GL_FRAMEBUFFER, 0); + openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function([]{ + glBindFramebuffer(GL_FRAMEBUFFER, 0); + })); } GN_CPP_FUNCTION void openglBindGraphicsPipeline(gnCommandBuffer buffer, gnGraphicsPipeline graphicsPipeline); GN_CPP_FUNCTION void openglSetViewport(gnCommandBuffer buffer, gnViewport viewport);