From d225030745884165510d1db4bd06ccbdd3e2327c Mon Sep 17 00:00:00 2001 From: javasabr Date: Thu, 8 Feb 2018 07:08:48 +0300 Subject: [PATCH] fixed updating data. --- .../com/jme3/renderer/opengl/GLRenderer.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index b55aa8dd4..c7e4b94b5 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -1198,24 +1198,26 @@ public final class GLRenderer implements Renderer { */ protected void updateShaderStorageBlock(final Shader shader, final StorageBlock storageBlock) { - int shaderId = shader.getId(); - assert storageBlock.getName() != null; assert shader.getId() > 0; - bindProgram(shader); - - storageBlock.clearUpdateNeeded(); - final ShaderStorageBufferObject storageData = (ShaderStorageBufferObject) storageBlock.getStorageData(); if (storageData.getUniqueId() == -1 || storageData.isUpdateNeeded()) { updateBufferData(storageData); } - final int blockIndex = gl4.glGetProgramResourceIndex(shaderId, GL4.GL_SHADER_STORAGE_BLOCK, storageBlock.getName()); + if (storageBlock.isUpdateNeeded()) { - gl4.glShaderStorageBlockBinding(shaderId, blockIndex, storageData.getBinding()); - gl4.glBindBufferBase(GL4.GL_SHADER_STORAGE_BUFFER, storageData.getBinding(), storageData.getId()); + bindProgram(shader); + + final int shaderId = shader.getId(); + final int blockIndex = gl4.glGetProgramResourceIndex(shaderId, GL4.GL_SHADER_STORAGE_BLOCK, storageBlock.getName()); + + gl4.glShaderStorageBlockBinding(shaderId, blockIndex, storageData.getBinding()); + gl4.glBindBufferBase(GL4.GL_SHADER_STORAGE_BUFFER, storageData.getBinding(), storageData.getId()); + + storageBlock.clearUpdateNeeded(); + } } protected void updateShaderUniforms(Shader shader) { @@ -1236,10 +1238,7 @@ public final class GLRenderer implements Renderer { protected void updateShaderStorageBlocks(final Shader shader) { final ListMap storageBlocks = shader.getStorageBlockMap(); for (int i = 0; i < storageBlocks.size(); i++) { - final StorageBlock storageBlock = storageBlocks.getValue(i); - if (storageBlock.isUpdateNeeded()) { - updateShaderStorageBlock(shader, storageBlock); - } + updateShaderStorageBlock(shader, storageBlocks.getValue(i)); } }