2023-03-18 17:51:56 +01:00
|
|
|
#include <GL4D/gl4duw_SDL2.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
static void init(void);
|
2023-05-01 01:00:50 +02:00
|
|
|
static void resize(int, int);
|
2023-03-18 17:51:56 +01:00
|
|
|
static void draw(void);
|
|
|
|
static void sortie(void);
|
|
|
|
|
|
|
|
static GLuint _wW = 1280, _wH = 720;
|
2023-05-01 01:00:50 +02:00
|
|
|
static GLuint _quadId = 0;
|
|
|
|
static GLuint _pId = 0;
|
2023-03-18 17:51:56 +01:00
|
|
|
|
|
|
|
int main(int argc, char **argv) {
|
|
|
|
if (!gl4duwCreateWindow(argc, argv, "Demo API8 2023", GL4DW_POS_CENTERED,
|
|
|
|
GL4DW_POS_CENTERED, _wW, _wH,
|
|
|
|
GL4DW_OPENGL | GL4DW_SHOWN)) {
|
|
|
|
fprintf(stderr, "Erreur lors de la création de la fenêtre.\n");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
init();
|
|
|
|
atexit(sortie);
|
2023-05-01 01:00:50 +02:00
|
|
|
gl4duwResizeFunc(resize);
|
2023-03-18 17:51:56 +01:00
|
|
|
gl4duwDisplayFunc(draw);
|
|
|
|
gl4duwMainLoop();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2023-05-01 01:00:50 +02:00
|
|
|
void init(void) {
|
|
|
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
|
|
|
_quadId = gl4dgGenQuadf();
|
|
|
|
_pId = gl4duCreateProgram("<vs>shaders/lights.vs", "<fs>shaders/lights.fs",
|
|
|
|
NULL);
|
|
|
|
glEnable(GL_DEPTH_TEST);
|
|
|
|
gl4duGenMatrix(GL_FLOAT, "proj");
|
|
|
|
gl4duGenMatrix(GL_FLOAT, "mod");
|
|
|
|
gl4duGenMatrix(GL_FLOAT, "view");
|
|
|
|
resize(_wW, _wH);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void resize(int width, int height) {
|
|
|
|
GLfloat ratio;
|
|
|
|
_wW = width;
|
|
|
|
_wH = height;
|
|
|
|
glViewport(0, 0, _wW, _wH);
|
|
|
|
ratio = (GLfloat)_wW / (GLfloat)_wH;
|
|
|
|
gl4duBindMatrix("proj");
|
|
|
|
gl4duLoadIdentityf();
|
|
|
|
gl4duFrustumf(-1 * ratio, 1 * ratio, -1, 1, 2, 100);
|
|
|
|
}
|
|
|
|
|
|
|
|
void draw(void) {
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
2023-03-18 17:51:56 +01:00
|
|
|
|
2023-05-01 01:00:50 +02:00
|
|
|
// Vue
|
|
|
|
gl4duBindMatrix("view");
|
|
|
|
gl4duLoadIdentityf();
|
|
|
|
gl4duLookAtf(0, 0, 4.f, 0, 0, 0, 0.f, 1.f, 0);
|
|
|
|
|
|
|
|
// Scene
|
|
|
|
// clang-format off
|
|
|
|
GLfloat rouge[] = {1.f, 0.f, 0.f, 1.f},
|
|
|
|
blanc[] = {1.f, 1.f, 1.f, 1.f},
|
|
|
|
lumpos0[] = {0.f, 0.f, 1.1f, 1.f},
|
|
|
|
lumpos[4],
|
|
|
|
*mat;
|
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
static GLdouble x = 0.;
|
|
|
|
lumpos0[0] = 4.f * (float)sin(x);
|
|
|
|
gl4duBindMatrix("view");
|
|
|
|
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);
|
|
|
|
}
|
2023-03-18 17:51:56 +01:00
|
|
|
|
|
|
|
void sortie(void) { gl4duClean(GL4DU_ALL); }
|