6{
7 GLuint shader = CompileShader(source, GL_COMPUTE_SHADER, "Compute Shader");
8 m_Shader = CreateProgram();
9 glAttachShader(m_Shader, shader);
10 glLinkProgram(m_Shader);
11 GLint isLinked = 0;
12 glGetProgramiv(m_Shader, GL_LINK_STATUS, (int *)&isLinked);
13
14 if (isLinked == GL_FALSE)
15 {
16 GLint maxLength = 0;
17 glGetProgramiv(m_Shader, GL_INFO_LOG_LENGTH, &maxLength);
18 char *errorLog = (char *)malloc(maxLength);
19 memset(errorLog, 0, maxLength);
20 glGetProgramInfoLog(m_Shader, maxLength, &maxLength, errorLog);
21 glDeleteProgram(m_Shader);
22 glDeleteShader(shader);
23 Log(errorLog);
24 return;
25 }
26
27 glDetachShader(m_Shader, shader);
28 glDeleteShader(shader);
29 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 0, &maxWorkGroupCount[0]);
30 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 1, &maxWorkGroupCount[1]);
31 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 2, &maxWorkGroupCount[2]);
32 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 0, &maxWorkGroupSize[0]);
33 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 1, &maxWorkGroupSize[1]);
34 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 2, &maxWorkGroupSize[2]);
35 glGetIntegerv(GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, &maxWorkGroupInvocations);
36}