InsideDarkWeb.com

How to retrieve data from Compute Shader to CPU?

I want to retrieve data that has created by the compute shader but have no clue how it works. After researching a few forums and articles on how it should work and this is what I came up with.

Compute Shader Code

#version 430 core

layout  (local_size_x  =  100)  in;

layout(std430, binding=0) buffer Pos{
    float Position[];
};

void main(){
    Position[gl_GlobalInvocationID.x] = float(gl_GlobalInvocationID.x);
}

Program Code

public float[] useProgram(int x_size, int y_size, int z_size){
        
        this.group_x_size = (int)Math.ceil(x_size/100);
        this.group_y_size = (int)Math.ceil(y_size/100);
        this.group_z_size = (int)Math.ceil(z_size/100);
        float[] data = new float[x_size];
        FloatBuffer buffer = BufferUtils.createFloatBuffer(x_size);
        buffer.put(data);
        int ssbo = GL15.glGenBuffers();// creates empty VBO as an object and stores it in OpenGl memory
        GL15.glBindBuffer(GL43.GL_SHADER_STORAGE_BUFFER, ssbo);
        GL15.glBufferData(GL43.GL_SHADER_STORAGE_BUFFER,buffer,GL15.GL_DYNAMIC_COPY);
        GL43.glBindBufferBase(GL43.GL_SHADER_STORAGE_BUFFER, 0, ssbo);
        GL15.glBindBuffer(GL43.GL_SHADER_STORAGE_BUFFER, 0);
        
        GL20.glUseProgram(computeProgram);//start the shader program
        GL43.glDispatchCompute(group_x_size, 1, 1);
        GL43.glMemoryBarrier(GL43.GL_SHADER_STORAGE_BARRIER_BIT);

        GL15.glBindBuffer(GL43.GL_SHADER_STORAGE_BUFFER, ssbo);
        String values = GL43.glMapBuffer(GL43.GL_SHADER_STORAGE_BUFFER, GL43.GL_WRITE_ONLY).asFloatBuffer().toString();
        GL43.glUnmapBuffer(GL43.GL_SHADER_STORAGE_BUFFER);
        System.out.println(values);
        
        return null;
    }

However this code just simply will not work the way I want it to. When I go to print out the Values it comes up null. Is there something wrong with the code or is there a better way to do it. I’ve looked through many forums but most of them aren’t written in java.

Computer Graphics Asked by Ethan Ma on November 15, 2021

0 Answers

Add your own answers!

Related Questions

Why are texture coordinates often called UVs?

2  Asked on August 27, 2021 by samanthaj

 

Dynamic Ray-Triangle Intersection

1  Asked on August 27, 2021 by cemklkn

     

Draw Line on Arbitrary Surface

0  Asked on August 27, 2021 by valentin-molina

 

How to raytrace Bezier surfaces?

5  Asked on August 27, 2021 by luser-droog

   

Better Shadow Mapping Techniques

2  Asked on August 27, 2021 by arjan-singh

       

What does GPU assembly look like?

4  Asked on August 27, 2021 by sebastien-finor

   

Why does opengl use 4d matrices for everything?

3  Asked on August 27, 2021 by yoris

 

Defining “inside” and “outside” of a 3D space

2  Asked on August 27, 2021 by avatrin

 

Which perspective projection matrix to use

1  Asked on August 27, 2021 by nixcc

   

Ask a Question

Get help from others!

© 2021 InsideDarkWeb.com. All rights reserved.