#include "../includes/animations.h" void cube(int, int); void lights(int state) { static GLuint quadId = 0; static GLuint pId = 0; switch (state) { case GL4DH_INIT: quadId = gl4dgGenQuadf(); pId = gl4duCreateProgram("shaders/lights.vs", "shaders/lights.fs", NULL); gl4duGenMatrix(GL_FLOAT, "proj"); gl4duGenMatrix(GL_FLOAT, "mod"); gl4duGenMatrix(GL_FLOAT, "view"); glEnable(GL_DEPTH_TEST); break; case GL4DH_DRAW: glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); static GLdouble lumloc = 0.; // clang-format off GLfloat rouge[] = {1.f, 0.f, 0.f, 1.f}, blanc[] = {1.f, 1.f, 1.f, 1.f}, lumpos0[] = {4.f * (float)sin(lumloc), 0.f, 1.1f, 1.f}, lumpos[4], *mat, ratio = (GLfloat)_dims[0] / (GLfloat)_dims[1]; // clang-format on // Setup gl4duBindMatrix("proj"); gl4duLoadIdentityf(); // TODO: ça bug?? gl4duFrustumf(-ratio, ratio, -1, 1, 2, 100); // Scene gl4duBindMatrix("view"); gl4duLoadIdentityf(); gl4duLookAtf(0, 0, 4.0f, 0, 0, 0, 0.0f, 1.0f, 0); mat = (GLfloat *)gl4duGetMatrixData(); MMAT4XVEC4(lumpos, mat, lumpos0); gl4duBindMatrix("mod"); gl4duLoadIdentityf(); glUseProgram(pId); gl4duSendMatrices(); glUniform4fv(glGetUniformLocation(pId, "scolor"), 1, rouge); glUniform4fv(glGetUniformLocation(pId, "lcolor"), 1, blanc); glUniform4fv(glGetUniformLocation(pId, "lumpos"), 1, lumpos); gl4dgDraw(quadId); glUseProgram(0); break; default: break; } }