#define GL_GLEXT_PROTOTYPES #include "raylib.h" #include "rlgl.h" #include #include int main(){ InitWindow(100, 100, ""); //sets up openGL context printf("Hello World\n"); //rbc Compute Shader Setup /*char *rbcLogicCode = LoadFileText("./test.glsl"); unsigned int rbcLogicShader = rlCompileShader(rbcLogicCode, RL_COMPUTE_SHADER); unsigned int rbcLogicProgram = rlLoadComputeShaderProgram(rbcLogicShader); unsigned int ssbo = rlLoadShaderBuffer(sizeof(float), NULL, RL_DYNAMIC_COPY); //Run compute shader rlEnableShader(rbcLogicProgram); rlBindShaderBuffer(ssbo, 0); rlComputeShaderDispatch(1, 1, 1); rlDisableShader(); float temp = 0; rlReadShaderBufferElements(ssbo, &temp, sizeof(float), 0); printf("Temp: %f\n", temp); //De-Initialization rlUnloadShaderBuffer(ssbo); rlUnloadShaderProgram(rbcLogicProgram); */ int data[10]; for(int i=0; i<10; i++){ data[i] = i; } //Prepare program char *shaderCode = LoadFileText("./test.glsl"); //Load the code into pointer of strings //contents of rlCompileShader GLuint cs = glCreateShader(GL_COMPUTE_SHADER); //Creates a shader object glShaderSource(cs, 1, &shaderCode, NULL); //Places code in shader object. (shader, count # element sin arrays, string, length) glCompileShader(cs); int success; glGetShaderiv(cs, GL_COMPILE_STATUS, &success); //Return a paramater from shader object (object parameters) if (!success) { fprintf(stderr, "Error in compiling the compute shader\n"); GLchar log[10240]; GLsizei length; glGetShaderInfoLog(cs, 10239, &length, log); fprintf(stderr, "Compiler log:\n%s\n", log); return 40; } //contents of rlLoadComputeShaderProgram GLuint progHandle = glCreateProgram(); glAttachShader(progHandle, cs); glLinkProgram(progHandle); glGetProgramiv(progHandle, GL_LINK_STATUS, &success); if (!success) { fprintf(stderr, "Error in linking compute shader program\n"); GLchar log[10240]; GLsizei length; glGetProgramInfoLog(progHandle, 10239, &length, log); fprintf(stderr, "Linker log:\n%s\n", log); return 41; } //Contents of rlEnableShader glUseProgram(progHandle); //Prepare SSBO GLuint ssbo; glGenBuffers(1, &ssbo); glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(data), data, GL_DYNAMIC_COPY); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo); glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); //Unbind //rlComputeShaderDispatch glDispatchCompute(1, 1, 1); //Pull data out glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, sizeof(data[0]), &data[0]); printf("Value: %d\n", data[0]); glUseProgram(0); CloseWindow(); return 0; }