rework
* usage of gl4dhAnimeManager * basic impl of music (MID) * includes and src folders * move light to animation
This commit is contained in:
parent
747b4d1e86
commit
f45432f0ef
7 changed files with 193 additions and 75 deletions
6
Makefile
6
Makefile
|
@ -23,8 +23,8 @@ PACKNAME = api8_2023
|
||||||
PROGNAME = demo
|
PROGNAME = demo
|
||||||
VERSION = 0.1
|
VERSION = 0.1
|
||||||
distdir = $(PACKNAME)_$(PROGNAME)-$(VERSION)
|
distdir = $(PACKNAME)_$(PROGNAME)-$(VERSION)
|
||||||
HEADERS =
|
HEADERS = $(wildcard includes/*.h)
|
||||||
SOURCES = main.c
|
SOURCES = main.c $(wildcard src/*.c)
|
||||||
MSVCSRC = $(patsubst %,<ClCompile Include=\"%\\\" \\/>,$(SOURCES))
|
MSVCSRC = $(patsubst %,<ClCompile Include=\"%\\\" \\/>,$(SOURCES))
|
||||||
OBJ = $(SOURCES:.c=.o)
|
OBJ = $(SOURCES:.c=.o)
|
||||||
DOXYFILE = documentation/Doxyfile
|
DOXYFILE = documentation/Doxyfile
|
||||||
|
@ -54,7 +54,7 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CPPFLAGS += $(shell sdl2-config --cflags)
|
CPPFLAGS += $(shell sdl2-config --cflags)
|
||||||
LDFLAGS += -lGL4Dummies $(shell sdl2-config --libs)
|
LDFLAGS += -lGL4Dummies $(shell sdl2-config --libs) -lSDL2_mixer -lSDL2_image
|
||||||
|
|
||||||
all: $(PROGNAME)
|
all: $(PROGNAME)
|
||||||
$(PROGNAME): $(OBJ)
|
$(PROGNAME): $(OBJ)
|
||||||
|
|
18
includes/animations.h
Normal file
18
includes/animations.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef DEMO_ANIMATION_HPP
|
||||||
|
#define DEMO_ANIMATION_HPP 1
|
||||||
|
|
||||||
|
#include <GL4D/gl4dh.h>
|
||||||
|
#include <GL4D/gl4duw_SDL2.h>
|
||||||
|
|
||||||
|
#include "audio.h"
|
||||||
|
|
||||||
|
// Dimensions de la fenêtre
|
||||||
|
extern GLuint _dims[];
|
||||||
|
|
||||||
|
// Lumière
|
||||||
|
void lights(int);
|
||||||
|
|
||||||
|
// Crédits de fin
|
||||||
|
void credits(int);
|
||||||
|
|
||||||
|
#endif
|
15
includes/audio.h
Normal file
15
includes/audio.h
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#ifndef DEMO_AUDIO_HPP
|
||||||
|
#define DEMO_AUDIO_HPP 1
|
||||||
|
|
||||||
|
#include <SDL_mixer.h>
|
||||||
|
|
||||||
|
// Charge et lance la musique
|
||||||
|
void initMusic(Mix_Music *, const char *);
|
||||||
|
|
||||||
|
// Renvoie une moyenne de l'intensité du son
|
||||||
|
double averageMusic(void);
|
||||||
|
|
||||||
|
// Libère la musique en mémoire
|
||||||
|
void freeMusic(Mix_Music *);
|
||||||
|
|
||||||
|
#endif
|
104
main.c
104
main.c
|
@ -1,86 +1,46 @@
|
||||||
#include <GL4D/gl4duw_SDL2.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void init(void);
|
#include "includes/animations.h"
|
||||||
static void resize(int, int);
|
|
||||||
static void draw(void);
|
|
||||||
static void sortie(void);
|
|
||||||
|
|
||||||
static GLuint _wW = 1280, _wH = 720;
|
// Son de fond
|
||||||
static GLuint _quadId = 0;
|
// static Mix_Music *_ambiance = NULL;
|
||||||
static GLuint _pId = 0;
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
// Dimensions initiales de la fenêtre
|
||||||
|
GLuint _dims[] = {1280, 720};
|
||||||
|
|
||||||
|
// Comportement à la fermeture du programme
|
||||||
|
static void closure(void) {
|
||||||
|
// freeMusic(_ambiance);
|
||||||
|
gl4duClean(GL4DU_ALL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comportement quand la fenêtre est redimensionnée
|
||||||
|
static void resize(int w, int h) {
|
||||||
|
_dims[0] = w;
|
||||||
|
_dims[1] = h;
|
||||||
|
glViewport(0, 0, _dims[0], _dims[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
if (!gl4duwCreateWindow(argc, argv, "Demo API8 2023", GL4DW_POS_CENTERED,
|
if (!gl4duwCreateWindow(argc, argv, "Demo API8 2023", GL4DW_POS_CENTERED,
|
||||||
GL4DW_POS_CENTERED, _wW, _wH,
|
GL4DW_POS_CENTERED, _dims[0], _dims[1],
|
||||||
GL4DW_OPENGL | GL4DW_SHOWN)) {
|
GL4DW_OPENGL | GL4DW_SHOWN)) {
|
||||||
fprintf(stderr, "Erreur lors de la création de la fenêtre.\n");
|
fprintf(stderr, "Erreur lors de la création de la fenêtre.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
init();
|
// initMusic(_ambiance, "audio/ambiance.mid");
|
||||||
atexit(sortie);
|
|
||||||
|
// Animations
|
||||||
|
GL4DHanime animations[] = {{7000, lights, NULL, NULL},
|
||||||
|
{3000, credits, NULL, NULL},
|
||||||
|
{0, NULL, NULL, NULL}};
|
||||||
|
|
||||||
|
gl4dhInit(animations, _dims[0], _dims[1], NULL);
|
||||||
|
atexit(closure);
|
||||||
|
|
||||||
gl4duwResizeFunc(resize);
|
gl4duwResizeFunc(resize);
|
||||||
gl4duwDisplayFunc(draw);
|
gl4duwDisplayFunc(gl4dhDraw);
|
||||||
gl4duwMainLoop();
|
gl4duwMainLoop();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sortie(void) { gl4duClean(GL4DU_ALL); }
|
|
||||||
|
|
39
src/audio.c
Normal file
39
src/audio.c
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#include "../includes/audio.h"
|
||||||
|
|
||||||
|
// Stocke les données à propos de la musique
|
||||||
|
static double average;
|
||||||
|
|
||||||
|
double averageMusic(void) { return average; }
|
||||||
|
|
||||||
|
void callback(void *_, Uint8 *stream, int size) {
|
||||||
|
int i = 0;
|
||||||
|
double tmp = 0.;
|
||||||
|
for (signed short *stream16 = (signed short *)stream; i < size / 2; ++i) {
|
||||||
|
tmp += stream16[i] / ((1 << 15) - 1.);
|
||||||
|
}
|
||||||
|
average = fabs(tmp / i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void initMusic(Mix_Music *music, const char *filename) {
|
||||||
|
Mix_Init(MIX_INIT_MID);
|
||||||
|
Mix_OpenAudio(44100, AUDIO_S16LSB, 2, 1024);
|
||||||
|
music = Mix_LoadMUS(filename);
|
||||||
|
|
||||||
|
Mix_VolumeMusic(MIX_MAX_VOLUME / 10);
|
||||||
|
Mix_SetPostMix(callback, NULL);
|
||||||
|
|
||||||
|
Mix_PlayMusic(music, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void freeMusic(Mix_Music *music) {
|
||||||
|
if (music) {
|
||||||
|
if (Mix_PlayingMusic()) {
|
||||||
|
Mix_HaltMusic();
|
||||||
|
}
|
||||||
|
Mix_FreeMusic(music);
|
||||||
|
music = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Mix_CloseAudio();
|
||||||
|
Mix_Quit();
|
||||||
|
}
|
17
src/credits.c
Normal file
17
src/credits.c
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#include "../includes/animations.h"
|
||||||
|
|
||||||
|
void credits(int state) {
|
||||||
|
switch (state) {
|
||||||
|
case GL4DH_INIT:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DH_DRAW:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DH_FREE:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
69
src/light.c
Normal file
69
src/light.c
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
#include "../includes/animations.h"
|
||||||
|
|
||||||
|
void cube(int, int);
|
||||||
|
|
||||||
|
void lights(int state) {
|
||||||
|
static GLuint quadId = 0;
|
||||||
|
static GLuint pId = 0;
|
||||||
|
|
||||||
|
const GLuint wW = _dims[0];
|
||||||
|
const GLuint wH = _dims[1];
|
||||||
|
|
||||||
|
switch (state) {
|
||||||
|
case GL4DH_INIT:
|
||||||
|
quadId = gl4dgGenQuadf();
|
||||||
|
pId = gl4duCreateProgram("<vs>shaders/lights.vs", "<fs>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;
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue