mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-19 06:39:04 +02:00
Use ssbo for model transforms
This commit is contained in:
parent
23cf72bd6c
commit
3e027fc5c5
3 changed files with 8 additions and 13 deletions
|
@ -13,7 +13,7 @@
|
|||
|
||||
<@if GLPROFILE == PC_GL @>
|
||||
<@def GPU_FEATURE_PROFILE GPU_CORE@>
|
||||
<@def VERSION_HEADER #version 410 core@>
|
||||
<@def VERSION_HEADER #version 430 core@>
|
||||
<@elif GLPROFILE == MAC_GL @>
|
||||
<@def GPU_FEATURE_PROFILE GPU_CORE@>
|
||||
<@def VERSION_HEADER #version 410 core@>
|
||||
|
|
|
@ -143,6 +143,7 @@ void GLBackend::TransformStageState::transfer() const {
|
|||
}
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, _cameraBuffer);
|
||||
glBufferData(GL_UNIFORM_BUFFER, bufferData.size(), bufferData.data(), GL_DYNAMIC_DRAW);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, 0);
|
||||
}
|
||||
|
||||
if (!_objects.empty()) {
|
||||
|
@ -150,12 +151,9 @@ void GLBackend::TransformStageState::transfer() const {
|
|||
bufferData.resize(byteSize);
|
||||
memcpy(bufferData.data(), _objects.data(), byteSize);
|
||||
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, _objectBuffer);
|
||||
glBufferData(GL_UNIFORM_BUFFER, bufferData.size(), bufferData.data(), GL_DYNAMIC_DRAW);
|
||||
}
|
||||
|
||||
if (!_objects.empty() || !_cameras.empty()) {
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, 0);
|
||||
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, TRANSFORM_OBJECT_SLOT, _objectBuffer);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, bufferData.size(), bufferData.data(), GL_DYNAMIC_DRAW);
|
||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
|
||||
}
|
||||
|
||||
CHECK_GL_ERROR();
|
||||
|
@ -177,8 +175,7 @@ void GLBackend::TransformStageState::update(size_t commandIndex, const StereoSta
|
|||
_cameraBuffer, offset, sizeof(Backend::TransformCamera));
|
||||
}
|
||||
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, TRANSFORM_OBJECT_SLOT, _objectBuffer);
|
||||
|
||||
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, TRANSFORM_OBJECT_SLOT, _objectBuffer);
|
||||
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
|
|
@ -25,12 +25,10 @@ struct TransformCamera {
|
|||
vec4 _viewport;
|
||||
};
|
||||
|
||||
const int MAX_OBJECTS = 512; // NEEDS to match GLBackend::TransformStageState::update's MAX_OBJECT
|
||||
|
||||
in ivec2 _drawCallInfo;
|
||||
|
||||
layout(std140) uniform transformObjectBuffer {
|
||||
TransformObject _object[MAX_OBJECTS];
|
||||
layout(std430, binding=6) buffer transformObjectBuffer {
|
||||
TransformObject _object[];
|
||||
};
|
||||
TransformObject getTransformObject() {
|
||||
return _object[_drawCallInfo.x];
|
||||
|
|
Loading…
Reference in a new issue