|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (storageBlock.isUpdateNeeded()) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bindProgram(shader); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final int shaderId = shader.getId(); |
|
|
|
final int blockIndex = gl4.glGetProgramResourceIndex(shaderId, GL4.GL_SHADER_STORAGE_BLOCK, storageBlock.getName()); |
|
|
|
final int blockIndex = gl4.glGetProgramResourceIndex(shaderId, GL4.GL_SHADER_STORAGE_BLOCK, storageBlock.getName()); |
|
|
|
|
|
|
|
|
|
|
|
gl4.glShaderStorageBlockBinding(shaderId, blockIndex, storageData.getBinding()); |
|
|
|
gl4.glShaderStorageBlockBinding(shaderId, blockIndex, storageData.getBinding()); |
|
|
|
gl4.glBindBufferBase(GL4.GL_SHADER_STORAGE_BUFFER, storageData.getBinding(), storageData.getId()); |
|
|
|
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); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|