summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/main.c b/src/main.c
index 94d6195..9b151b1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -18,6 +18,9 @@
* along with demoscene-eo. If not, see <http://www.gnu.org/licenses/>
*/
#include "main.h"
+#include "scene00.h"
+#include "scene01.h"
+#include "scene02.h"
#include <stdlib.h> // calloc()
#include <strings.h> // bzero()
@@ -29,6 +32,7 @@
#include <stdint.h> // uint32_t
#include <stdio.h> // printf()
+
#define TRACE(hint) printf("%s(): %s\n", __func__, hint)
#define SCENE_COUNT 3
#define SCENE_NEXT do { shm->scene = (shm->scene+1)%SCENE_COUNT; } while(0)
@@ -38,15 +42,14 @@
#define SEM_POST(sem,errcode) \
do { \
- printf("%s(): sem_post(%s,%i) call\n", __func__, #sem, errcode);\
+ /* printf("%s(): sem_post(%s,%i)\n", __func__, #sem, errcode); */ \
if ( sem_post(sem) == -1 ) { return errcode; } \
- printf("%s(): sem_post(%s,%i) done\n", __func__, #sem, errcode);\
} while(0)
#define SEM_WAIT(sem,errcode) \
do { \
- printf("%s(): sem_wait(%s,%i) call\n", __func__, #sem, errcode);\
- while ( sem_wait(&shm->parent_can_read_result) == -1 ) { \
+ /* printf("%s(): sem_wait(%s,%i) call\n", __func__, #sem, errcode); */\
+ while ( sem_wait(sem) == -1 ) { \
switch(errno) { \
case EINTR: \
case EAGAIN: \
@@ -55,7 +58,7 @@
return errcode; \
} \
} \
- printf("%s(): sem_wait(%s,%i) done\n", __func__, #sem, errcode);\
+ /* printf("%s(): sem_wait(%s,%i) done\n", __func__, #sem, errcode); */\
} while(0)
typedef struct {
@@ -85,9 +88,6 @@ int main() {
if (sem_init(&shm->worker_sdl_can_render, 1, 0) < 0) return 3;
if (sem_init(&shm->parent_can_read_result, 1, 0) < 0) return 4;
- shm->ge.raw_target = calloc(FBUF_W*FBUF_H, sizeof(uint32_t));
- if ( shm->ge.raw_target == NULL ) return 5;
-
return do_fork1();
}
@@ -129,6 +129,7 @@ int parent() {
// Main libcaca loop for caca window
shm->ge.framecount=0;
do {
+
// Check canvas size at every frame because of unreliable CACA_EVENT_RESIZE
shm->ge.w = caca_get_canvas_width(shm->ge.cv);
shm->ge.h = caca_get_canvas_height(shm->ge.cv);
@@ -139,18 +140,20 @@ int parent() {
// init / free if scene transition
if ( lastscene != shm->scene ) {
switch(lastscene) {
- case 0: scene00_free(&shm->ge, &shm->s00e); break;
- case 1: scene01_free(&shm->ge, &shm->s01e); break;
- case 2: scene02_free(&shm->ge, &shm->s02e); break;
+ //FIXME call free_gl and free_sdl in respective processes too
+ case 0: scene00_free_caca(&shm->ge, &shm->s00e); break;
+ case 1: scene01_free_caca(&shm->ge, &shm->s01e); break;
+ case 2: scene02_free_caca(&shm->ge, &shm->s02e); break;
}
}
while ( lastscene != shm->scene ) {
shm->ge.sdl_ticks = SDL_GetTicks();
shm->ge.sc_framecount = 0;
switch(shm->scene) {
- case 0: res = scene00_init(&shm->ge, &shm->s00e); break;
- case 1: res = scene01_init(&shm->ge, &shm->s01e); break;
- case 2: res = scene02_init(&shm->ge, &shm->s02e); break;
+ //FIXME call init_gl and init_sdl in respective processes too
+ case 0: res = scene00_init_caca(&shm->ge, &shm->s00e); break;
+ case 1: res = scene01_init_caca(&shm->ge, &shm->s01e); break;
+ case 2: res = scene02_init_caca(&shm->ge, &shm->s02e); break;
}
// If scene init fail, skip to the next one
if (res) SCENE_NEXT; else lastscene = shm->scene;
@@ -304,7 +307,7 @@ int worker_gl() {
SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );
// Initialize OpenGL
- shm->ge.gl_win = SDL_CreateWindow("GL Debug", 0, SDL_WINDOWPOS_CENTERED, FBUF_W, FBUF_H, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
+ shm->ge.gl_win = SDL_CreateWindow("GL Debug", SDL_WINDOWPOS_CENTERED, 0, FBUF_W, FBUF_H, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
shm->ge.gl_ctx = SDL_GL_CreateContext(shm->ge.gl_win);
if ( shm->ge.gl_ctx == NULL ) return 11;
@@ -320,7 +323,6 @@ int worker_gl() {
}
if (res) SCENE_NEXT;
-
// Event handling for the GL window (debug purposes)
while(SDL_PollEvent(&gl_ev)) {
switch(gl_ev.type) {