diff --git a/libraries/gpu/src/gpu/Config.slh b/libraries/gpu/src/gpu/Config.slh index 3da92df7c1..5a96a7eafe 100644 --- a/libraries/gpu/src/gpu/Config.slh +++ b/libraries/gpu/src/gpu/Config.slh @@ -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@> diff --git a/libraries/gpu/src/gpu/GLBackendTransform.cpp b/libraries/gpu/src/gpu/GLBackendTransform.cpp index 68c29dac25..cffe066e6d 100755 --- a/libraries/gpu/src/gpu/GLBackendTransform.cpp +++ b/libraries/gpu/src/gpu/GLBackendTransform.cpp @@ -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(); } diff --git a/libraries/gpu/src/gpu/Transform.slh b/libraries/gpu/src/gpu/Transform.slh index 2dc2ba9515..692e345e0d 100644 --- a/libraries/gpu/src/gpu/Transform.slh +++ b/libraries/gpu/src/gpu/Transform.slh @@ -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];