+ if(!gfx_init(api))
+ return false;
+
+ sdr_man = new ShaderManager;
+
+ camera = new OrbitCamera;
+
+ // ground_scene = new Scene;
+ // if(!ground_scene->load("data/ground.obj")) {
+ // fprintf(stderr, "Failed to load scene: ground.obj.\n");
+ // return false;
+ // }
+
+ // ground_rend = new Renderer;
+ // ground_rend->camera = camera;
+ // ground_rend->scene = ground_scene;
+
+ // if(!ground_rend->create()) {
+ // fprintf(stderr, "Failed to create default renderer.\n");
+ // return false;
+ // }
+
+ // skybox_tex = gfx_create_texture();
+ // skybox_tex->load("data/cubemap/cubemap.hdr");
+ // ground_rend->set_sky_tex(skybox_tex);
+
+ cow_scene = new Scene;
+ if(!cow_scene->load("data/spot/spot.obj")) {
+ fprintf(stderr, "Failed to load scene: spot.obj.\n");
+ return false;
+ }
+
+ cow_rend = new Renderer;
+ cow_rend->camera = camera;
+ cow_rend->scene = cow_scene;
+
+ if(!cow_rend->create()) {
+ fprintf(stderr, "Failed to create renderer for cows.\n");
+ return false;
+ }
+
+ terrain_tex = gfx_create_texture();
+ if(!terrain_tex->load("data/grass.jpeg")) {
+ fprintf(stderr, "Failed to load ground texture.\n");
+ return false;
+ }
+
+ Image ter_hmap;
+ if(!ter_hmap.load("data/terhmap.png")) {
+ fprintf(stderr, "Failed to load terrain heightmap.\n");
+ return false;