title: Shader Storage Buffer Object element reading optimization
body: <p>Im doing trillinear interpolation using Shader Storage Buffer Object.
  So i access my ssbo in fragment shader like this:</p>
  <p><code> layout(std430, binding = 0) buffer ColorSSBO { int value[]; };</code></p>
  <pre><code>int c000 = value[x0 + y0 * dataWidth + z0 * area];
  int c100 = value[x1 + y0 * dataWidth + z0 * area];
  int c010 = value[x0 + y1 * dataWidth + z0 * area];
  int c110 = value[x1 + y1 * dataWidth + z0 * area];
  int c001 = value[x0 + y0 * dataWidth + z1 * area];
  int c101 = value[x1 + y0 * dataWidth + z1 * area];
  int c011 = value[x0 + y1 * dataWidth + z1 * area];
  int c111 = value[x1 + y1 * dataWidth + z1 * area];
  </code></pre>
  <p>It is becoming very inefficient since this buffer is huge, if I could read multiple elements of the array at once it would be great, or at least those that go in a row</p>
  <p>I dont need to modify this array, I feel like I missing something, maybe there is some keyword for readonly</p>
  <p>this is how I load ssbo using lwjgl:</p>
  <pre><code>public void loadSSBO(int[][] values){
      if (ssbo != 0) GL15.glDeleteBuffers(ssbo);
      
      int size = values[0].length;
      long pixelSIZE = size * (Integer.SIZE / 8);
      
      ssbo = GL15.glGenBuffers();
      GL33.glBindBuffer(GL43.GL_SHADER_STORAGE_BUFFER, ssbo);
      GL15.glBufferData(GL43.GL_SHADER_STORAGE_BUFFER, pixelSIZE * values.length, GL15.GL_STATIC_DRAW);   // declare buffer
      for (int i = 0; i &lt; values.length; i++) {
          GL15.glBufferSubData(GL43.GL_SHADER_STORAGE_BUFFER, pixelSIZE * i, values[i]);
      }
      GL33.glBindBufferBase(GL43.GL_SHADER_STORAGE_BUFFER, 0, ssbo);
      GL33.glBindBuffer(GL43.GL_SHADER_STORAGE_BUFFER, 0);    //unbind
  }
  </code></pre>