Original Post
Hi opengl experts,
I am trying out a compute shader for the first time to generate some terrain but I am getting GL_OUT_OF_MEMORY (error 1285) when trying to validate the shader.
std::string compute_source = R"(
#version 430 core
layout(local_size_x = 64, local_size_y = 64) in;
struct TerrainPatch {
vec2 pos;
vec2 dim;
};
layout (std430, binding = 0) buffer InputBuffer {
TerrainPatch patches[];
};
struct TerrainVertex {
vec4 pos;
vec4 nor;
};
layout (std430, binding = 1) buffer OutputBuffer {
TerrainVertex vertexes[];
};
void main() {
vertexes[0].pos = vec4(patches[0].pos, 0.0f, 0.0f);
}
)";
const char* compute_source_chars = compute_source.c_str();
GLuint shader = glCreateShader(GL_COMPUTE_SHADER);
glShaderSource(shader, 1, &compute_source_chars, NULL);
glCompileShader(shader);
GLint shader_status = GL_FALSE;
glGetShaderiv(shader, GL_COMPILE_STATUS, &shader_status);
assert(shader_status != GL_FALSE);
GLuint program = glCreateProgram();
glAttachShader(program, shader);
glLinkProgram(program);
GLint link_status = GL_FALSE;
glGetProgramiv(program, GL_LINK_STATUS, &link_status);
assert(link_status != GL_FALSE);
{
GLenum error = GL_NO_ERROR;
while ((error = glGetError()) != GL_NO_ERROR) { // <-- this doesn't have an error
printf("OpenGL ERROR: %s\n", gluErrorString(error));
assert(false);
}
}
glValidateProgram(program);
{
GLenum error = GL_NO_ERROR;
while ((error = glGetError()) != GL_NO_ERROR) { // <-- this is giving error 1285
printf("OpenGL ERROR: %s\n", gluErrorString(error));
assert(false);
}
} Am I missing something obvious?