#ifndef GLOBJ_H
#define GLOBJ_H

#include "glcam.h"

/* 
   le but de globj : la scène doit contenir un tableau (ou liste, on s'en
   fiche) contenant des globj. ensuite, pour chaque globj, il suffit d'
   appeler drawfunc(data) afin de lui demander de se dessiner. on peut
   imaginer d'ajouter ultérieurement une matrice de transformation, ou
   des informations concernant le textouring etc. 

   dans chaque .so avec un obj on doit trouver une variable "globj_class_TOTO"
   avec TOTO = nom du .so ; on execute la initfunc. puis la factory sert a
   creer des objets.
*/

typedef struct globj_s
{
  void     (*drawfunc)(struct globj_s*, glcam_t*) ;
  void     (*destructor)(struct globj_s*) ;
  void     (*maptosurface)(struct globj_s*, vector*) ;
  char*    name ;
  void*    data ;
} globj_t, *globj_p ;

typedef struct globj_class_s
{
  void (*initfunc)(void) ;
  globj_t* (*factory)(void) ;
  char* name ;
  void* data ;
} globj_class_t, *globj_class_p ;

void     globj_draw        (globj_t*, glcam_t*) ;
globj_t* globj_newinstance (globj_class_t*) ;
void     globj_delete      (globj_t*) ;

#endif
