fixed updating data.

JavaSaBr-added_new_var_type
javasabr 7 years ago committed by Nehon
parent ab10d6293e
commit d225030745
  1. 25
      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()); bindProgram(shader);
gl4.glBindBufferBase(GL4.GL_SHADER_STORAGE_BUFFER, storageData.getBinding(), storageData.getId());
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); updateShaderStorageBlock(shader, storageBlocks.getValue(i));
if (storageBlock.isUpdateNeeded()) {
updateShaderStorageBlock(shader, storageBlock);
}
} }
} }

Loading…
Cancel
Save