summaryrefslogtreecommitdiffstats
path: root/servers/visual/visual_server_raster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'servers/visual/visual_server_raster.cpp')
-rw-r--r--servers/visual/visual_server_raster.cpp438
1 files changed, 219 insertions, 219 deletions
diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp
index ec468b5e04..c9695b7859 100644
--- a/servers/visual/visual_server_raster.cpp
+++ b/servers/visual/visual_server_raster.cpp
@@ -45,7 +45,7 @@ BalloonAllocator<> *VisualServerRaster::OctreeAllocator::allocator=NULL;
RID VisualServerRaster::texture_create() {
-
+
return rasterizer->texture_create();
}
@@ -340,7 +340,7 @@ VisualServerRaster::FixedMaterialLightShader VisualServerRaster::fixed_material_
-/* MESH API */
+/* MESH API */
RID VisualServerRaster::mesh_create() {
@@ -625,14 +625,14 @@ RID VisualServerRaster::particles_create() {
void VisualServerRaster::particles_set_amount(RID p_particles, int p_amount) {
VS_CHANGED;
- rasterizer->particles_set_amount(p_particles,p_amount);
+ rasterizer->particles_set_amount(p_particles,p_amount);
}
int VisualServerRaster::particles_get_amount(RID p_particles) const {
return rasterizer->particles_get_amount(p_particles);
}
-
+
void VisualServerRaster::particles_set_emitting(RID p_particles, bool p_emitting) {
VS_CHANGED;
rasterizer->particles_set_emitting(p_particles,p_emitting);
@@ -641,7 +641,7 @@ bool VisualServerRaster::particles_is_emitting(RID p_particles) const {
return rasterizer->particles_is_emitting(p_particles);
}
-
+
void VisualServerRaster::particles_set_visibility_aabb(RID p_particles, const AABB& p_visibility) {
VS_CHANGED;
rasterizer->particles_set_visibility_aabb(p_particles, p_visibility);
@@ -650,7 +650,7 @@ AABB VisualServerRaster::particles_get_visibility_aabb(RID p_particles) const {
return rasterizer->particles_get_visibility_aabb(p_particles);
}
-
+
void VisualServerRaster::particles_set_emission_half_extents(RID p_particles, const Vector3& p_half_extents) {
VS_CHANGED;
rasterizer->particles_set_emission_half_extents(p_particles,p_half_extents);
@@ -688,7 +688,7 @@ Vector3 VisualServerRaster::particles_get_gravity_normal(RID p_particles) const
return rasterizer->particles_get_gravity_normal(p_particles);
}
-
+
void VisualServerRaster::particles_set_variable(RID p_particles, ParticleVariable p_variable,float p_value) {
VS_CHANGED;
rasterizer->particles_set_variable(p_particles,p_variable,p_value);
@@ -770,7 +770,7 @@ RID VisualServerRaster::particles_get_material(RID p_particles) const {
return rasterizer->particles_get_material(p_particles);
}
-
+
void VisualServerRaster::particles_set_height_from_velocity(RID p_particles, bool p_enable) {
@@ -812,33 +812,33 @@ void VisualServerRaster::light_set_color(RID p_light,LightColor p_type, const Co
}
Color VisualServerRaster::light_get_color(RID p_light,LightColor p_type) const {
-
+
return rasterizer->light_get_color(p_light,p_type);
-
+
}
void VisualServerRaster::light_set_shadow(RID p_light,bool p_enabled) {
VS_CHANGED;
- rasterizer->light_set_shadow(p_light,p_enabled);
+ rasterizer->light_set_shadow(p_light,p_enabled);
}
bool VisualServerRaster::light_has_shadow(RID p_light) const {
return rasterizer->light_has_shadow(p_light);
-}
+}
void VisualServerRaster::light_set_volumetric(RID p_light,bool p_enabled) {
VS_CHANGED;
- rasterizer->light_set_volumetric(p_light,p_enabled);
+ rasterizer->light_set_volumetric(p_light,p_enabled);
}
bool VisualServerRaster::light_is_volumetric(RID p_light) const {
return rasterizer->light_is_volumetric(p_light);
-}
+}
void VisualServerRaster::light_set_projector(RID p_light,RID p_texture) {
VS_CHANGED;
@@ -854,13 +854,13 @@ void VisualServerRaster::light_set_param(RID p_light, LightParam p_var, float p_
VS_CHANGED;
rasterizer->light_set_var(p_light,p_var,p_value);
_dependency_queue_update(p_light,true);
-
+
}
float VisualServerRaster::light_get_param(RID p_light, LightParam p_var) const {
-
- return rasterizer->light_get_var(p_light,p_var);
+
+ return rasterizer->light_get_var(p_light,p_var);
}
void VisualServerRaster::light_set_operator(RID p_light,LightOp p_op) {
@@ -940,7 +940,7 @@ Transform VisualServerRaster::skeleton_bone_get_transform(RID p_skeleton,int p_b
return rasterizer->skeleton_bone_get_transform(p_skeleton,p_bone);
}
-
+
/* VISIBILITY API */
@@ -970,7 +970,7 @@ BSP_Tree VisualServerRaster::room_get_bounds(RID p_room) const {
return room->bounds;
}
-
+
/* PORTAL API */
RID VisualServerRaster::portal_create() {
@@ -1422,7 +1422,7 @@ void VisualServerRaster::camera_set_perspective(RID p_camera,float p_fovy_degree
camera->fov=p_fovy_degrees;
camera->znear=p_z_near;
camera->zfar=p_z_far;
-
+
}
void VisualServerRaster::camera_set_orthogonal(RID p_camera,float p_size, float p_z_near, float p_z_far) {
@@ -1440,7 +1440,7 @@ void VisualServerRaster::camera_set_transform(RID p_camera,const Transform& p_tr
Camera *camera = camera_owner.get( p_camera );
ERR_FAIL_COND(!camera);
camera->transform=p_transform.orthonormalized();
-
+
}
@@ -1502,7 +1502,7 @@ RID VisualServerRaster::viewport_create() {
Viewport *viewport = memnew( Viewport );
RID rid = viewport_owner.make_rid( viewport );
ERR_FAIL_COND_V( !rid.is_valid(), rid );
-
+
viewport->self=rid;
viewport->hide_scenario=false;
viewport->hide_canvas=false;
@@ -1670,7 +1670,7 @@ void VisualServerRaster::viewport_set_rect(RID p_viewport,const ViewportRect& p_
viewport = viewport_owner.get( p_viewport );
ERR_FAIL_COND(!viewport);
-
+
viewport->rect=p_rect;
if (viewport->render_target.is_valid()) {
rasterizer->render_target_set_size(viewport->render_target,viewport->rect.width,viewport->rect.height);
@@ -1684,7 +1684,7 @@ VisualServer::ViewportRect VisualServerRaster::viewport_get_rect(RID p_viewport)
viewport = viewport_owner.get( p_viewport );
ERR_FAIL_COND_V(!viewport, ViewportRect());
-
+
return viewport->rect;
}
@@ -1736,11 +1736,11 @@ void VisualServerRaster::viewport_attach_camera(RID p_viewport,RID p_camera) {
-
+
if (p_camera.is_valid()) {
ERR_FAIL_COND(!camera_owner.owns(p_camera));
- // a camera
+ // a camera
viewport->camera=p_camera;
} else {
viewport->camera=RID();
@@ -1773,7 +1773,7 @@ RID VisualServerRaster::viewport_get_attached_camera(RID p_viewport) const {
viewport = viewport_owner.get( p_viewport );
ERR_FAIL_COND_V(!viewport, RID());
-
+
return viewport->camera;
}
@@ -1862,7 +1862,7 @@ void VisualServerRaster::viewport_remove_canvas(RID p_viewport,RID p_canvas) {
viewport = viewport_owner.get( p_viewport );
ERR_FAIL_COND(!viewport);
- Canvas *canvas = canvas_owner.get( p_canvas );
+ Canvas *canvas = canvas_owner.get( p_canvas );
ERR_FAIL_COND(!canvas);
@@ -1894,7 +1894,7 @@ void VisualServerRaster::viewport_set_canvas_layer(RID p_viewport,RID p_canvas,i
}
E->get().layer=p_layer;
-
+
}
void VisualServerRaster::viewport_set_transparent_background(RID p_viewport,bool p_enabled) {
@@ -1916,13 +1916,13 @@ bool VisualServerRaster::viewport_has_transparent_background(RID p_viewport) con
RID VisualServerRaster::viewport_get_scenario(RID p_viewport) const {
-
+
const Viewport *viewport=NULL;
viewport = viewport_owner.get( p_viewport );
ERR_FAIL_COND_V(!viewport, RID());
-
- return viewport->scenario;
+
+ return viewport->scenario;
}
@@ -1976,38 +1976,38 @@ Variant VisualServerRaster::environment_fx_get_param(RID p_env,EnvironmentFxPara
void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb) {
Map< RID, Set<RID> >::Element * E = instance_dependency_map.find( p_rid );
-
+
if (!E)
return;
-
-
+
+
Set<RID>::Element *I = E->get().front();
-
+
while(I) {
-
+
Instance *ins = instance_owner.get( I->get() );
_instance_queue_update( ins , p_update_aabb );
-
+
I = I->next();
}
-
+
}
void VisualServerRaster::_instance_queue_update(Instance *p_instance,bool p_update_aabb) {
if (p_update_aabb)
p_instance->update_aabb=true;
-
+
if (p_instance->update)
return;
p_instance->update_next=instance_update_list;
instance_update_list=p_instance;
p_instance->update=true;
-
+
}
RID VisualServerRaster::scenario_create() {
-
+
Scenario *scenario = memnew( Scenario );
ERR_FAIL_COND_V(!scenario,RID());
RID scenario_rid = scenario_owner.make_rid( scenario );
@@ -2449,10 +2449,10 @@ void VisualServerRaster::instance_set_transform(RID p_instance, const Transform&
VS_CHANGED;
Instance *instance = instance_owner.get( p_instance );
ERR_FAIL_COND( !instance );
-
+
if (p_transform==instance->data.transform) // must improve somehow
return;
-
+
instance->data.transform=p_transform;
if (instance->base_type==INSTANCE_LIGHT)
instance->data.transform.orthonormalize();
@@ -2464,7 +2464,7 @@ Transform VisualServerRaster::instance_get_transform(RID p_instance) const {
Instance *instance = instance_owner.get( p_instance );
ERR_FAIL_COND_V( !instance, Transform() );
-
+
return instance->data.transform;
}
@@ -2574,7 +2574,7 @@ void VisualServerRaster::instance_set_room( RID p_instance, RID p_room ) {
ERR_EXPLAIN("Cycle in room assignment");
ERR_FAIL_COND( parent == room );
parent=parent->room;
- }
+ }
}
if ( (1<<instance->base_type) & INSTANCE_GEOMETRY_MASK ) {
@@ -2634,45 +2634,45 @@ real_t VisualServerRaster::instance_get_extra_visibility_margin( RID p_instance
Vector<RID> VisualServerRaster::instances_cull_aabb(const AABB& p_aabb, RID p_scenario) const {
-
+
Vector<RID> instances;
Scenario *scenario=scenario_owner.get(p_scenario);
- ERR_FAIL_COND_V(!scenario,instances);
-
+ ERR_FAIL_COND_V(!scenario,instances);
+
const_cast<VisualServerRaster*>(this)->_update_instances(); // check dirty instances before culling
-
+
int culled=0;
Instance *cull[1024];
culled=scenario->octree.cull_AABB(p_aabb,cull,1024);
-
+
for (int i=0;i<culled;i++) {
-
+
Instance *instance=cull[i];
ERR_CONTINUE(!instance);
instances.push_back(instance->self);
}
-
+
return instances;
}
Vector<RID> VisualServerRaster::instances_cull_ray(const Vector3& p_from, const Vector3& p_to, RID p_scenario) const{
Vector<RID> instances;
Scenario *scenario=scenario_owner.get(p_scenario);
- ERR_FAIL_COND_V(!scenario,instances);
+ ERR_FAIL_COND_V(!scenario,instances);
const_cast<VisualServerRaster*>(this)->_update_instances(); // check dirty instances before culling
-
+
int culled=0;
- Instance *cull[1024];
+ Instance *cull[1024];
culled=scenario->octree.cull_segment(p_from,p_to*10000,cull,1024);
for (int i=0;i<culled;i++) {
-
+
Instance *instance=cull[i];
ERR_CONTINUE(!instance);
instances.push_back(instance->self);
}
-
+
return instances;
}
@@ -2680,22 +2680,22 @@ Vector<RID> VisualServerRaster::instances_cull_convex(const Vector<Plane>& p_con
Vector<RID> instances;
Scenario *scenario=scenario_owner.get(p_scenario);
- ERR_FAIL_COND_V(!scenario,instances);
+ ERR_FAIL_COND_V(!scenario,instances);
const_cast<VisualServerRaster*>(this)->_update_instances(); // check dirty instances before culling
-
+
int culled=0;
- Instance *cull[1024];
-
+ Instance *cull[1024];
+
culled=scenario->octree.cull_convex(p_convex,cull,1024);
-
+
for (int i=0;i<culled;i++) {
-
+
Instance *instance=cull[i];
- ERR_CONTINUE(!instance);
+ ERR_CONTINUE(!instance);
instances.push_back(instance->self);
}
-
+
return instances;
}
@@ -2976,9 +2976,9 @@ void VisualServerRaster::_update_instance(Instance *p_instance) {
p_instance->version++;
if (p_instance->base_type == INSTANCE_LIGHT) {
-
+
rasterizer->light_instance_set_transform( p_instance->light_info->instance, p_instance->data.transform );
-
+
}
if (p_instance->aabb.has_no_surface())
@@ -2986,10 +2986,10 @@ void VisualServerRaster::_update_instance(Instance *p_instance) {
if (p_instance->base_type == INSTANCE_PARTICLES) {
-
+
rasterizer->particles_instance_set_transform( p_instance->particles_info->instance, p_instance->data.transform );
}
-
+
if ((1<<p_instance->base_type)&INSTANCE_GEOMETRY_MASK) {
@@ -3041,7 +3041,7 @@ void VisualServerRaster::_update_instance(Instance *p_instance) {
else
portal_aabb.expand_to(point);
}
-
+
portal_aabb.grow_by(p_instance->portal_info->portal->connect_range);
new_aabb = portal_aabb;
@@ -3117,7 +3117,7 @@ void VisualServerRaster::_update_instance(Instance *p_instance) {
}
if (p_instance->base_type==INSTANCE_PORTAL) {
-
+
_portal_attempt_connect(p_instance);
}
@@ -3138,18 +3138,18 @@ void VisualServerRaster::_update_instance(Instance *p_instance) {
void VisualServerRaster::_update_instance_aabb(Instance *p_instance) {
AABB new_aabb;
-
+
ERR_FAIL_COND(p_instance->base_type!=INSTANCE_NONE && !p_instance->base_rid.is_valid());
-
+
switch(p_instance->base_type) {
case VisualServer::INSTANCE_NONE: {
// do nothing
} break;
case VisualServer::INSTANCE_MESH: {
-
+
new_aabb = rasterizer->mesh_get_aabb(p_instance->base_rid,p_instance->data.skeleton);
-
+
} break;
case VisualServer::INSTANCE_MULTIMESH: {
@@ -3163,41 +3163,41 @@ void VisualServerRaster::_update_instance_aabb(Instance *p_instance) {
} break;
case VisualServer::INSTANCE_PARTICLES: {
-
+
new_aabb = rasterizer->particles_get_aabb(p_instance->base_rid);
-
+
} break;
case VisualServer::INSTANCE_LIGHT: {
-
+
new_aabb = rasterizer->light_get_aabb(p_instance->base_rid);
-
+
} break;
case VisualServer::INSTANCE_ROOM: {
-
+
Room *room = room_owner.get( p_instance->base_rid );
ERR_FAIL_COND(!room);
new_aabb=room->bounds.get_aabb();
-
+
} break;
case VisualServer::INSTANCE_PORTAL: {
-
+
Portal *portal = portal_owner.get( p_instance->base_rid );
- ERR_FAIL_COND(!portal);
+ ERR_FAIL_COND(!portal);
for (int i=0;i<portal->shape.size();i++) {
-
+
Vector3 point( portal->shape[i].x, portal->shape[i].y, 0 );
if (i==0) {
-
+
new_aabb.pos=point;
new_aabb.size.z=0.01; // make it not flat for octree
} else {
-
+
new_aabb.expand_to(point);
}
}
- } break;
+ } break;
case VisualServer::INSTANCE_BAKED_LIGHT: {
BakedLight *baked_light = baked_light_owner.get( p_instance->base_rid );
@@ -3220,24 +3220,24 @@ void VisualServerRaster::_update_instance_aabb(Instance *p_instance) {
if (p_instance->extra_margin)
new_aabb.grow_by(p_instance->extra_margin);
-
+
p_instance->aabb=new_aabb;
-
+
}
void VisualServerRaster::_update_instances() {
while(instance_update_list) {
-
+
Instance *instance=instance_update_list;
instance_update_list=instance_update_list->update_next;
-
+
if (instance->update_aabb)
_update_instance_aabb(instance);
-
+
_update_instance(instance);
-
+
instance->update=false;
instance->update_aabb=false;
instance->update_next=0;
@@ -3277,7 +3277,7 @@ RID VisualServerRaster::canvas_create() {
Canvas * canvas = memnew( Canvas );
ERR_FAIL_COND_V(!canvas,RID());
RID rid = canvas_owner.make_rid( canvas );
-
+
return rid;
}
@@ -3317,10 +3317,10 @@ void VisualServerRaster::canvas_set_modulate(RID p_canvas,const Color& p_color)
RID VisualServerRaster::canvas_item_create() {
-
+
CanvasItem *canvas_item = memnew( CanvasItem );
ERR_FAIL_COND_V(!canvas_item,RID());
-
+
return canvas_item_owner.make_rid( canvas_item );
}
@@ -3448,7 +3448,7 @@ void VisualServerRaster::canvas_item_set_rect(RID p_item, const Rect2& p_rect) {
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
canvas_item->rect=p_rect;
}*/
@@ -3456,7 +3456,7 @@ void VisualServerRaster::canvas_item_set_clip(RID p_item, bool p_clip) {
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
canvas_item->clip=p_clip;
}
@@ -3543,7 +3543,7 @@ void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from,
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
CanvasItem::CommandLine * line = memnew( CanvasItem::CommandLine );
ERR_FAIL_COND(!line);
line->color=p_color;
@@ -3552,15 +3552,15 @@ void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from,
line->width=p_width;
canvas_item->rect_dirty=true;
-
- canvas_item->commands.push_back(line);
+
+ canvas_item->commands.push_back(line);
}
void VisualServerRaster::canvas_item_add_rect(RID p_item, const Rect2& p_rect, const Color& p_color) {
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
CanvasItem::CommandRect * rect = memnew( CanvasItem::CommandRect );
ERR_FAIL_COND(!rect);
rect->modulate=p_color;
@@ -3590,7 +3590,7 @@ void VisualServerRaster::canvas_item_add_texture_rect(RID p_item, const Rect2& p
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
CanvasItem::CommandRect * rect = memnew( CanvasItem::CommandRect );
ERR_FAIL_COND(!rect);
rect->modulate=p_modulate;
@@ -3622,7 +3622,7 @@ void VisualServerRaster::canvas_item_add_texture_rect_region(RID p_item, const R
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
CanvasItem::CommandRect * rect = memnew( CanvasItem::CommandRect );
ERR_FAIL_COND(!rect);
rect->modulate=p_modulate;
@@ -3648,8 +3648,8 @@ void VisualServerRaster::canvas_item_add_texture_rect_region(RID p_item, const R
canvas_item->rect_dirty=true;
- canvas_item->commands.push_back(rect);
-
+ canvas_item->commands.push_back(rect);
+
}
void VisualServerRaster::canvas_item_add_style_box(RID p_item, const Rect2& p_rect, RID p_texture,const Vector2& p_topleft, const Vector2& p_bottomright, bool p_draw_center,const Color& p_modulate) {
@@ -3657,7 +3657,7 @@ void VisualServerRaster::canvas_item_add_style_box(RID p_item, const Rect2& p_re
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
CanvasItem::CommandStyle * style = memnew( CanvasItem::CommandStyle );
ERR_FAIL_COND(!style);
style->texture=p_texture;
@@ -3670,13 +3670,13 @@ void VisualServerRaster::canvas_item_add_style_box(RID p_item, const Rect2& p_re
style->margin[MARGIN_BOTTOM]=p_bottomright.y;
canvas_item->rect_dirty=true;
- canvas_item->commands.push_back(style);
+ canvas_item->commands.push_back(style);
}
void VisualServerRaster::canvas_item_add_primitive(RID p_item,const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width) {
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
+
CanvasItem::CommandPrimitive * prim = memnew( CanvasItem::CommandPrimitive );
ERR_FAIL_COND(!prim);
prim->texture=p_texture;
@@ -3686,7 +3686,7 @@ void VisualServerRaster::canvas_item_add_primitive(RID p_item,const Vector<Point
prim->width=p_width;
canvas_item->rect_dirty=true;
- canvas_item->commands.push_back(prim);
+ canvas_item->commands.push_back(prim);
}
void VisualServerRaster::canvas_item_add_polygon(RID p_item, const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture) {
@@ -3907,10 +3907,10 @@ void VisualServerRaster::canvas_item_clear(RID p_item) {
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
-
-
+
+
canvas_item->clear();
-
+
}
void VisualServerRaster::canvas_item_raise(RID p_item) {
@@ -4398,7 +4398,7 @@ void VisualServerRaster::black_bars_set_images(RID p_left, RID p_top, RID p_righ
void VisualServerRaster::_free_attached_instances(RID p_rid,bool p_free_scenario) {
Map< RID, Set<RID> >::Element * E = instance_dependency_map.find( p_rid );
-
+
if (E) {
// has instances
while( E->get().size() ) {
@@ -4407,10 +4407,10 @@ void VisualServerRaster::_free_attached_instances(RID p_rid,bool p_free_scenario
instance_set_scenario( E->get().front()->get(), RID() );
else
instance_set_base( E->get().front()->get(), RID() );
-
+
}
}
-
+
instance_dependency_map.erase(p_rid);
}
@@ -4452,7 +4452,7 @@ void VisualServerRaster::free( RID p_rid ) {
VS_CHANGED;
if (rasterizer->is_texture(p_rid) || rasterizer->is_material(p_rid) || rasterizer->is_shader(p_rid) || rasterizer->is_environment(p_rid)) {
-
+
rasterizer->free(p_rid);
} else if (rasterizer->is_skeleton(p_rid)) {
@@ -4470,14 +4470,14 @@ void VisualServerRaster::free( RID p_rid ) {
rasterizer->free(p_rid);
} else if (rasterizer->is_mesh(p_rid) || rasterizer->is_multimesh(p_rid) || rasterizer->is_light(p_rid) || rasterizer->is_particles(p_rid) || rasterizer->is_immediate(p_rid)) {
//delete the resource
-
+
_free_attached_instances(p_rid);
rasterizer->free(p_rid);
} else if (room_owner.owns(p_rid)) {
_free_attached_instances(p_rid);
- Room *room = room_owner.get(p_rid);
- ERR_FAIL_COND(!room);
+ Room *room = room_owner.get(p_rid);
+ ERR_FAIL_COND(!room);
room_owner.free(p_rid);
memdelete(room);
@@ -4515,16 +4515,16 @@ void VisualServerRaster::free( RID p_rid ) {
} else if (camera_owner.owns(p_rid)) {
// delete te camera
-
+
Camera *camera = camera_owner.get(p_rid);
ERR_FAIL_COND(!camera);
-
+
camera_owner.free( p_rid );
memdelete(camera);
-
+
} else if (viewport_owner.owns(p_rid)) {
// delete the viewport
-
+
Viewport *viewport = viewport_owner.get( p_rid );
ERR_FAIL_COND(!viewport);
@@ -4549,15 +4549,15 @@ void VisualServerRaster::free( RID p_rid ) {
viewport->canvas_map.erase(viewport->canvas_map.front());
}
-
- viewport_owner.free(p_rid);
+
+ viewport_owner.free(p_rid);
memdelete(viewport);
-
+
} else if (instance_owner.owns(p_rid)) {
// delete the instance
-
+
_update_instances(); // be sure
-
+
Instance *instance = instance_owner.get(p_rid);
ERR_FAIL_COND(!instance);
@@ -4572,9 +4572,9 @@ void VisualServerRaster::free( RID p_rid ) {
instance_owner.free(p_rid);
memdelete(instance);
-
+
} else if (canvas_owner.owns(p_rid)) {
-
+
Canvas *canvas = canvas_owner.get(p_rid);
ERR_FAIL_COND(!canvas);
@@ -4606,11 +4606,11 @@ void VisualServerRaster::free( RID p_rid ) {
}
canvas_owner.free( p_rid );
-
+
memdelete( canvas );
-
+
} else if (canvas_item_owner.owns(p_rid)) {
-
+
CanvasItem *canvas_item = canvas_item_owner.get(p_rid);
ERR_FAIL_COND(!canvas_item);
@@ -4638,7 +4638,7 @@ void VisualServerRaster::free( RID p_rid ) {
}
canvas_item_owner.free( p_rid );
-
+
memdelete( canvas_item );
} else if (canvas_item_material_owner.owns(p_rid)) {
@@ -4710,22 +4710,22 @@ void VisualServerRaster::free( RID p_rid ) {
memdelete(occluder_poly);
} else if (scenario_owner.owns(p_rid)) {
-
+
Scenario *scenario=scenario_owner.get(p_rid);
ERR_FAIL_COND(!scenario);
-
+
_update_instances(); // be sure
_free_attached_instances(p_rid,true);
-
+
//rasterizer->free( scenario->environment );
scenario_owner.free(p_rid);
memdelete(scenario);
-
+
} else {
-
+
ERR_FAIL();
}
-
+
}
@@ -4747,7 +4747,7 @@ void VisualServerRaster::_instance_draw(Instance *p_instance) {
switch(p_instance->base_type) {
-
+
case INSTANCE_MESH: {
const float *morphs = NULL;
if (!p_instance->data.morph_values.empty()) {
@@ -4755,7 +4755,7 @@ void VisualServerRaster::_instance_draw(Instance *p_instance) {
}
rasterizer->add_mesh(p_instance->base_rid, &p_instance->data);
- } break;
+ } break;
case INSTANCE_MULTIMESH: {
rasterizer->add_multimesh(p_instance->base_rid, &p_instance->data);
} break;
@@ -4865,17 +4865,17 @@ Vector<Plane> VisualServerRaster::_camera_generate_orthogonal_planes(Instance *p
void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Scenario *p_scenario,Camera *p_camera,const CullRange& p_cull_range) {
int splits = rasterizer->light_instance_get_shadow_passes( p_light->light_info->instance );
-
+
float split_weight=rasterizer->light_directional_get_shadow_param(p_light->base_rid,LIGHT_DIRECTIONAL_SHADOW_PARAM_PSSM_SPLIT_WEIGHT);
float distances[5];
float texsize=rasterizer->light_instance_get_shadow_size( p_light->light_info->instance );
-
+
// float cull_min=p_cull_range.min;
//float cull_max=p_cull_range.max;
-
+
bool overlap = rasterizer->light_instance_get_pssm_shadow_overlap(p_light->light_info->instance);
float cull_min=p_camera->znear;
@@ -4883,7 +4883,7 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
float max_dist = rasterizer->light_directional_get_shadow_param(p_light->base_rid,VS::LIGHT_DIRECTIONAL_SHADOW_PARAM_MAX_DISTANCE);
if (max_dist>0.0)
cull_max=MIN(cull_max,max_dist);
-
+
for(int i = 0; i < splits; i++) {
float idm = i / (float)splits;
float lg = cull_min * Math::pow(cull_max/cull_min, idm);
@@ -4894,16 +4894,16 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
distances[0]=cull_min;
distances[splits]=cull_max;
-
+
for (int i=0;i<splits;i++) {
-
+
// setup a camera matrix for that range!
CameraMatrix camera_matrix;
-
+
switch(p_camera->type) {
-
+
case Camera::ORTHOGONAL: {
-
+
camera_matrix.set_orthogonal(
p_camera->size,
viewport_rect.width / (float)viewport_rect.height,
@@ -4914,7 +4914,7 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
);
} break;
case Camera::PERSPECTIVE: {
-
+
camera_matrix.set_perspective(
p_camera->fov,
@@ -4924,18 +4924,18 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
p_camera->vaspect
);
-
- } break;
- }
-
+
+ } break;
+ }
+
//obtain the frustum endpoints
-
+
Vector3 endpoints[8]; // frustum plane endpoints
bool res = camera_matrix.get_endpoints(p_camera->transform,endpoints);
ERR_CONTINUE(!res);
-
+
// obtain the light frustm ranges (given endpoints)
-
+
Vector3 x_vec=p_light->data.transform.basis.get_axis( Vector3::AXIS_X ).normalized();
Vector3 y_vec=p_light->data.transform.basis.get_axis( Vector3::AXIS_Y ).normalized();
Vector3 z_vec=p_light->data.transform.basis.get_axis( Vector3::AXIS_Z ).normalized();
@@ -4952,27 +4952,27 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
//used for culling
for(int j=0;j<8;j++) {
-
+
float d_x=x_vec.dot(endpoints[j]);
float d_y=y_vec.dot(endpoints[j]);
float d_z=z_vec.dot(endpoints[j]);
-
+
if (j==0 || d_x<x_min)
x_min=d_x;
if (j==0 || d_x>x_max)
x_max=d_x;
-
+
if (j==0 || d_y<y_min)
y_min=d_y;
if (j==0 || d_y>y_max)
y_max=d_y;
-
+
if (j==0 || d_z<z_min)
z_min=d_z;
if (j==0 || d_z>z_max)
z_max=d_z;
-
-
+
+
}
@@ -5024,10 +5024,10 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
}
//now that we now all ranges, we can proceed to make the light frustum planes, for culling octree
-
+
Vector<Plane> light_frustum_planes;
light_frustum_planes.resize(6);
-
+
//right/left
light_frustum_planes[0]=Plane( x_vec, x_max );
light_frustum_planes[1]=Plane( -x_vec, -x_min );
@@ -5035,14 +5035,14 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
light_frustum_planes[2]=Plane( y_vec, y_max );
light_frustum_planes[3]=Plane( -y_vec, -y_min );
//near/far
- light_frustum_planes[4]=Plane( z_vec, z_max+1e6 );
- light_frustum_planes[5]=Plane( -z_vec, -z_min ); // z_min is ok, since casters further than far-light plane are not needed
-
+ light_frustum_planes[4]=Plane( z_vec, z_max+1e6 );
+ light_frustum_planes[5]=Plane( -z_vec, -z_min ); // z_min is ok, since casters further than far-light plane are not needed
+
int caster_cull_count = p_scenario->octree.cull_convex(light_frustum_planes,instance_shadow_cull_result,MAX_INSTANCE_CULL,INSTANCE_GEOMETRY_MASK);
-
+
// a pre pass will need to be needed to determine the actual z-near to be used
for(int j=0;j<caster_cull_count;j++) {
-
+
float min,max;
Instance *ins=instance_shadow_cull_result[j];
if (!ins->visible || ins->data.cast_shadows == VS::SHADOW_CASTING_SETTING_OFF)
@@ -5067,23 +5067,23 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
rasterizer->light_instance_set_shadow_transform(p_light->light_info->instance, i, ortho_camera, ortho_transform,distances[i],distances[i+1] );
}
-
+
rasterizer->begin_shadow_map( p_light->light_info->instance, i );
-
+
for (int j=0;j<caster_cull_count;j++) {
-
+
Instance *instance = instance_shadow_cull_result[j];
if (!instance->visible || instance->data.cast_shadows==VS::SHADOW_CASTING_SETTING_OFF)
continue;
_instance_draw(instance);
}
-
+
rasterizer->end_shadow_map();
-
-
+
+
}
-
-
+
+
}
@@ -5519,7 +5519,7 @@ void VisualServerRaster::_light_instance_update_shadow(Instance *p_light,Scenari
Rasterizer::ShadowType shadow_type = rasterizer->light_instance_get_shadow_type(p_light->light_info->instance);
switch(shadow_type) {
-
+
case Rasterizer::SHADOW_SIMPLE: {
/* SPOT SHADOW */
@@ -6047,7 +6047,7 @@ void VisualServerRaster::_cull_room(Camera *p_camera, Instance *p_room,Instance
}
-
+
}
void VisualServerRaster::_process_sampled_light(const Transform& p_camera,Instance *p_sampled_light,bool p_linear_colorspace) {
@@ -6379,7 +6379,7 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
switch(p_camera->type) {
case Camera::ORTHOGONAL: {
-
+
camera_matrix.set_orthogonal(
p_camera->size,
viewport_rect.width / (float)viewport_rect.height,
@@ -6401,19 +6401,19 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
);
ortho=false;
-
- } break;
+
+ } break;
}
rasterizer->set_camera(p_camera->transform, camera_matrix,ortho);
-
+
Vector<Plane> planes = camera_matrix.get_projection_planes(p_camera->transform);
CullRange cull_range; // cull range is used for PSSM, and having an idea of the rendering depth
cull_range.nearp=Plane(p_camera->transform.origin,-p_camera->transform.basis.get_axis(2).normalized());
cull_range.z_near=camera_matrix.get_z_near();
- cull_range.z_far=camera_matrix.get_z_far();
+ cull_range.z_far=camera_matrix.get_z_far();
cull_range.min=cull_range.z_far;
cull_range.max=cull_range.z_near;
@@ -6429,10 +6429,10 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
*/
/* STEP 3 - PROCESS PORTALS, VALIDATE ROOMS */
-
+
// compute portals
-
+
exterior_visited=false;
exterior_portal_cull_count=0;
@@ -6513,11 +6513,11 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
}
/* STEP 4 - REMOVE FURTHER CULLED OBJECTS, ADD LIGHTS */
-
+
for(int i=0;i<cull_count;i++) {
-
+
Instance *ins = instance_cull_result[i];
-
+
bool keep=false;
@@ -6603,7 +6603,7 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
}
}
}
-
+
}
if (!keep) {
@@ -6617,12 +6617,12 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
ins->last_render_pass=render_pass;
}
}
-
+
if (cull_range.max > cull_range.z_far )
cull_range.max=cull_range.z_far;
if (cull_range.min < cull_range.z_near )
cull_range.min=cull_range.z_near;
-
+
/* STEP 5 - PROCESS LIGHTS */
rasterizer->shadow_clear_near(); //clear near shadows, will be recreated
@@ -6649,7 +6649,7 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
//discard lights not affecting anything (useful for deferred rendering, shadowmaps, etc)
for (int i=0;i<light_cull_count;i++) {
-
+
Instance *ins = light_cull_result[i];
if (light_discard_enabled) {
@@ -6678,7 +6678,7 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
}
}
-
+
}
{ //this should eventually change to
@@ -6691,12 +6691,12 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
if (!rasterizer->light_has_shadow(ins->base_rid) || !shadows_enabled)
continue;
-
+
/* for far shadows?
if (ins->version == ins->light_info->last_version && rasterizer->light_instance_has_far_shadow(ins->light_info->instance))
continue; // didn't change
*/
-
+
_light_instance_update_shadow(ins,p_scenario,p_camera,cull_range);
ins->light_info->last_version=ins->version;
}
@@ -6726,17 +6726,17 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
}
/* STEP 7 - PROCESS GEOMETRY AND DRAW SCENE*/
-
+
rasterizer->begin_scene(p_viewport->viewport_data,environment,p_scenario->debug);
- rasterizer->set_viewport(viewport_rect);
-
+ rasterizer->set_viewport(viewport_rect);
+
// add lights
{
List<RID>::Element *E=p_scenario->directional_lights.front();
-
+
for(;E;E=E->next()) {
Instance *light = E->get().is_valid()?instance_owner.get(E->get()):NULL;
@@ -6758,11 +6758,11 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S
// add geometry
for(int i=0;i<cull_count;i++) {
-
+
Instance *ins = instance_cull_result[i];
ERR_CONTINUE(!((1<<ins->base_type)&INSTANCE_GEOMETRY_MASK));
-
+
_instance_draw(ins);
}
@@ -6823,7 +6823,7 @@ void VisualServerRaster::_render_canvas_item(CanvasItem *p_canvas_item,const Mat
if (global_rect.intersects(p_clip_rect) && ci->viewport.is_valid() && viewport_owner.owns(ci->viewport)) {
- Viewport *vp = viewport_owner.get(ci->viewport);
+ Viewport *vp = viewport_owner.get(ci->viewport);
Point2i from = xform.get_origin() + Point2(viewport_rect.x,viewport_rect.y);
Point2i size = rect.size;
@@ -7364,7 +7364,7 @@ void VisualServerRaster::_draw_viewports() {
rasterizer->set_viewport(viewport_rect);
}
- rasterizer->canvas_begin();
+ rasterizer->canvas_begin();
rasterizer->canvas_disable_blending();
rasterizer->canvas_begin_rect(Matrix32());
rasterizer->canvas_draw_rect(E->get()->rt_to_screen_rect,0,Rect2(Point2(),E->get()->rt_to_screen_rect.size),E->get()->render_target_texture,Color(1,1,1));
@@ -7492,7 +7492,7 @@ void VisualServerRaster::draw() {
rasterizer->begin_frame();
_draw_viewports();
_draw_cursors_and_margins();
- rasterizer->end_frame();
+ rasterizer->end_frame();
draw_extra_frame=rasterizer->needs_to_draw_next_frame();
}
@@ -7574,13 +7574,13 @@ void VisualServerRaster::set_boot_image(const Image& p_image, const Color& p_col
void VisualServerRaster::init() {
rasterizer->init();
-
+
shadows_enabled=GLOBAL_DEF("render/shadows_enabled",true);
//default_scenario = scenario_create();
//default_viewport = viewport_create();
for(int i=0;i<4;i++)
black_margin[i]=0;
-
+
Image img;
img.create(default_mouse_cursor_xpm);
//img.convert(Image::FORMAT_RGB);
@@ -7597,7 +7597,7 @@ void VisualServerRaster::_clean_up_owner(RID_OwnerBase *p_owner,String p_type) {
List<RID> rids;
p_owner->get_owned_list(&rids);
-
+
int lost=0;
for(List<RID>::Element *I=rids.front();I;I=I->next()) {
if (OS::get_singleton()->is_stdout_verbose()) {
@@ -7622,19 +7622,19 @@ void VisualServerRaster::finish() {
_clean_up_owner( &room_owner,"Room" );
_clean_up_owner( &portal_owner,"Portal" );
-
+
_clean_up_owner( &camera_owner,"Camera" );
_clean_up_owner( &viewport_owner,"Viewport" );
-
+
_clean_up_owner( &scenario_owner,"Scenario" );
_clean_up_owner( &instance_owner,"Instance" );
-
+
_clean_up_owner( &canvas_owner,"Canvas" );
_clean_up_owner( &canvas_item_owner,"CanvasItem" );
rasterizer->finish();
octree_allocator.clear();
-
+
if (instance_dependency_map.size()) {
print_line("Base resources missing amount: "+itos(instance_dependency_map.size()));
}
@@ -7646,9 +7646,9 @@ RID VisualServerRaster::get_test_cube() {
if (test_cube.is_valid())
return test_cube;
-
+
test_cube=_make_test_cube();
- return test_cube;
+ return test_cube;
}