/* Simple Scene Graph ------------------------------------------------------- */ #ifndef __SSG_H__ #define __SSG_H__ #ifdef __APPLE__ #include #include #else #include #include #endif #include enum { SSG_NODE_RENDER, SSG_NODE_SHADER, }; typedef struct SSG_Node SSG_Node; typedef struct SSG_Viewer SSG_Viewer; typedef struct SSG_Shader SSG_Shader; typedef void render_func_t(SSG_Node *n); SSG_Node * ssg_node_create(render_func_t *render, int type, void *data); void ssg_node_delete(SSG_Node *n); void * ssg_node_data(SSG_Node *n); void ssg_node_connect(SSG_Node *parent, SSG_Node *child); void ssg_node_render(SSG_Node *n); SSG_Viewer *ssg_viewer_create(const char *title, size_t width, size_t height); void ssg_viewer_initialize(SSG_Viewer *v, int *argc, char *argv[]); void ssg_viewer_show(SSG_Viewer *v, SSG_Node *n); void ssg_cube_render(SSG_Node *n); #define ssg_cube_create() ssg_node_create(ssg_cube_render, SSG_NODE_RENDER, NULL) void ssg_teapot_render(SSG_Node *n); #define ssg_teapot_create() ssg_node_create(ssg_teapot_render, SSG_NODE_RENDER, NULL) SSG_Shader *ssg_shader_create(const char *vert_src_path, const char *frag_src_path); GLuint ssg_shader_program(SSG_Shader *s); #endif /* vim: set sts=4 sw=4 ts=8 ft=cpp: ----------------------------------------- */