summaryrefslogtreecommitdiff
path: root/servers/visual
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2016-10-31 08:47:46 -0300
committerJuan Linietsky <reduzio@gmail.com>2016-10-31 08:47:46 -0300
commit6b2a27bbe5fa112365fc88b9b4678a61293bcb53 (patch)
tree9b0f4a0f1a9eff2aae3b5a69758b20c99aba8b05 /servers/visual
parentacfa606915416a85106817974e5ba2ec3518c203 (diff)
shadow atlas allocation (work in progress)
Diffstat (limited to 'servers/visual')
-rw-r--r--servers/visual/rasterizer.h4
-rw-r--r--servers/visual/visual_server_scene.cpp4
2 files changed, 8 insertions, 0 deletions
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h
index b61a2d0a46..feaac38acb 100644
--- a/servers/visual/rasterizer.h
+++ b/servers/visual/rasterizer.h
@@ -109,9 +109,13 @@ public:
virtual RID light_instance_create(RID p_light)=0;
virtual void light_instance_set_transform(RID p_light_instance,const Transform& p_transform)=0;
+ virtual void light_instance_mark_visible(RID p_light_instance)=0;
+
virtual void render_scene(const Transform& p_cam_transform,CameraMatrix& p_cam_projection,bool p_cam_ortogonal,InstanceBase** p_cull_result,int p_cull_count,RID* p_light_cull_result,int p_light_cull_count,RID* p_directional_lights,int p_directional_light_count,RID p_environment)=0;
+ virtual void set_scene_pass(uint64_t p_pass)=0;
+
virtual bool free(RID p_rid)=0;
virtual ~RasterizerScene() {}
diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp
index d958ea4bdb..e7900bdcc9 100644
--- a/servers/visual/visual_server_scene.cpp
+++ b/servers/visual/visual_server_scene.cpp
@@ -1107,6 +1107,8 @@ void VisualServerScene::render_camera(RID p_camera, RID p_scenario,Size2 p_viewp
render_pass++;
uint32_t camera_layer_mask=camera->visible_layers;
+ VSG::scene_render->set_scene_pass(render_pass);
+
/* STEP 1 - SETUP CAMERA */
CameraMatrix camera_matrix;
@@ -1266,6 +1268,7 @@ void VisualServerScene::render_camera(RID p_camera, RID p_scenario,Size2 p_viewp
//do not add this light if no geometry is affected by it..
light_cull_result[light_cull_count]=ins;
light_instance_cull_result[light_cull_count]=light->instance;
+ VSG::scene_render->light_instance_mark_visible(light->instance); //mark it visible for shadow allocation later
light_cull_count++;
}
@@ -1488,6 +1491,7 @@ void VisualServerScene::render_camera(RID p_camera, RID p_scenario,Size2 p_viewp
#endif
+
VSG::scene_render->render_scene(camera->transform, camera_matrix,ortho,(RasterizerScene::InstanceBase**)instance_cull_result,cull_count,light_instance_cull_result,light_cull_count,directional_light_ptr,directional_light_count,environment);
}