瀏覽代碼

fixed updating data.

javasabr 7 年之前
父節點
當前提交
d225030745
共有 1 個文件被更改,包括 12 次插入13 次删除
  1. 12 13
      jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java

+ 12 - 13
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) {
     protected void updateShaderStorageBlock(final Shader shader, final StorageBlock storageBlock) {
 
 
-        int shaderId = shader.getId();
-
         assert storageBlock.getName() != null;
         assert storageBlock.getName() != null;
         assert shader.getId() > 0;
         assert shader.getId() > 0;
 
 
-        bindProgram(shader);
-
-        storageBlock.clearUpdateNeeded();
-
         final ShaderStorageBufferObject storageData = (ShaderStorageBufferObject) storageBlock.getStorageData();
         final ShaderStorageBufferObject storageData = (ShaderStorageBufferObject) storageBlock.getStorageData();
         if (storageData.getUniqueId() == -1 || storageData.isUpdateNeeded()) {
         if (storageData.getUniqueId() == -1 || storageData.isUpdateNeeded()) {
             updateBufferData(storageData);
             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) {
     protected void updateShaderUniforms(Shader shader) {
@@ -1236,10 +1238,7 @@ public final class GLRenderer implements Renderer {
     protected void updateShaderStorageBlocks(final Shader shader) {
     protected void updateShaderStorageBlocks(final Shader shader) {
         final ListMap<String, StorageBlock> storageBlocks = shader.getStorageBlockMap();
         final ListMap<String, StorageBlock> storageBlocks = shader.getStorageBlockMap();
         for (int i = 0; i < storageBlocks.size(); i++) {
         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));
         }
         }
     }
     }