aboutsummaryrefslogtreecommitdiff
path: root/servers/visual/visual_server_raster.h
diff options
context:
space:
mode:
Diffstat (limited to 'servers/visual/visual_server_raster.h')
-rw-r--r--servers/visual/visual_server_raster.h57
1 files changed, 55 insertions, 2 deletions
diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h
index f6ef4ba6d..ddc30bb2e 100644
--- a/servers/visual/visual_server_raster.h
+++ b/servers/visual/visual_server_raster.h
@@ -87,6 +87,14 @@ class VisualServerRaster : public VisualServer {
Portal() { enabled=true; disable_distance=50; disable_color=Color(); connect_range=0.8; }
};
+ struct BakedLight {
+
+ Rasterizer::BakedLightData data;
+ AABB octree_aabb;
+ Size2i octree_tex_size;
+
+ };
+
struct Camera {
@@ -149,6 +157,7 @@ class VisualServerRaster : public VisualServer {
float draw_range_begin;
float draw_range_end;
float extra_margin;
+ int lightmap_texture_index;
Rasterizer::InstanceData data;
@@ -158,6 +167,8 @@ class VisualServerRaster : public VisualServer {
Set<Instance*> valid_auto_rooms;
Instance *room;
List<Instance*>::Element *RE;
+ Instance *baked_light;
+ List<Instance*>::Element *BLE;
bool exterior;
uint64_t last_render_pass;
@@ -205,6 +216,7 @@ class VisualServerRaster : public VisualServer {
uint64_t last_add_pass;
List<RID>::Element *D; // directional light in scenario
InstanceSet affected;
+ bool enabled;
float dtc; //distance to camera, used for sorting
@@ -213,8 +225,16 @@ class VisualServerRaster : public VisualServer {
D=NULL;
light_set_index=-1;
last_add_pass=0;
+ enabled=true;
}
};
+
+ struct BakedLightInfo {
+
+ BakedLight *baked_light;
+ Transform affine_inverse;
+ List<Instance*> owned_instances;
+ };
struct ParticlesInfo {
@@ -226,6 +246,7 @@ class VisualServerRaster : public VisualServer {
LightInfo *light_info;
ParticlesInfo *particles_info;
PortalInfo * portal_info;
+ BakedLightInfo * baked_light_info;
Instance() {
@@ -244,6 +265,8 @@ class VisualServerRaster : public VisualServer {
data.depth_scale=false;
data.billboard=false;
data.billboard_y=false;
+ data.baked_light=NULL;
+ data.baked_light_octree_xform=NULL;
version=1;
room_info=NULL;
room=NULL;
@@ -255,6 +278,10 @@ class VisualServerRaster : public VisualServer {
draw_range_end=0;
extra_margin=0;
visible_in_all_rooms=false;
+ lightmap_texture_index=-1;
+ baked_light=NULL;
+ baked_light_info=NULL;
+ BLE=NULL;
light_cache_dirty=true;
@@ -270,6 +297,8 @@ class VisualServerRaster : public VisualServer {
memdelete(room_info);
if (portal_info)
memdelete(portal_info);
+ if (baked_light_info)
+ memdelete(baked_light_info);
};
};
@@ -570,6 +599,7 @@ class VisualServerRaster : public VisualServer {
bool light_discard_enabled;
bool shadows_enabled;
int black_margin[4];
+ RID black_image[4];
Vector<Vector3> aabb_random_points;
Vector<Vector3> transformed_aabb_random_points;
@@ -596,7 +626,9 @@ class VisualServerRaster : public VisualServer {
mutable RID_Owner<Room> room_owner;
mutable RID_Owner<Portal> portal_owner;
-
+
+ mutable RID_Owner<BakedLight> baked_light_owner;
+
mutable RID_Owner<Camera> camera_owner;
mutable RID_Owner<Viewport> viewport_owner;
@@ -902,8 +934,19 @@ public:
virtual void portal_set_connect_range(RID p_portal, float p_range);
virtual float portal_get_connect_range(RID p_portal) const;
+ /* BAKED LIGHT */
+
+ virtual RID baked_light_create();
+
+ virtual void baked_light_set_mode(RID p_baked_light,BakedLightMode p_mode);
+ virtual BakedLightMode baked_light_get_mode(RID p_baked_light) const;
+
+ virtual void baked_light_set_octree(RID p_baked_light,const DVector<uint8_t> p_octree);
+ virtual DVector<uint8_t> baked_light_get_octree(RID p_baked_light) const;
+
+ virtual void baked_light_add_lightmap(RID p_baked_light,const RID p_texture,int p_id);
+ virtual void baked_light_clear_lightmaps(RID p_baked_light);
-
/* CAMERA API */
virtual RID camera_create();
@@ -1036,6 +1079,15 @@ public:
virtual float instance_geometry_get_draw_range_max(RID p_instance) const;
virtual float instance_geometry_get_draw_range_min(RID p_instance) const;
+ virtual void instance_geometry_set_baked_light(RID p_instance,RID p_baked_light);
+ virtual RID instance_geometry_get_baked_light(RID p_instance) const;
+
+ virtual void instance_geometry_set_baked_light_texture_index(RID p_instance,int p_tex_id);
+ virtual int instance_geometry_get_baked_light_texture_index(RID p_instance) const;
+
+ virtual void instance_light_set_enabled(RID p_instance,bool p_enabled);
+ virtual bool instance_light_is_enabled(RID p_instance) const;
+
/* CANVAS (2D) */
virtual RID canvas_create();
@@ -1093,6 +1145,7 @@ public:
/* BLACK BARS */
virtual void black_bars_set_margins(int p_left, int p_top, int p_right, int p_bottom);
+ virtual void black_bars_set_images(RID p_left, RID p_top, RID p_right, RID p_bottom);
/* FREE */