mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 10:11:57 +03:00
committed by
Rémi Verschelde
parent
830947feaf
commit
424a104666
@@ -34,11 +34,11 @@ ParticleSystemSW::ParticleSystemSW() {
|
||||
|
||||
amount=8;
|
||||
emitting=true;
|
||||
|
||||
|
||||
for (int i=0;i<VS::PARTICLE_VAR_MAX;i++) {
|
||||
particle_randomness[i]=0.0;
|
||||
}
|
||||
|
||||
|
||||
particle_vars[VS::PARTICLE_LIFETIME]=2.0;//
|
||||
particle_vars[VS::PARTICLE_SPREAD]=0.2;//
|
||||
particle_vars[VS::PARTICLE_GRAVITY]=9.8;//
|
||||
@@ -89,7 +89,7 @@ _FORCE_INLINE_ static float _rand_from_seed(uint32_t *seed) {
|
||||
if (s < 0)
|
||||
s += 2147483647;
|
||||
(*seed) = s;
|
||||
|
||||
|
||||
float v=((float)((*seed) & 0xFFFFF))/(float)0xFFFFF;
|
||||
v=v*2.0-1.0;
|
||||
return v;
|
||||
@@ -144,10 +144,10 @@ void ParticleSystemProcessSW::process(const ParticleSystemSW *p_system,const Tra
|
||||
}
|
||||
|
||||
float next_time = particle_system_time+p_time;
|
||||
|
||||
|
||||
if (next_time > lifetime)
|
||||
next_time=Math::fmod(next_time,lifetime);
|
||||
|
||||
|
||||
|
||||
ParticleData *pdata=&particle_data[0];
|
||||
Vector3 attractor_positions[VS::MAX_PARTICLE_ATTRACTORS];
|
||||
@@ -159,13 +159,13 @@ void ParticleSystemProcessSW::process(const ParticleSystemSW *p_system,const Tra
|
||||
|
||||
|
||||
for(int i=0;i<particle_count;i++) {
|
||||
|
||||
|
||||
ParticleData &p=pdata[i];
|
||||
|
||||
|
||||
float restart_time = (i * lifetime / p_system->amount);
|
||||
|
||||
|
||||
bool restart=false;
|
||||
|
||||
|
||||
if ( next_time < particle_system_time ) {
|
||||
|
||||
if (restart_time > particle_system_time || restart_time < next_time )
|
||||
@@ -191,11 +191,11 @@ void ParticleSystemProcessSW::process(const ParticleSystemSW *p_system,const Tra
|
||||
else
|
||||
p.pos = p_transform.xform( r[_irand_from_seed(&rand_seed)%emission_point_count] );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
float angle1 = _rand_from_seed(&rand_seed)*p_system->particle_vars[VS::PARTICLE_SPREAD]*Math_PI;
|
||||
float angle2 = _rand_from_seed(&rand_seed)*20.0*Math_PI; // make it more random like
|
||||
|
||||
|
||||
Vector3 rot_xz=Vector3( Math::sin(angle1), 0.0, Math::cos(angle1) );
|
||||
Vector3 rot = Vector3( Math::cos(angle2)*rot_xz.x,Math::sin(angle2)*rot_xz.x, rot_xz.z);
|
||||
|
||||
@@ -204,22 +204,22 @@ void ParticleSystemProcessSW::process(const ParticleSystemSW *p_system,const Tra
|
||||
p.vel=p_transform.basis.xform( p.vel );
|
||||
|
||||
p.vel+=p_system->emission_base_velocity;
|
||||
|
||||
p.rot=p_system->particle_vars[VS::PARTICLE_INITIAL_ANGLE]+p_system->particle_randomness[VS::PARTICLE_INITIAL_ANGLE]*_rand_from_seed(&rand_seed);
|
||||
|
||||
p.rot=p_system->particle_vars[VS::PARTICLE_INITIAL_ANGLE]+p_system->particle_randomness[VS::PARTICLE_INITIAL_ANGLE]*_rand_from_seed(&rand_seed);
|
||||
p.active=true;
|
||||
for(int r=0;r<PARTICLE_RANDOM_NUMBERS;r++)
|
||||
p.random[r]=_rand_from_seed(&rand_seed);
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
p.pos=Vector3();
|
||||
p.rot=0;
|
||||
p.vel=Vector3();
|
||||
p.active=false;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
if (!p.active)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -37,13 +37,13 @@
|
||||
|
||||
struct ParticleSystemSW {
|
||||
enum {
|
||||
|
||||
|
||||
MAX_PARTICLES=1024
|
||||
};
|
||||
|
||||
float particle_vars[VS::PARTICLE_VAR_MAX];
|
||||
float particle_randomness[VS::PARTICLE_VAR_MAX];
|
||||
|
||||
|
||||
Vector3 emission_half_extents;
|
||||
DVector<Vector3> emission_points;
|
||||
Vector3 gravity_normal;
|
||||
@@ -54,14 +54,14 @@ struct ParticleSystemSW {
|
||||
AABB visibility_aabb;
|
||||
bool sort;
|
||||
bool local_coordinates;
|
||||
|
||||
|
||||
struct ColorPhase {
|
||||
|
||||
|
||||
float pos;
|
||||
Color color;
|
||||
ColorPhase() { pos=1.0; color=Color(0.0,0.0,1.0,1.0); }
|
||||
};
|
||||
|
||||
|
||||
int color_phase_count;
|
||||
ColorPhase color_phases[VS::MAX_PARTICLE_COLOR_PHASES];
|
||||
|
||||
@@ -71,12 +71,12 @@ struct ParticleSystemSW {
|
||||
Vector3 pos;
|
||||
float force;
|
||||
};
|
||||
|
||||
|
||||
int attractor_count;
|
||||
Attractor attractors[VS::MAX_PARTICLE_ATTRACTORS];
|
||||
|
||||
|
||||
ParticleSystemSW();
|
||||
ParticleSystemSW();
|
||||
~ParticleSystemSW();
|
||||
|
||||
};
|
||||
@@ -89,7 +89,7 @@ struct ParticleSystemProcessSW {
|
||||
};
|
||||
|
||||
struct ParticleData {
|
||||
|
||||
|
||||
Vector3 pos;
|
||||
Vector3 vel;
|
||||
float rot;
|
||||
@@ -102,7 +102,7 @@ struct ParticleSystemProcessSW {
|
||||
|
||||
bool valid;
|
||||
float particle_system_time;
|
||||
uint32_t rand_seed;
|
||||
uint32_t rand_seed;
|
||||
Vector<ParticleData> particle_data;
|
||||
|
||||
void process(const ParticleSystemSW *p_system,const Transform& p_transform,float p_time);
|
||||
|
||||
@@ -370,7 +370,7 @@ RID Rasterizer::fixed_material_create() {
|
||||
material_set_param(mat,_fixed_material_param_names[i],fm.param[i]); //must be there
|
||||
}
|
||||
fixed_material_dirty_list.add(&fm.dirty_list);
|
||||
//print_line("FMC: "+itos(mat.get_id()));
|
||||
//print_line("FMC: "+itos(mat.get_id()));
|
||||
return mat;
|
||||
}
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ public:
|
||||
/* TEXTURE API */
|
||||
|
||||
virtual RID texture_create()=0;
|
||||
RID texture_create_from_image(const Image& p_image,uint32_t p_flags=VS::TEXTURE_FLAGS_DEFAULT); // helper
|
||||
RID texture_create_from_image(const Image& p_image,uint32_t p_flags=VS::TEXTURE_FLAGS_DEFAULT); // helper
|
||||
virtual void texture_allocate(RID p_texture,int p_width, int p_height,Image::Format p_format,uint32_t p_flags=VS::TEXTURE_FLAGS_DEFAULT)=0;
|
||||
virtual void texture_set_data(RID p_texture,const Image& p_image,VS::CubeMapSide p_cube_side=VS::CUBEMAP_LEFT)=0;
|
||||
virtual Image texture_get_data(RID p_texture,VS::CubeMapSide p_cube_side=VS::CUBEMAP_LEFT) const=0;
|
||||
@@ -263,10 +263,10 @@ public:
|
||||
virtual void fixed_material_set_point_size(RID p_material,float p_size);
|
||||
virtual float fixed_material_get_point_size(RID p_material) const;
|
||||
|
||||
/* MESH API */
|
||||
|
||||
/* MESH API */
|
||||
|
||||
virtual RID mesh_create()=0;
|
||||
|
||||
|
||||
|
||||
virtual void mesh_add_surface(RID p_mesh,VS::PrimitiveType p_primitive,const Array& p_arrays,const Array& p_blend_shapes=Array(),bool p_alpha_sort=false)=0;
|
||||
virtual Array mesh_get_surface_arrays(RID p_mesh,int p_surface) const=0;
|
||||
@@ -287,10 +287,10 @@ public:
|
||||
virtual int mesh_surface_get_array_index_len(RID p_mesh, int p_surface) const=0;
|
||||
virtual uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const=0;
|
||||
virtual VS::PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const=0;
|
||||
|
||||
|
||||
virtual void mesh_remove_surface(RID p_mesh,int p_index)=0;
|
||||
virtual int mesh_get_surface_count(RID p_mesh) const=0;
|
||||
|
||||
|
||||
virtual AABB mesh_get_aabb(RID p_mesh,RID p_skeleton=RID()) const=0;
|
||||
|
||||
virtual void mesh_set_custom_aabb(RID p_mesh,const AABB& p_aabb)=0;
|
||||
@@ -338,23 +338,23 @@ public:
|
||||
virtual void immediate_set_material(RID p_immediate,RID p_material)=0;
|
||||
virtual RID immediate_get_material(RID p_immediate) const=0;
|
||||
|
||||
|
||||
|
||||
/* PARTICLES API */
|
||||
|
||||
|
||||
virtual RID particles_create()=0;
|
||||
|
||||
|
||||
virtual void particles_set_amount(RID p_particles, int p_amount)=0;
|
||||
virtual int particles_get_amount(RID p_particles) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_emitting(RID p_particles, bool p_emitting)=0;
|
||||
virtual bool particles_is_emitting(RID p_particles) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_visibility_aabb(RID p_particles, const AABB& p_visibility)=0;
|
||||
virtual AABB particles_get_visibility_aabb(RID p_particles) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_emission_half_extents(RID p_particles, const Vector3& p_half_extents)=0;
|
||||
virtual Vector3 particles_get_emission_half_extents(RID p_particles) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_emission_base_velocity(RID p_particles, const Vector3& p_base_velocity)=0;
|
||||
virtual Vector3 particles_get_emission_base_velocity(RID p_particles) const=0;
|
||||
|
||||
@@ -363,22 +363,22 @@ public:
|
||||
|
||||
virtual void particles_set_gravity_normal(RID p_particles, const Vector3& p_normal)=0;
|
||||
virtual Vector3 particles_get_gravity_normal(RID p_particles) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_variable(RID p_particles, VS::ParticleVariable p_variable,float p_value)=0;
|
||||
virtual float particles_get_variable(RID p_particles, VS::ParticleVariable p_variable) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_randomness(RID p_particles, VS::ParticleVariable p_variable,float p_randomness)=0;
|
||||
virtual float particles_get_randomness(RID p_particles, VS::ParticleVariable p_variable) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_color_phase_pos(RID p_particles, int p_phase, float p_pos)=0;
|
||||
virtual float particles_get_color_phase_pos(RID p_particles, int p_phase) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_color_phases(RID p_particles, int p_phases)=0;
|
||||
virtual int particles_get_color_phases(RID p_particles) const=0;
|
||||
|
||||
virtual void particles_set_color_phase_color(RID p_particles, int p_phase, const Color& p_color)=0;
|
||||
virtual Color particles_get_color_phase_color(RID p_particles, int p_phase) const=0;
|
||||
|
||||
|
||||
virtual void particles_set_attractors(RID p_particles, int p_attractors)=0;
|
||||
virtual int particles_get_attractors(RID p_particles) const=0;
|
||||
|
||||
@@ -390,7 +390,7 @@ public:
|
||||
|
||||
virtual void particles_set_material(RID p_particles, RID p_material,bool p_owned=false)=0;
|
||||
virtual RID particles_get_material(RID p_particles) const=0;
|
||||
|
||||
|
||||
virtual AABB particles_get_aabb(RID p_particles) const=0;
|
||||
|
||||
virtual void particles_set_height_from_velocity(RID p_particles, bool p_enable)=0;
|
||||
@@ -400,31 +400,31 @@ public:
|
||||
virtual bool particles_is_using_local_coordinates(RID p_particles) const=0;
|
||||
|
||||
/* SKELETON API */
|
||||
|
||||
|
||||
virtual RID skeleton_create()=0;
|
||||
virtual void skeleton_resize(RID p_skeleton,int p_bones)=0;
|
||||
virtual int skeleton_get_bone_count(RID p_skeleton) const=0;
|
||||
virtual void skeleton_bone_set_transform(RID p_skeleton,int p_bone, const Transform& p_transform)=0;
|
||||
virtual Transform skeleton_bone_get_transform(RID p_skeleton,int p_bone)=0;
|
||||
|
||||
|
||||
|
||||
/* LIGHT API */
|
||||
|
||||
|
||||
virtual RID light_create(VS::LightType p_type)=0;
|
||||
virtual VS::LightType light_get_type(RID p_light) const=0;
|
||||
|
||||
virtual void light_set_color(RID p_light,VS::LightColor p_type, const Color& p_color)=0;
|
||||
virtual Color light_get_color(RID p_light,VS::LightColor p_type) const=0;
|
||||
|
||||
virtual Color light_get_color(RID p_light,VS::LightColor p_type) const=0;
|
||||
|
||||
virtual void light_set_shadow(RID p_light,bool p_enabled)=0;
|
||||
virtual bool light_has_shadow(RID p_light) const=0;
|
||||
|
||||
virtual bool light_has_shadow(RID p_light) const=0;
|
||||
|
||||
virtual void light_set_volumetric(RID p_light,bool p_enabled)=0;
|
||||
virtual bool light_is_volumetric(RID p_light) const=0;
|
||||
|
||||
virtual bool light_is_volumetric(RID p_light) const=0;
|
||||
|
||||
virtual void light_set_projector(RID p_light,RID p_texture)=0;
|
||||
virtual RID light_get_projector(RID p_light) const=0;
|
||||
|
||||
|
||||
virtual void light_set_var(RID p_light, VS::LightParam p_var, float p_value)=0;
|
||||
virtual float light_get_var(RID p_light, VS::LightParam p_var) const=0;
|
||||
|
||||
@@ -440,10 +440,10 @@ public:
|
||||
virtual float light_directional_get_shadow_param(RID p_light,VS::LightDirectionalShadowParam p_param) const=0;
|
||||
|
||||
virtual AABB light_get_aabb(RID p_poly) const=0;
|
||||
|
||||
|
||||
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_set_transform(RID p_light_instance,const Transform& p_transform)=0;
|
||||
|
||||
|
||||
enum ShadowType {
|
||||
SHADOW_NONE,
|
||||
@@ -454,7 +454,7 @@ public:
|
||||
SHADOW_PSSM, //parallel split shadow map
|
||||
SHADOW_PSM //perspective shadow map
|
||||
};
|
||||
|
||||
|
||||
enum ShadowPass {
|
||||
PASS_DUAL_PARABOLOID_FRONT=0,
|
||||
PASS_DUAL_PARABOLOID_BACK=1,
|
||||
@@ -463,7 +463,7 @@ public:
|
||||
PASS_CUBE_TOP=2,
|
||||
PASS_CUBE_BOTTOM=3,
|
||||
PASS_CUBE_LEFT=4,
|
||||
PASS_CUBE_RIGHT=5,
|
||||
PASS_CUBE_RIGHT=5,
|
||||
};
|
||||
|
||||
virtual ShadowType light_instance_get_shadow_type(RID p_light_instance,bool p_far=false) const=0;
|
||||
@@ -479,13 +479,13 @@ public:
|
||||
virtual bool shadow_allocate_far(RID p_light)=0; //true on successful alloc
|
||||
|
||||
/* PARTICLES INSTANCE */
|
||||
|
||||
|
||||
virtual RID particles_instance_create(RID p_particles)=0;
|
||||
virtual void particles_instance_set_transform(RID p_particles_instance,const Transform& p_transform)=0;
|
||||
|
||||
|
||||
/* RENDER API */
|
||||
/* all calls (inside begin/end shadow) are always warranted to be in the following order: */
|
||||
|
||||
|
||||
/* VIEWPORT API */
|
||||
|
||||
virtual RID viewport_data_create()=0;
|
||||
@@ -496,19 +496,19 @@ public:
|
||||
virtual bool render_target_renedered_in_frame(RID p_render_target)=0;
|
||||
|
||||
virtual void begin_frame()=0;
|
||||
|
||||
|
||||
virtual void set_viewport(const VS::ViewportRect& p_viewport)=0;
|
||||
virtual void set_render_target(RID p_render_target,bool p_transparent_bg=false,bool p_vflip=false)=0;
|
||||
virtual void clear_viewport(const Color& p_color)=0;
|
||||
virtual void capture_viewport(Image* r_capture)=0;
|
||||
|
||||
|
||||
virtual void begin_scene(RID p_viewport_data,RID p_env,VS::ScenarioDebugMode p_debug)=0;
|
||||
virtual void begin_shadow_map( RID p_light_instance, int p_shadow_pass )=0;
|
||||
|
||||
virtual void set_camera(const Transform& p_world,const CameraMatrix& p_projection,bool p_ortho_hint)=0;
|
||||
|
||||
|
||||
virtual void add_light( RID p_light_instance )=0; ///< all "add_light" calls happen before add_geometry calls
|
||||
|
||||
|
||||
typedef Map<StringName,Variant> ParamOverrideMap;
|
||||
|
||||
struct BakedLightData {
|
||||
@@ -556,10 +556,10 @@ public:
|
||||
|
||||
virtual void end_scene()=0;
|
||||
virtual void end_shadow_map()=0;
|
||||
|
||||
|
||||
virtual void end_frame()=0;
|
||||
virtual void flush_frame(); //not necesary in most cases
|
||||
|
||||
|
||||
/* CANVAS API */
|
||||
|
||||
enum CanvasRectFlags {
|
||||
@@ -613,7 +613,7 @@ public:
|
||||
CanvasLight *mask_next_ptr;
|
||||
|
||||
CanvasLight() {
|
||||
enabled=true;
|
||||
enabled=true;
|
||||
color=Color(1,1,1);
|
||||
shadow_color=Color(0,0,0,0);
|
||||
height=0;
|
||||
@@ -978,7 +978,7 @@ public:
|
||||
virtual void canvas_light_shadow_buffer_update(RID p_buffer, const Matrix32& p_light_xform, int p_light_mask,float p_near, float p_far, CanvasLightOccluderInstance* p_occluders, CameraMatrix *p_xform_cache)=0;
|
||||
|
||||
/* ENVIRONMENT */
|
||||
|
||||
|
||||
|
||||
virtual RID environment_create()=0;
|
||||
|
||||
@@ -998,9 +998,9 @@ public:
|
||||
virtual RID sampled_light_dp_create(int p_width,int p_height)=0;
|
||||
virtual void sampled_light_dp_update(RID p_sampled_light,const Color *p_data,float p_multiplier)=0;
|
||||
|
||||
|
||||
|
||||
/*MISC*/
|
||||
|
||||
|
||||
virtual bool is_texture(const RID& p_rid) const=0;
|
||||
virtual bool is_material(const RID& p_rid) const=0;
|
||||
virtual bool is_mesh(const RID& p_rid) const=0;
|
||||
|
||||
@@ -34,78 +34,78 @@
|
||||
struct _ConnectionKey {
|
||||
|
||||
int node;
|
||||
int slot;
|
||||
|
||||
int slot;
|
||||
|
||||
_FORCE_INLINE_ _ConnectionKey(int p_node=0,int p_slot=0) { node=p_node; slot=p_slot; }
|
||||
|
||||
|
||||
_FORCE_INLINE_ bool operator<(const _ConnectionKey& p_other) const {
|
||||
|
||||
|
||||
if (node<p_other.node)
|
||||
return true;
|
||||
else if (node>p_other.node)
|
||||
return false;
|
||||
return false;
|
||||
else
|
||||
return slot<p_other.slot;
|
||||
}
|
||||
};
|
||||
|
||||
Error ShaderGraph::generate(ShaderCodeGenerator * p_generator) const {
|
||||
|
||||
|
||||
Map<int,Node>::Element *E = node_map.front();
|
||||
int i=0;
|
||||
int i=0;
|
||||
while(E) {
|
||||
|
||||
|
||||
E->get().order=i++;
|
||||
E->get().out_valid=false;
|
||||
E->get().in_valid=false;
|
||||
E=E->next();
|
||||
}
|
||||
}
|
||||
|
||||
int worst_case=connections.size() * connections.size(); // worst bubble case
|
||||
int iterations=0;
|
||||
int swaps;
|
||||
|
||||
do {
|
||||
|
||||
do {
|
||||
swaps=0;
|
||||
const List<Connection>::Element *E=connections.front();
|
||||
|
||||
while(E) {
|
||||
|
||||
const Connection &c = E->get();
|
||||
|
||||
|
||||
const Node *src = &node_map[c.src_id];
|
||||
const Node *dst = &node_map[c.dst_id];
|
||||
|
||||
|
||||
if (src->order > dst->order) {
|
||||
|
||||
|
||||
SWAP(src->order, dst->order);
|
||||
swaps++;
|
||||
}
|
||||
|
||||
|
||||
E=E->next();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
iterations++;
|
||||
|
||||
|
||||
} while (iterations<=worst_case && swaps>0);
|
||||
|
||||
|
||||
ERR_FAIL_COND_V( swaps != 0 , ERR_CYCLIC_LINK );
|
||||
|
||||
|
||||
//node array
|
||||
Vector<const Node*> nodes;
|
||||
nodes.resize(node_map.size());
|
||||
|
||||
|
||||
E = node_map.front();
|
||||
while(E) {
|
||||
|
||||
|
||||
ERR_FAIL_INDEX_V( E->get().order, nodes.size(), ERR_BUG);
|
||||
nodes[E->get().order]=&E->get();
|
||||
E=E->next();
|
||||
}
|
||||
|
||||
|
||||
//connection set
|
||||
|
||||
|
||||
Map<_ConnectionKey,int> in_connection_map;
|
||||
Map<_ConnectionKey,List<int> > out_connection_map;
|
||||
Map<_ConnectionKey,int> in_node_map;
|
||||
@@ -115,7 +115,7 @@ Error ShaderGraph::generate(ShaderCodeGenerator * p_generator) const {
|
||||
i=0;
|
||||
while(CE) {
|
||||
const Connection &c = CE->get();
|
||||
|
||||
|
||||
_ConnectionKey in_k;
|
||||
in_k.node=node_map[c.dst_id].order;
|
||||
in_k.slot=c.dst_slot;
|
||||
@@ -131,11 +131,11 @@ Error ShaderGraph::generate(ShaderCodeGenerator * p_generator) const {
|
||||
if(!out_node_map.has(out_k))
|
||||
out_node_map[out_k]=List<int>();
|
||||
out_node_map[out_k].push_back(node_map[c.dst_id].order);
|
||||
|
||||
|
||||
i++;
|
||||
CE=CE->next();
|
||||
}
|
||||
|
||||
|
||||
// validate nodes if they are connected to an output
|
||||
|
||||
for(int i=nodes.size()-1;i>=0;i--) {
|
||||
@@ -231,9 +231,9 @@ Error ShaderGraph::generate(ShaderCodeGenerator * p_generator) const {
|
||||
}
|
||||
|
||||
// write code
|
||||
|
||||
|
||||
p_generator->begin();
|
||||
|
||||
|
||||
for(int i=0;i<nodes.size();i++) {
|
||||
|
||||
|
||||
@@ -244,35 +244,35 @@ Error ShaderGraph::generate(ShaderCodeGenerator * p_generator) const {
|
||||
in_indices.resize(VS::shader_get_input_count(nodes[i]->type));
|
||||
Vector<int> out_indices;
|
||||
Vector<int> out_slot_indices;
|
||||
|
||||
|
||||
for(int j=0;j<in_indices.size();j++) {
|
||||
|
||||
|
||||
_ConnectionKey key(nodes[i]->order,j);
|
||||
if (in_connection_map.has(key))
|
||||
in_indices[j]=in_connection_map[key];
|
||||
else
|
||||
in_indices[j]=-1;
|
||||
in_indices[j]=-1;
|
||||
}
|
||||
|
||||
|
||||
for(int j=0;j<VS::shader_get_output_count(nodes[i]->type);j++) {
|
||||
|
||||
|
||||
_ConnectionKey key(nodes[i]->order,j);
|
||||
if (out_connection_map.has(key)) {
|
||||
for(List<int>::Element *CE=out_connection_map[key].front();CE;CE=CE->next()) {
|
||||
|
||||
|
||||
out_indices.push_back(CE->get());
|
||||
out_slot_indices.push_back(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Error err = p_generator->add_node(nodes[i]->type,i,nodes[i]->id,nodes[i]->param,in_indices,out_indices,out_slot_indices);
|
||||
ERR_FAIL_COND_V( err, err );
|
||||
}
|
||||
|
||||
|
||||
p_generator->end();
|
||||
|
||||
|
||||
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -282,7 +282,7 @@ void ShaderGraph::node_add(VS::ShaderNodeType p_type,int p_id) {
|
||||
ERR_FAIL_COND( node_map.has(p_id ) );
|
||||
ERR_FAIL_INDEX( p_type, VS::NODE_TYPE_MAX );
|
||||
Node node;
|
||||
|
||||
|
||||
node.type=p_type;
|
||||
node.id=p_id;
|
||||
node.x=0;
|
||||
@@ -312,14 +312,14 @@ int ShaderGraph::node_get_pos_y(int p_id) const {
|
||||
void ShaderGraph::node_remove(int p_id) {
|
||||
|
||||
ERR_FAIL_COND(!node_map.has(p_id));
|
||||
|
||||
|
||||
//erase connections associated with node
|
||||
List<Connection>::Element *N,*E=connections.front();
|
||||
while(E) {
|
||||
N=E->next();
|
||||
const Connection &c = E->get();
|
||||
if (c.src_id==p_id || c.dst_id==p_id) {
|
||||
|
||||
|
||||
connections.erase(E);
|
||||
}
|
||||
E=N;
|
||||
@@ -337,17 +337,17 @@ void ShaderGraph::node_change_type(int p_id, VS::ShaderNodeType p_type) {
|
||||
}
|
||||
|
||||
void ShaderGraph::node_set_param(int p_id, const Variant& p_value) {
|
||||
|
||||
|
||||
ERR_FAIL_COND(!node_map.has(p_id));
|
||||
node_map[p_id].param=p_value;
|
||||
node_map[p_id].param=p_value;
|
||||
}
|
||||
|
||||
void ShaderGraph::get_node_list(List<int> *p_node_list) const {
|
||||
|
||||
Map<int,Node>::Element *E = node_map.front();
|
||||
|
||||
|
||||
while(E) {
|
||||
|
||||
|
||||
p_node_list->push_back(E->key());
|
||||
E=E->next();
|
||||
}
|
||||
@@ -363,7 +363,7 @@ VS::ShaderNodeType ShaderGraph::node_get_type(int p_id) const {
|
||||
Variant ShaderGraph::node_get_param(int p_id) const {
|
||||
|
||||
ERR_FAIL_COND_V(!node_map.has(p_id),Variant());
|
||||
return node_map[p_id].param;
|
||||
return node_map[p_id].param;
|
||||
}
|
||||
|
||||
|
||||
@@ -383,16 +383,16 @@ Error ShaderGraph::connect(int p_src_id,int p_src_slot, int p_dst_id,int p_dst_s
|
||||
while(E) {
|
||||
const Connection &c = E->get();
|
||||
ERR_FAIL_COND_V(c.dst_slot==p_dst_slot && c.dst_id == p_dst_id, ERR_ALREADY_EXISTS);
|
||||
|
||||
|
||||
E=E->next();
|
||||
}
|
||||
|
||||
|
||||
Connection c;
|
||||
c.src_slot=p_src_slot;
|
||||
c.src_id=p_src_id;
|
||||
c.dst_slot=p_dst_slot;
|
||||
c.dst_id=p_dst_id;
|
||||
|
||||
|
||||
connections.push_back(c);
|
||||
|
||||
return OK;
|
||||
@@ -419,12 +419,12 @@ void ShaderGraph::disconnect(int p_src_id,int p_src_slot, int p_dst_id,int p_dst
|
||||
N=E->next();
|
||||
const Connection &c = E->get();
|
||||
if (c.src_slot==p_src_slot && c.src_id==p_src_id && c.dst_slot==p_dst_slot && c.dst_id == p_dst_id) {
|
||||
|
||||
|
||||
connections.erase(E);
|
||||
}
|
||||
E=N;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
virtual void begin()=0;
|
||||
virtual Error add_node(VS::ShaderNodeType p_type,int p_node_pos,int p_id,const Variant& p_param,const Vector<int>& p_in_connections,const Vector<int>& p_out_connections,const Vector<int>& p_out_connection_outputs)=0;
|
||||
virtual void end()=0;
|
||||
|
||||
|
||||
virtual ~ShaderCodeGenerator() {}
|
||||
};
|
||||
|
||||
@@ -61,7 +61,7 @@ public:
|
||||
|
||||
private:
|
||||
struct Node {
|
||||
|
||||
|
||||
int16_t x,y;
|
||||
VS::ShaderNodeType type;
|
||||
Variant param;
|
||||
@@ -74,7 +74,7 @@ private:
|
||||
Map<int,Node> node_map;
|
||||
|
||||
List<Connection> connections;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
Error generate(ShaderCodeGenerator * p_generator) const;
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
void node_set_pos(int p_id, int p_x,int p_y);
|
||||
int node_get_pos_x(int p_id) const;
|
||||
int node_get_pos_y(int p_id) const;
|
||||
|
||||
|
||||
void get_node_list(List<int> *p_node_list) const;
|
||||
void get_sorted_node_list(List<int> *p_node_list) const;
|
||||
VS::ShaderNodeType node_get_type(int p_id) const;
|
||||
@@ -95,14 +95,14 @@ public:
|
||||
|
||||
Error connect(int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot);
|
||||
bool is_connected(int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot) const;
|
||||
void disconnect(int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot);
|
||||
void disconnect(int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot);
|
||||
|
||||
void clear();
|
||||
|
||||
List<Connection> get_connection_list() const;
|
||||
|
||||
|
||||
ShaderGraph();
|
||||
ShaderGraph();
|
||||
~ShaderGraph();
|
||||
|
||||
};
|
||||
|
||||
@@ -607,7 +607,7 @@ bool ShaderLanguage::test_existing_identifier(Node *p_node,const StringName p_id
|
||||
return true;
|
||||
} else if (node->type==Node::TYPE_PROGRAM) {
|
||||
|
||||
ProgramNode *program = (ProgramNode*)node;
|
||||
ProgramNode *program = (ProgramNode*)node;
|
||||
for(int i=0;i<program->functions.size();i++) {
|
||||
|
||||
if (program->functions[i].name==p_identifier) {
|
||||
@@ -1138,7 +1138,7 @@ const ShaderLanguage::BuiltinsDef ShaderLanguage::ci_vertex_builtins_defs[]={
|
||||
//builtins
|
||||
{ "WORLD_MATRIX", TYPE_MAT4},
|
||||
{ "PROJECTION_MATRIX", TYPE_MAT4},
|
||||
{ "EXTRA_MATRIX", TYPE_MAT4},
|
||||
{ "EXTRA_MATRIX", TYPE_MAT4},
|
||||
{ "TIME", TYPE_FLOAT},
|
||||
{ NULL, TYPE_VOID},
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -44,7 +44,7 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
|
||||
enum {
|
||||
|
||||
|
||||
MAX_INSTANCE_CULL=8192,
|
||||
MAX_INSTANCE_LIGHTS=4,
|
||||
LIGHT_CACHE_DIRTY=-1,
|
||||
@@ -58,13 +58,13 @@ class VisualServerRaster : public VisualServer {
|
||||
};
|
||||
|
||||
struct Room {
|
||||
|
||||
|
||||
bool occlude_exterior;
|
||||
BSP_Tree bounds;
|
||||
Room() { occlude_exterior=true; }
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
BalloonAllocator<> octree_allocator;
|
||||
|
||||
struct OctreeAllocator {
|
||||
@@ -116,10 +116,10 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
void _update_baked_light_sampler_dp_cache(BakedLightSampler * blsamp);
|
||||
struct Camera {
|
||||
|
||||
|
||||
enum Type {
|
||||
PERSPECTIVE,
|
||||
ORTHOGONAL
|
||||
ORTHOGONAL
|
||||
};
|
||||
Type type;
|
||||
float fov;
|
||||
@@ -128,18 +128,18 @@ class VisualServerRaster : public VisualServer {
|
||||
uint32_t visible_layers;
|
||||
bool vaspect;
|
||||
RID env;
|
||||
|
||||
|
||||
Transform transform;
|
||||
|
||||
|
||||
Camera() {
|
||||
|
||||
|
||||
visible_layers=0xFFFFFFFF;
|
||||
fov=60;
|
||||
type=PERSPECTIVE;
|
||||
znear=0.1; zfar=100;
|
||||
size=1.0;
|
||||
vaspect=false;
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -147,24 +147,24 @@ class VisualServerRaster : public VisualServer {
|
||||
struct Instance;
|
||||
typedef Set<Instance*,Comparator<Instance*>,OctreeAllocator> InstanceSet;
|
||||
struct Scenario;
|
||||
|
||||
|
||||
struct Instance {
|
||||
|
||||
|
||||
enum {
|
||||
|
||||
|
||||
MAX_LIGHTS=4
|
||||
};
|
||||
|
||||
|
||||
RID self;
|
||||
OctreeElementID octree_id;
|
||||
OctreeElementID octree_id;
|
||||
Scenario *scenario;
|
||||
bool update;
|
||||
bool update_aabb;
|
||||
Instance *update_next;
|
||||
Instance *update_next;
|
||||
InstanceType base_type;
|
||||
|
||||
RID base_rid;
|
||||
|
||||
|
||||
AABB aabb;
|
||||
AABB transformed_aabb;
|
||||
uint32_t object_ID;
|
||||
@@ -181,7 +181,7 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
Rasterizer::InstanceData data;
|
||||
|
||||
|
||||
|
||||
Set<Instance*> auto_rooms;
|
||||
Set<Instance*> valid_auto_rooms;
|
||||
Instance *room;
|
||||
@@ -193,9 +193,9 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
uint64_t last_render_pass;
|
||||
uint64_t last_frame_pass;
|
||||
|
||||
|
||||
uint64_t version; // changes to this, and changes to base increase version
|
||||
|
||||
|
||||
InstanceSet lights;
|
||||
bool light_cache_dirty;
|
||||
|
||||
@@ -206,7 +206,7 @@ class VisualServerRaster : public VisualServer {
|
||||
Transform affine_inverse;
|
||||
Room *room;
|
||||
List<Instance*> owned_geometry_instances;
|
||||
List<Instance*> owned_portal_instances;
|
||||
List<Instance*> owned_portal_instances;
|
||||
List<Instance*> owned_room_instances;
|
||||
List<Instance*> owned_light_instances; //not used, but just for the sake of it
|
||||
Set<Instance*> disconnected_child_portals;
|
||||
@@ -231,8 +231,8 @@ class VisualServerRaster : public VisualServer {
|
||||
};
|
||||
|
||||
struct LightInfo {
|
||||
|
||||
RID instance;
|
||||
|
||||
RID instance;
|
||||
int light_set_index;
|
||||
uint64_t last_version;
|
||||
uint64_t last_add_pass;
|
||||
@@ -241,10 +241,10 @@ class VisualServerRaster : public VisualServer {
|
||||
bool enabled;
|
||||
float dtc; //distance to camera, used for sorting
|
||||
|
||||
|
||||
|
||||
LightInfo() {
|
||||
|
||||
D=NULL;
|
||||
|
||||
D=NULL;
|
||||
light_set_index=-1;
|
||||
last_add_pass=0;
|
||||
enabled=true;
|
||||
@@ -274,10 +274,10 @@ class VisualServerRaster : public VisualServer {
|
||||
resolution=0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct ParticlesInfo {
|
||||
|
||||
RID instance;
|
||||
|
||||
RID instance;
|
||||
};
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@ class VisualServerRaster : public VisualServer {
|
||||
BakedLightSamplerInfo * baked_light_sampler_info;
|
||||
|
||||
|
||||
Instance() {
|
||||
Instance() {
|
||||
octree_id=0;
|
||||
update_next=0;
|
||||
object_ID=0;
|
||||
@@ -329,9 +329,9 @@ class VisualServerRaster : public VisualServer {
|
||||
light_cache_dirty=true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
~Instance() {
|
||||
|
||||
|
||||
if (light_info)
|
||||
memdelete(light_info);
|
||||
if (particles_info)
|
||||
@@ -344,26 +344,26 @@ class VisualServerRaster : public VisualServer {
|
||||
memdelete(baked_light_info);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
struct _InstanceLightsort {
|
||||
|
||||
bool operator()(const Instance* p_A, const Instance* p_B) const { return p_A->light_info->dtc < p_B->light_info->dtc; }
|
||||
};
|
||||
|
||||
struct Scenario {
|
||||
|
||||
|
||||
|
||||
ScenarioDebugMode debug;
|
||||
RID self;
|
||||
// well wtf, balloon allocator is slower?
|
||||
typedef ::Octree<Instance,true> Octree;
|
||||
|
||||
|
||||
Octree octree;
|
||||
|
||||
|
||||
List<RID> directional_lights;
|
||||
RID environment;
|
||||
RID fallback_environment;
|
||||
|
||||
|
||||
Instance *dirty_instances;
|
||||
|
||||
Scenario() { dirty_instances=NULL; debug=SCENARIO_DEBUG_DISABLED; }
|
||||
@@ -459,7 +459,7 @@ class VisualServerRaster : public VisualServer {
|
||||
}
|
||||
|
||||
Canvas() { modulate=Color(1,1,1,1); }
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -525,14 +525,14 @@ class VisualServerRaster : public VisualServer {
|
||||
Map<RID,int> screen_viewports;
|
||||
|
||||
struct CullRange {
|
||||
|
||||
|
||||
Plane nearp;
|
||||
float min,max;
|
||||
float z_near,z_far;
|
||||
|
||||
|
||||
void add_aabb(const AABB& p_aabb) {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -560,12 +560,12 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
Instance *instance_cull_result[MAX_INSTANCE_CULL];
|
||||
Instance *instance_shadow_cull_result[MAX_INSTANCE_CULL]; //used for generating shadowmaps
|
||||
Instance *light_cull_result[MAX_LIGHTS_CULLED];
|
||||
Instance *light_cull_result[MAX_LIGHTS_CULLED];
|
||||
int light_cull_count;
|
||||
|
||||
Instance *exterior_portal_cull_result[MAX_EXTERIOR_PORTALS];
|
||||
int exterior_portal_cull_count;
|
||||
bool exterior_visited;
|
||||
bool exterior_visited;
|
||||
|
||||
Instance *light_sampler_cull_result[MAX_LIGHT_SAMPLERS];
|
||||
int light_samplers_culled;
|
||||
@@ -592,7 +592,7 @@ class VisualServerRaster : public VisualServer {
|
||||
void _update_instance(Instance *p_instance);
|
||||
void _free_attached_instances(RID p_rid,bool p_free_scenario=false);
|
||||
void _clean_up_owner(RID_OwnerBase *p_owner,String p_type);
|
||||
|
||||
|
||||
Instance *instance_update_list;
|
||||
|
||||
//RID default_scenario;
|
||||
@@ -600,7 +600,7 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
RID test_cube;
|
||||
|
||||
|
||||
|
||||
mutable RID_Owner<Room> room_owner;
|
||||
mutable RID_Owner<Portal> portal_owner;
|
||||
|
||||
@@ -609,20 +609,20 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
mutable RID_Owner<Camera> camera_owner;
|
||||
mutable RID_Owner<Viewport> viewport_owner;
|
||||
|
||||
|
||||
mutable RID_Owner<Scenario> scenario_owner;
|
||||
mutable RID_Owner<Instance> instance_owner;
|
||||
|
||||
|
||||
mutable RID_Owner<Canvas> canvas_owner;
|
||||
mutable RID_Owner<CanvasItem> canvas_item_owner;
|
||||
|
||||
Map< RID, Set<RID> > instance_dependency_map;
|
||||
Map< RID, Set<Instance*> > skeleton_dependency_map;
|
||||
|
||||
|
||||
|
||||
ViewportRect viewport_rect;
|
||||
_FORCE_INLINE_ void _instance_draw(Instance *p_instance);
|
||||
|
||||
|
||||
bool _test_portal_cull(Camera *p_camera, Instance *p_portal_from, Instance *p_portal_to);
|
||||
void _cull_portal(Camera *p_camera, Instance *p_portal,Instance *p_from_portal);
|
||||
void _cull_room(Camera *p_camera, Instance *p_room,Instance *p_from_portal=NULL);
|
||||
@@ -641,9 +641,9 @@ class VisualServerRaster : public VisualServer {
|
||||
|
||||
void _light_instance_update_lispsm_shadow(Instance *p_light,Scenario *p_scenario,Camera *p_camera,const CullRange& p_cull_range);
|
||||
void _light_instance_update_pssm_shadow(Instance *p_light,Scenario *p_scenario,Camera *p_camera,const CullRange& p_cull_range);
|
||||
|
||||
|
||||
void _light_instance_update_shadow(Instance *p_light,Scenario *p_scenario,Camera *p_camera,const CullRange& p_cull_range);
|
||||
|
||||
|
||||
uint64_t render_pass;
|
||||
int changes;
|
||||
bool draw_extra_frame;
|
||||
@@ -652,8 +652,8 @@ class VisualServerRaster : public VisualServer {
|
||||
void _draw_viewport(Viewport *p_viewport,int p_ofs_x, int p_ofs_y,int p_parent_w,int p_parent_h);
|
||||
void _draw_viewports();
|
||||
void _draw_cursors_and_margins();
|
||||
|
||||
|
||||
|
||||
|
||||
Rasterizer *rasterizer;
|
||||
public:
|
||||
|
||||
@@ -677,7 +677,7 @@ public:
|
||||
|
||||
|
||||
/* SHADER API */
|
||||
|
||||
|
||||
virtual RID shader_create(ShaderMode p_mode=SHADER_MATERIAL);
|
||||
|
||||
virtual void shader_set_mode(RID p_shader,ShaderMode p_mode);
|
||||
@@ -765,7 +765,7 @@ public:
|
||||
virtual int mesh_surface_get_array_index_len(RID p_mesh, int p_surface) const;
|
||||
virtual uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const;
|
||||
virtual PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const;
|
||||
|
||||
|
||||
virtual void mesh_remove_surface(RID p_mesh,int p_index);
|
||||
virtual int mesh_get_surface_count(RID p_mesh) const;
|
||||
|
||||
@@ -808,23 +808,23 @@ public:
|
||||
virtual void immediate_set_material(RID p_immediate,RID p_material);
|
||||
virtual RID immediate_get_material(RID p_immediate) const;
|
||||
|
||||
|
||||
|
||||
/* PARTICLES API */
|
||||
|
||||
|
||||
virtual RID particles_create();
|
||||
|
||||
|
||||
virtual void particles_set_amount(RID p_particles, int p_amount);
|
||||
virtual int particles_get_amount(RID p_particles) const;
|
||||
|
||||
|
||||
virtual void particles_set_emitting(RID p_particles, bool p_emitting);
|
||||
virtual bool particles_is_emitting(RID p_particles) const;
|
||||
|
||||
|
||||
virtual void particles_set_visibility_aabb(RID p_particles, const AABB& p_visibility);
|
||||
virtual AABB particles_get_visibility_aabb(RID p_particles) const;
|
||||
|
||||
|
||||
virtual void particles_set_emission_half_extents(RID p_particles, const Vector3& p_half_extents);
|
||||
virtual Vector3 particles_get_emission_half_extents(RID p_particles) const;
|
||||
|
||||
|
||||
virtual void particles_set_emission_base_velocity(RID p_particles, const Vector3& p_base_velocity);
|
||||
virtual Vector3 particles_get_emission_base_velocity(RID p_particles) const;
|
||||
|
||||
@@ -833,16 +833,16 @@ public:
|
||||
|
||||
virtual void particles_set_gravity_normal(RID p_particles, const Vector3& p_normal);
|
||||
virtual Vector3 particles_get_gravity_normal(RID p_particles) const;
|
||||
|
||||
|
||||
virtual void particles_set_variable(RID p_particles, ParticleVariable p_variable,float p_value);
|
||||
virtual float particles_get_variable(RID p_particles, ParticleVariable p_variable) const;
|
||||
|
||||
|
||||
virtual void particles_set_randomness(RID p_particles, ParticleVariable p_variable,float p_randomness);
|
||||
virtual float particles_get_randomness(RID p_particles, ParticleVariable p_variable) const;
|
||||
|
||||
|
||||
virtual void particles_set_color_phase_pos(RID p_particles, int p_phase, float p_pos);
|
||||
virtual float particles_get_color_phase_pos(RID p_particles, int p_phase) const;
|
||||
|
||||
|
||||
virtual void particles_set_color_phases(RID p_particles, int p_phases);
|
||||
virtual int particles_get_color_phases(RID p_particles) const;
|
||||
|
||||
@@ -860,32 +860,32 @@ public:
|
||||
|
||||
virtual void particles_set_material(RID p_particles, RID p_material,bool p_owned=false);
|
||||
virtual RID particles_get_material(RID p_particles) const;
|
||||
|
||||
|
||||
virtual void particles_set_height_from_velocity(RID p_particles, bool p_enable);
|
||||
virtual bool particles_has_height_from_velocity(RID p_particles) const;
|
||||
|
||||
virtual void particles_set_use_local_coordinates(RID p_particles, bool p_enable);
|
||||
virtual bool particles_is_using_local_coordinates(RID p_particles) const;
|
||||
|
||||
|
||||
|
||||
/* Light API */
|
||||
|
||||
|
||||
virtual RID light_create(LightType p_type);
|
||||
virtual LightType light_get_type(RID p_light) const;
|
||||
|
||||
virtual void light_set_color(RID p_light,LightColor p_type, const Color& p_color);
|
||||
virtual Color light_get_color(RID p_light,LightColor p_type) const;
|
||||
|
||||
virtual Color light_get_color(RID p_light,LightColor p_type) const;
|
||||
|
||||
|
||||
virtual void light_set_shadow(RID p_light,bool p_enabled);
|
||||
virtual bool light_has_shadow(RID p_light) const;
|
||||
|
||||
virtual bool light_has_shadow(RID p_light) const;
|
||||
|
||||
virtual void light_set_volumetric(RID p_light,bool p_enabled);
|
||||
virtual bool light_is_volumetric(RID p_light) const;
|
||||
|
||||
virtual bool light_is_volumetric(RID p_light) const;
|
||||
|
||||
virtual void light_set_projector(RID p_light,RID p_texture);
|
||||
virtual RID light_get_projector(RID p_light) const;
|
||||
|
||||
|
||||
virtual void light_set_param(RID p_light, LightParam p_var, float p_value);
|
||||
virtual float light_get_param(RID p_light, LightParam p_var) const;
|
||||
|
||||
@@ -902,7 +902,7 @@ public:
|
||||
|
||||
|
||||
/* SKELETON API */
|
||||
|
||||
|
||||
virtual RID skeleton_create();
|
||||
virtual void skeleton_resize(RID p_skeleton,int p_bones);
|
||||
virtual int skeleton_get_bone_count(RID p_skeleton) const;
|
||||
@@ -914,9 +914,9 @@ public:
|
||||
virtual RID room_create();
|
||||
virtual void room_set_bounds(RID p_room, const BSP_Tree& p_bounds);
|
||||
virtual BSP_Tree room_get_bounds(RID p_room) const;
|
||||
|
||||
|
||||
/* PORTAL API */
|
||||
|
||||
|
||||
virtual RID portal_create();
|
||||
virtual void portal_set_shape(RID p_portal, const Vector<Point2>& p_shape);
|
||||
virtual Vector<Point2> portal_get_shape(RID p_portal) const;
|
||||
@@ -962,12 +962,12 @@ public:
|
||||
virtual int baked_light_sampler_get_resolution(RID p_baked_light_sampler) const;
|
||||
|
||||
/* CAMERA API */
|
||||
|
||||
|
||||
virtual RID camera_create();
|
||||
virtual void camera_set_perspective(RID p_camera,float p_fovy_degrees, float p_z_near, float p_z_far);
|
||||
virtual void camera_set_orthogonal(RID p_camera,float p_size, float p_z_near, float p_z_far);
|
||||
virtual void camera_set_transform(RID p_camera,const Transform& p_transform);
|
||||
|
||||
virtual void camera_set_transform(RID p_camera,const Transform& p_transform);
|
||||
|
||||
virtual void camera_set_visible_layers(RID p_camera,uint32_t p_layers);
|
||||
virtual uint32_t camera_get_visible_layers(RID p_camera) const;
|
||||
|
||||
@@ -1001,7 +1001,7 @@ public:
|
||||
|
||||
virtual void viewport_set_rect(RID p_viewport,const ViewportRect& p_rect);
|
||||
virtual ViewportRect viewport_get_rect(RID p_viewport) const;
|
||||
|
||||
|
||||
virtual void viewport_set_hide_scenario(RID p_viewport,bool p_hide);
|
||||
virtual void viewport_set_hide_canvas(RID p_viewport,bool p_hide);
|
||||
virtual void viewport_set_disable_environment(RID p_viewport,bool p_disable);
|
||||
@@ -1012,8 +1012,8 @@ public:
|
||||
virtual RID viewport_get_scenario(RID p_viewport) const;
|
||||
virtual void viewport_attach_canvas(RID p_viewport,RID p_canvas);
|
||||
virtual void viewport_remove_canvas(RID p_viewport,RID p_canvas);
|
||||
virtual void viewport_set_canvas_transform(RID p_viewport,RID p_canvas,const Matrix32& p_offset);
|
||||
virtual Matrix32 viewport_get_canvas_transform(RID p_viewport,RID p_canvas) const;
|
||||
virtual void viewport_set_canvas_transform(RID p_viewport,RID p_canvas,const Matrix32& p_offset);
|
||||
virtual Matrix32 viewport_get_canvas_transform(RID p_viewport,RID p_canvas) const;
|
||||
virtual void viewport_set_global_canvas_transform(RID p_viewport,const Matrix32& p_transform);
|
||||
virtual Matrix32 viewport_get_global_canvas_transform(RID p_viewport) const;
|
||||
virtual void viewport_set_canvas_layer(RID p_viewport,RID p_canvas,int p_layer);
|
||||
@@ -1038,10 +1038,10 @@ public:
|
||||
virtual void environment_fx_set_param(RID p_env,EnvironmentFxParam p_effect,const Variant& p_param);
|
||||
virtual Variant environment_fx_get_param(RID p_env,EnvironmentFxParam p_effect) const;
|
||||
|
||||
|
||||
|
||||
/* SCENARIO API */
|
||||
|
||||
virtual RID scenario_create();
|
||||
|
||||
virtual RID scenario_create();
|
||||
|
||||
virtual void scenario_set_debug(RID p_scenario,ScenarioDebugMode p_debug_mode);
|
||||
virtual void scenario_set_environment(RID p_scenario, RID p_environment);
|
||||
@@ -1049,9 +1049,9 @@ public:
|
||||
virtual void scenario_set_fallback_environment(RID p_scenario, RID p_environment);
|
||||
|
||||
|
||||
|
||||
|
||||
/* INSTANCING API */
|
||||
|
||||
|
||||
virtual RID instance_create();
|
||||
|
||||
virtual void instance_set_base(RID p_instance, RID p_base);
|
||||
@@ -1113,7 +1113,7 @@ public:
|
||||
virtual bool instance_light_is_enabled(RID p_instance) const;
|
||||
|
||||
/* CANVAS (2D) */
|
||||
|
||||
|
||||
virtual RID canvas_create();
|
||||
virtual void canvas_set_item_mirroring(RID p_canvas,RID p_item,const Point2& p_mirroring);
|
||||
virtual Point2 canvas_get_item_mirroring(RID p_canvas,RID p_item) const;
|
||||
@@ -1215,7 +1215,7 @@ public:
|
||||
virtual RID canvas_item_material_create();
|
||||
virtual void canvas_item_material_set_shader(RID p_material, RID p_shader);
|
||||
virtual void canvas_item_material_set_shader_param(RID p_material, const StringName& p_param, const Variant& p_value);
|
||||
virtual Variant canvas_item_material_get_shader_param(RID p_material, const StringName& p_param) const;
|
||||
virtual Variant canvas_item_material_get_shader_param(RID p_material, const StringName& p_param) const;
|
||||
virtual void canvas_item_material_set_shading_mode(RID p_material, CanvasItemShadingMode p_mode);
|
||||
|
||||
|
||||
@@ -1232,7 +1232,7 @@ public:
|
||||
virtual void black_bars_set_images(RID p_left, RID p_top, RID p_right, RID p_bottom);
|
||||
|
||||
/* FREE */
|
||||
|
||||
|
||||
virtual void free( RID p_rid );
|
||||
|
||||
/* CUSTOM SHADE MODEL */
|
||||
@@ -1249,7 +1249,7 @@ public:
|
||||
virtual void draw();
|
||||
virtual void sync();
|
||||
|
||||
virtual void init();
|
||||
virtual void init();
|
||||
virtual void finish();
|
||||
|
||||
virtual bool has_changed() const;
|
||||
@@ -1264,7 +1264,7 @@ public:
|
||||
virtual void set_boot_image(const Image& p_image, const Color& p_color, bool p_scale);
|
||||
virtual void set_default_clear_color(const Color& p_color);
|
||||
|
||||
VisualServerRaster(Rasterizer *p_rasterizer);
|
||||
VisualServerRaster(Rasterizer *p_rasterizer);
|
||||
~VisualServerRaster();
|
||||
|
||||
};
|
||||
|
||||
@@ -35,20 +35,20 @@ void VisualServerWrapMT::thread_exit() {
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::thread_draw() {
|
||||
|
||||
|
||||
|
||||
|
||||
draw_mutex->lock();
|
||||
|
||||
|
||||
draw_pending--;
|
||||
bool draw=(draw_pending==0);// only draw when no more flushes are pending
|
||||
|
||||
|
||||
draw_mutex->unlock();
|
||||
|
||||
|
||||
if (draw) {
|
||||
|
||||
|
||||
visual_server->draw();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::thread_flush() {
|
||||
@@ -67,10 +67,10 @@ void VisualServerWrapMT::thread_flush() {
|
||||
void VisualServerWrapMT::_thread_callback(void *_instance) {
|
||||
|
||||
VisualServerWrapMT *vsmt = reinterpret_cast<VisualServerWrapMT*>(_instance);
|
||||
|
||||
|
||||
|
||||
vsmt->thread_loop();
|
||||
}
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::thread_loop() {
|
||||
|
||||
@@ -79,18 +79,18 @@ void VisualServerWrapMT::thread_loop() {
|
||||
OS::get_singleton()->make_rendering_thread();
|
||||
|
||||
visual_server->init();
|
||||
|
||||
|
||||
exit=false;
|
||||
draw_thread_up=true;
|
||||
while(!exit) {
|
||||
// flush commands one by one, until exit is requested
|
||||
command_queue.wait_and_flush_one();
|
||||
}
|
||||
|
||||
|
||||
command_queue.flush_all(); // flush all
|
||||
|
||||
|
||||
visual_server->finish();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ void VisualServerWrapMT::sync() {
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::draw() {
|
||||
|
||||
|
||||
|
||||
if (create_thread) {
|
||||
|
||||
@@ -155,7 +155,7 @@ void VisualServerWrapMT::init() {
|
||||
|
||||
visual_server->init();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::finish() {
|
||||
@@ -164,7 +164,7 @@ void VisualServerWrapMT::finish() {
|
||||
if (thread) {
|
||||
|
||||
command_queue.push( this, &VisualServerWrapMT::thread_exit);
|
||||
Thread::wait_to_finish( thread );
|
||||
Thread::wait_to_finish( thread );
|
||||
memdelete(thread);
|
||||
|
||||
|
||||
|
||||
@@ -41,9 +41,9 @@ class VisualServerWrapMT : public VisualServer {
|
||||
|
||||
// the real visual server
|
||||
mutable VisualServer *visual_server;
|
||||
|
||||
|
||||
mutable CommandQueueMT command_queue;
|
||||
|
||||
|
||||
static void _thread_callback(void *_instance);
|
||||
void thread_loop();
|
||||
|
||||
@@ -52,7 +52,7 @@ class VisualServerWrapMT : public VisualServer {
|
||||
Thread *thread;
|
||||
volatile bool draw_thread_up;
|
||||
bool create_thread;
|
||||
|
||||
|
||||
Mutex *draw_mutex;
|
||||
int draw_pending;
|
||||
void thread_draw();
|
||||
@@ -433,7 +433,7 @@ public:
|
||||
FUNC2(viewport_set_render_target_vflip,RID,bool);
|
||||
FUNC1RC(bool,viewport_get_render_target_vflip,RID);
|
||||
FUNC2(viewport_set_render_target_to_screen_rect,RID,const Rect2&);
|
||||
|
||||
|
||||
FUNC2(viewport_set_render_target_clear_on_new_frame,RID,bool);
|
||||
FUNC1RC(bool,viewport_get_render_target_clear_on_new_frame,RID);
|
||||
FUNC1(viewport_render_target_clear,RID);
|
||||
@@ -660,7 +660,7 @@ public:
|
||||
FUNC0R(RID,canvas_item_material_create);
|
||||
FUNC2(canvas_item_material_set_shader,RID,RID);
|
||||
FUNC3(canvas_item_material_set_shader_param,RID,const StringName&,const Variant&);
|
||||
FUNC2RC(Variant,canvas_item_material_get_shader_param,RID,const StringName&);
|
||||
FUNC2RC(Variant,canvas_item_material_get_shader_param,RID,const StringName&);
|
||||
FUNC2(canvas_item_material_set_shading_mode,RID,CanvasItemShadingMode);
|
||||
|
||||
/* CURSOR */
|
||||
|
||||
Reference in New Issue
Block a user