float lpos[3];
} __attribute__((packed));
-unsigned int sampler;
unsigned int tex;
int init(void);
int init(void)
{
- unsigned int uloc_matrix;
-
glDebugMessageCallback(gldebug, 0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
return -1;
}
- glGenSamplers(1, &sampler);
- glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
if(gen_torus(&torus, 1.0, 0.25, 32, 12) == -1) {
return -1;
}
}
#endif
- if(link_program(sdr) == -1) {
- fprintf(stderr, "failed to bind attribute locations\n");
- return -1;
- }
-
glUseProgram(sdr);
glGenBuffers(1, &ubo_matrix);
glBindBuffer(GL_UNIFORM_BUFFER, ubo_matrix);
glBufferData(GL_UNIFORM_BUFFER, sizeof matrix_state, &matrix_state, GL_STREAM_DRAW);
- uloc_matrix = glGetUniformBlockIndex(sdr, "matrix_state");
- glUniformBlockBinding(sdr, uloc_matrix, UBLOCK_MATRIX);
return 0;
}
glDeleteVertexArrays(1, &torus.vao);
}
glDeleteTextures(1, &tex);
- glDeleteSamplers(1, &sampler);
+ glDeleteBuffers(1, &ubo_matrix);
}
void display(void)
glBindBufferBase(GL_UNIFORM_BUFFER, UBLOCK_MATRIX, ubo_matrix);
glBindTexture(GL_TEXTURE_2D, tex);
- glBindSampler(0, sampler);
draw_mesh(&torus);
- glBindSampler(0, 0);
- //assert(glGetError() == GL_NO_ERROR);
+ assert(glGetError() == GL_NO_ERROR);
glutSwapBuffers();
}
glDeleteProgram(prog);
return 0;
}
+
+ glDetachShader(prog, vs);
+ glDetachShader(prog, ps);
+
return prog;
}