get the first opengl commands to be deferred

This commit is contained in:
Gregory Wells
2025-08-18 22:30:00 -04:00
parent 7b1266281c
commit 51bd6e28fa
3 changed files with 23 additions and 20 deletions

View File

@@ -2,7 +2,7 @@
#include "vector"
typedef struct openglCommandRunner_t {
std::vector<openglFunctionBinding> commands = {};
std::vector<std::function<void()>> 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<void()> function) {
runner->commands.push_back(function);
}
// void openglCommandRunnerBindFunction(openglCommandRunner runner, openglFunctionBinding binding) { runner->commands.push_back(binding); }

View File

@@ -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<void()>([=]{ expr; })
void openglCommandRunnerBindFunction(openglCommandRunner runner, std::function<void()> function);
#endif

View File

@@ -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<void()>([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<void()>([]{
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}));
}
GN_CPP_FUNCTION void openglBindGraphicsPipeline(gnCommandBuffer buffer, gnGraphicsPipeline graphicsPipeline);
GN_CPP_FUNCTION void openglSetViewport(gnCommandBuffer buffer, gnViewport viewport);