finally get stuff to present
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
#include "opengl_buffer.h"
|
#include "opengl_buffer.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
GLenum gnBufferTypeToGLEnum(gnBufferType type) {
|
GLenum gnBufferTypeToGLEnum(gnBufferType type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@@ -22,11 +23,12 @@ void openglBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
|
|||||||
}
|
}
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
void openglBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data) {
|
void openglBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data) {
|
||||||
glBindBuffer(buffer->buffer->type, buffer->buffer->id);
|
void* buff = glMapNamedBufferRange(buffer->buffer->id, offset, buffer->info.size, GL_MAP_WRITE_BIT);
|
||||||
glBufferSubData(buffer->buffer->type, 0, dataSize, data);
|
memcpy(buff, data, dataSize);
|
||||||
|
glUnmapNamedBuffer(buffer->buffer->id);
|
||||||
}
|
}
|
||||||
void* openglMapBuffer(gnBufferHandle buffer) {
|
void* openglMapBuffer(gnBufferHandle buffer) {
|
||||||
return glMapNamedBuffer(buffer->buffer->id, GL_READ_WRITE);
|
return glMapNamedBufferRange(buffer->buffer->id, 0, buffer->info.size, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
|
||||||
}
|
}
|
||||||
void openglUnmapBuffer(gnBufferHandle buffer) {
|
void openglUnmapBuffer(gnBufferHandle buffer) {
|
||||||
glUnmapNamedBuffer(buffer->buffer->id);
|
glUnmapNamedBuffer(buffer->buffer->id);
|
||||||
|
@@ -19,11 +19,9 @@ GN_CPP_FUNCTION void openglBeginRenderPass(gnCommandBuffer buffer, gnRenderPassI
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, passInfo.framebuffer->framebuffer->framebuffers[0]);
|
glBindFramebuffer(GL_FRAMEBUFFER, passInfo.framebuffer->framebuffer->framebuffers[0]);
|
||||||
if (passInfo.renderPassDescriptor->renderPassDescriptor->subpasses[0].colorAttachments[0].format == GL_SRGB8_ALPHA8) glEnable(GL_FRAMEBUFFER_SRGB);
|
if (passInfo.renderPassDescriptor->renderPassDescriptor->subpasses[0].colorAttachments[0].format == GL_SRGB8_ALPHA8) glEnable(GL_FRAMEBUFFER_SRGB);
|
||||||
glClearColor(values[0].r, values[0].g, values[0].b, values[0].a);
|
glClearColor(values[0].r, values[0].g, values[0].b, values[0].a);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
glViewport(passInfo.offset.x, passInfo.offset.y, passInfo.size.x, passInfo.size.y);
|
glViewport(passInfo.offset.x, passInfo.offset.y, passInfo.size.x, passInfo.size.y);
|
||||||
|
|
||||||
|
|
||||||
free(values);
|
free(values);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@@ -91,6 +89,7 @@ GN_CPP_FUNCTION void openglDrawIndexed(gnCommandBufferHandle sBuffer, gnIndexTyp
|
|||||||
glDrawElementsInstancedBaseVertexBaseInstance(GL_TRIANGLES, indexCount, (type == GN_UINT16) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(sizeof(GLuint) * firstIndex), instanceCount, vertexOffset, firstInstance);
|
glDrawElementsInstancedBaseVertexBaseInstance(GL_TRIANGLES, indexCount, (type == GN_UINT16) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(sizeof(GLuint) * firstIndex), instanceCount, vertexOffset, firstInstance);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
#include "stdio.h"
|
||||||
GN_CPP_FUNCTION void openglBindUniform(gnCommandBufferHandle sBuffer, gnUniform sUniform, uint32_t sSet, uint32_t dynamicOffsetCount, uint32_t* dynamicOffsets) {
|
GN_CPP_FUNCTION void openglBindUniform(gnCommandBufferHandle sBuffer, gnUniform sUniform, uint32_t sSet, uint32_t dynamicOffsetCount, uint32_t* dynamicOffsets) {
|
||||||
gnCommandBufferHandle buffer = sBuffer;
|
gnCommandBufferHandle buffer = sBuffer;
|
||||||
gnUniform uniform = sUniform;
|
gnUniform uniform = sUniform;
|
||||||
@@ -98,10 +97,20 @@ GN_CPP_FUNCTION void openglBindUniform(gnCommandBufferHandle sBuffer, gnUniform
|
|||||||
|
|
||||||
openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function<void()>([buffer, uniform, set]{
|
openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function<void()>([buffer, uniform, set]{
|
||||||
for (int i = 0; i < MAX_OPENGL_BINDINGS; i++) {
|
for (int i = 0; i < MAX_OPENGL_BINDINGS; i++) {
|
||||||
if (!uniform->uniform->bindings[i].isUpdated) continue;
|
if (uniform->uniform->bindings[i].isUpdated != GN_TRUE) continue;
|
||||||
if (uniform->uniform->bindings[i].type == gl_image) {
|
if (uniform->uniform->bindings[i].type == gl_image) {
|
||||||
glActiveTexture(GL_TEXTURE0 + buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->setMap[set].bindings[uniform->uniform->bindings[i].image_info.binding]);
|
glActiveTexture(GL_TEXTURE0 + buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->setMap[set].bindings[uniform->uniform->bindings[i].image_info.binding]);
|
||||||
glBindTexture(GL_TEXTURE_2D, uniform->uniform->bindings[i].image_info.texture->texture->id);
|
glBindTexture(GL_TEXTURE_2D, uniform->uniform->bindings[i].image_info.texture->texture->id);
|
||||||
|
} else if (uniform->uniform->bindings[i].type == gl_buffer) {
|
||||||
|
glBindBufferBase(GL_UNIFORM_BUFFER, 0, uniform->uniform->bindings[i].buffer_info.buffer->buffer->id);
|
||||||
|
glUniformBlockBinding(
|
||||||
|
buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->program,
|
||||||
|
buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->setMap[set].bindings[uniform->uniform->bindings[i].buffer_info.binding],
|
||||||
|
0
|
||||||
|
);
|
||||||
|
} else if (uniform->uniform->bindings[i].type == gl_storage) {
|
||||||
|
// glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, uniform->uniform->bindings[i].storage_info.buffer->buffer->id);
|
||||||
|
// glFlushMappedNamedBufferRange(uniform->uniform->bindings[i].buffer_info.buffer->buffer->id, 0, uniform->uniform->bindings[i].buffer_info.buffer->info.size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
@@ -9,6 +9,7 @@ gnReturnCode openglPresent(gnOutputDeviceHandle device, gnPresentInfo info) {
|
|||||||
|
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
if (info.presentationQueues[i]->presentationQueue->format == GL_SRGB8_ALPHA8) glEnable(GL_FRAMEBUFFER_SRGB);
|
if (info.presentationQueues[i]->presentationQueue->format == GL_SRGB8_ALPHA8) glEnable(GL_FRAMEBUFFER_SRGB);
|
||||||
|
|
||||||
glUseProgram(device->outputDevice->shaderProgram);
|
glUseProgram(device->outputDevice->shaderProgram);
|
||||||
|
@@ -9,6 +9,7 @@ gnUniform* openglAllocateUniforms(gnUniformPool pool, const gnUniformAllocationI
|
|||||||
for (int i = 0; i < allocInfo.setCount; i++) {
|
for (int i = 0; i < allocInfo.setCount; i++) {
|
||||||
uniforms[i] = malloc(sizeof(struct gnUniform_t));
|
uniforms[i] = malloc(sizeof(struct gnUniform_t));
|
||||||
uniforms[i]->uniform = malloc(sizeof(struct gnPlatformUniform_t));
|
uniforms[i]->uniform = malloc(sizeof(struct gnPlatformUniform_t));
|
||||||
|
for (int c = 0; c < MAX_OPENGL_BINDINGS; c++) uniforms[i]->uniform->bindings[c].isUpdated = GN_FALSE;
|
||||||
}
|
}
|
||||||
return uniforms;
|
return uniforms;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user