mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-09-01 23:25:50 +00:00
Use glBindBufferRange for UBOs
This commit is contained in:
parent
c92c4c0136
commit
120feda4c4
2 changed files with 19 additions and 6 deletions
|
@ -101,6 +101,10 @@ class RendererGL final : public Renderer {
|
|||
std::unique_ptr<StreamBuffer> hwVertexBuffer;
|
||||
std::unique_ptr<StreamBuffer> hwIndexBuffer;
|
||||
|
||||
// Current offsets for our UBOs
|
||||
u32 shadergenFragmentUBOOffset = 0;
|
||||
u32 hwShaderUniformUBOOffset = 0;
|
||||
|
||||
// Cache of fixed attribute values so that we don't do any duplicate updates
|
||||
std::array<std::array<float, 4>, 16> fixedAttrValues;
|
||||
|
||||
|
|
|
@ -935,10 +935,15 @@ OpenGL::Program& RendererGL::getSpecializedShader() {
|
|||
glUniformBlockBinding(program.handle(), vertexUBOIndex, vsUBOBlockBinding);
|
||||
}
|
||||
}
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, fsUBOBlockBinding, shadergenFragmentUBO->GetGLBufferId());
|
||||
|
||||
glBindBufferRange(
|
||||
GL_UNIFORM_BUFFER, fsUBOBlockBinding, shadergenFragmentUBO->GetGLBufferId(), shadergenFragmentUBOOffset, sizeof(PICA::FragmentUniforms)
|
||||
);
|
||||
|
||||
if (usingAcceleratedShader) {
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, vsUBOBlockBinding, hwShaderUniformUBO->GetGLBufferId());
|
||||
glBindBufferRange(
|
||||
GL_UNIFORM_BUFFER, vsUBOBlockBinding, hwShaderUniformUBO->GetGLBufferId(), hwShaderUniformUBOOffset, PICAShader::totalUniformSize()
|
||||
);
|
||||
}
|
||||
|
||||
// Upload uniform data to our shader's UBO
|
||||
|
@ -1025,9 +1030,11 @@ OpenGL::Program& RendererGL::getSpecializedShader() {
|
|||
|
||||
// Upload fragment uniforms to UBO
|
||||
shadergenFragmentUBO->Bind();
|
||||
auto mapRes = shadergenFragmentUBO->Map(driverInfo.uboAlignment, sizeof(PICA::FragmentUniforms));
|
||||
std::memcpy(mapRes.pointer, &uniforms, sizeof(PICA::FragmentUniforms));
|
||||
auto uboRes = shadergenFragmentUBO->Map(driverInfo.uboAlignment, sizeof(PICA::FragmentUniforms));
|
||||
|
||||
std::memcpy(uboRes.pointer, &uniforms, sizeof(PICA::FragmentUniforms));
|
||||
shadergenFragmentUBO->Unmap(sizeof(PICA::FragmentUniforms));
|
||||
shadergenFragmentUBOOffset = uboRes.buffer_offset;
|
||||
|
||||
return program;
|
||||
}
|
||||
|
@ -1082,9 +1089,11 @@ bool RendererGL::prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration*
|
|||
// Upload shader uniforms to our UBO
|
||||
if (shaderUnit.vs.uniformsDirty) {
|
||||
shaderUnit.vs.uniformsDirty = false;
|
||||
auto mapRes = hwShaderUniformUBO->Map(driverInfo.uboAlignment, PICAShader::totalUniformSize());
|
||||
std::memcpy(mapRes.pointer, shaderUnit.vs.getUniformPointer(), PICAShader::totalUniformSize());
|
||||
auto uboRes = hwShaderUniformUBO->Map(driverInfo.uboAlignment, PICAShader::totalUniformSize());
|
||||
std::memcpy(uboRes.pointer, shaderUnit.vs.getUniformPointer(), PICAShader::totalUniformSize());
|
||||
hwShaderUniformUBO->Unmap(PICAShader::totalUniformSize());
|
||||
|
||||
hwShaderUniformUBOOffset = uboRes.buffer_offset;
|
||||
}
|
||||
|
||||
performIndexedRender = accel->indexed;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue