view old/simple_render/test/LoadTexture/main.cpp @ 539:3bc98f6d31ff draft

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents TaskManager/Test/simple_render/test/LoadTexture/main.cpp@312b535f121e
children
line wrap: on
line source

#include <iostream>
#include "viewer.h"
#include "TaskManager.h"
#include "error.h"

int init(void*, void*);
int finish(void*, void*);


Viewer *screen;
TaskManager *manager;

struct init_arg {
	int bpp;
	int w;
	int h;
};

struct init_arg *initArg;

int init(void *r, void *w) {
	int fd_sdl_init,fd_run;
	HTaskPtr task_sdl_init, task_run;

	__debug("[%s]\n",__FUNCTION__);

	screen = new Viewer(initArg->bpp, initArg->w, initArg->h);

	fd_sdl_init = manager->open("sdl_init");
	fd_run      = manager->open("run");

	task_sdl_init = manager->create_task(fd_sdl_init, 0, 0, 0, NULL);
	task_run      = manager->create_task(fd_run, 0, 0, 0, NULL);

 	task_run->set_depend(task_sdl_init);

	task_sdl_init->spawn();
	task_run->spawn();

	free(initArg);
	return 0;
}

int sdl_init(void *r , void *w) {
	
	__debug("[%s]\n", __FUNCTION__);
	screen->sdl_init();
	return 0;
}

int run(void *r, void *w) {
	
	__debug("[%s]\n", __FUNCTION__);
	screen->run_init();
	return 0;
}

int finish(void *w, void *r)
{
	__debug("[%s]\n", __FUNCTION__);
	delete screen;
	delete manager;
	return 0;
}


int main(int argc, char *argv[]) {
	manager = new TaskManager(1);
	manager->init();

	//task_initialize();
	
	manager->set_symbol("init", (void*)init);
	manager->set_symbol("sdl_init", (void*)sdl_init);
	manager->set_symbol("run", (void*)run);
	manager->set_symbol("finish", (void*)finish);

	int bpp = 0;
	int width = 640;
	int height = 480;

	for(int i = 1; argv[i]; ++i) {
		if (strcmp(argv[i], "-bpp") == 0) {
			bpp = atoi(argv[++i]);
		} 
		if (strcmp(argv[i], "-width") == 0) {
			width = atoi(argv[++i]);
		} 
		if (strcmp(argv[i], "-height") == 0) {
			height = atoi(argv[++i]);
		}
	}
	HTaskPtr task_init;
	int fd_init;
	initArg = new struct init_arg;
	initArg->bpp = bpp;
	initArg->w   = width;
	initArg->h   = height;

	fd_init = manager->open("init");
	task_init = manager->create_task(fd_init, 0, 0, 0, NULL);
	task_init->spawn();
	manager->run();
	finish(NULL, NULL);
	return 0;
}