diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2019-09-07 00:32:19 +0200 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2019-09-07 00:32:19 +0200 |
commit | df3ce9eb9e0d8633cdb32a0106a5aa1ca9300e2b (patch) | |
tree | 38ded5717f8f9d48060e3bbdd8daa929ecbbd090 /src/main.c | |
parent | 5fc35fb36f6658dc486bf2c5e05510c575f3efec (diff) | |
download | demoscene-eo-df3ce9eb9e0d8633cdb32a0106a5aa1ca9300e2b.tar.gz demoscene-eo-df3ce9eb9e0d8633cdb32a0106a5aa1ca9300e2b.tar.bz2 demoscene-eo-df3ce9eb9e0d8633cdb32a0106a5aa1ca9300e2b.zip |
Multi-process is quite there. Need to call init_sdl() and init_gl()..
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 34 |
1 files changed, 18 insertions, 16 deletions
@@ -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) { |