summaryrefslogtreecommitdiff
path: root/servers/visual/rasterizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'servers/visual/rasterizer.h')
-rw-r--r--servers/visual/rasterizer.h85
1 files changed, 72 insertions, 13 deletions
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h
index 0b54fec859..77d4da81d9 100644
--- a/servers/visual/rasterizer.h
+++ b/servers/visual/rasterizer.h
@@ -51,10 +51,11 @@ protected:
struct {
uint16_t texcoord_mask;
uint8_t texture_mask;
- uint8_t detail_blend:2;
+ uint8_t light_shader:2;
bool use_alpha:1;
bool use_color_array:1;
bool use_pointsize:1;
+ bool discard_alpha:1;
bool valid:1;
};
@@ -80,10 +81,11 @@ protected:
RID self;
bool use_alpha;
bool use_color_array;
+ bool discard_alpha;
bool use_pointsize;
float point_size;
Transform uv_xform;
- VS::MaterialBlendMode detail_blend;
+ VS::FixedMaterialLightShader light_shader;
RID texture[VS::FIXED_MATERIAL_PARAM_MAX];
Variant param[VS::FIXED_MATERIAL_PARAM_MAX];
VS::FixedMaterialTexCoordMode texture_tc[VS::FIXED_MATERIAL_PARAM_MAX];
@@ -100,7 +102,8 @@ protected:
k.use_alpha=use_alpha;
k.use_color_array=use_color_array;
k.use_pointsize=use_pointsize;
- k.detail_blend=detail_blend;
+ k.discard_alpha=discard_alpha;
+ k.light_shader=light_shader;
k.valid=true;
for(int i=0;i<VS::FIXED_MATERIAL_PARAM_MAX;i++) {
if (texture[i].is_valid()) {
@@ -119,8 +122,9 @@ protected:
use_alpha=false;
use_color_array=false;
use_pointsize=false;
+ discard_alpha=false;
point_size=1.0;
- detail_blend=VS::MATERIAL_BLEND_MODE_MIX;
+ light_shader=VS::FIXED_MATERIAL_LIGHT_SHADER_LAMBERT;
for(int i=0;i<VS::FIXED_MATERIAL_PARAM_MAX;i++) {
texture_tc[i]=VS::FIXED_MATERIAL_TEXCOORD_UV;
}
@@ -153,6 +157,17 @@ protected:
void _free_fixed_material(const RID& p_material);
public:
+
+ enum ShadowFilterTechnique {
+ SHADOW_FILTER_NONE,
+ SHADOW_FILTER_PCF5,
+ SHADOW_FILTER_PCF13,
+ SHADOW_FILTER_ESM,
+ SHADOW_FILTER_VSM,
+ };
+
+
+
/* TEXTURE API */
virtual RID texture_create()=0;
@@ -177,9 +192,10 @@ public:
virtual void shader_set_mode(RID p_shader,VS::ShaderMode p_mode)=0;
virtual VS::ShaderMode shader_get_mode(RID p_shader) const=0;
- virtual void shader_set_code(RID p_shader, const String& p_vertex, const String& p_fragment,int p_vertex_ofs=0,int p_fragment_ofs=0)=0;
+ virtual void shader_set_code(RID p_shader, const String& p_vertex, const String& p_fragment,const String& p_light,int p_vertex_ofs=0,int p_fragment_ofs=0,int p_light_ofs=0)=0;
virtual String shader_get_fragment_code(RID p_shader) const=0;
virtual String shader_get_vertex_code(RID p_shader) const=0;
+ virtual String shader_get_light_code(RID p_shader) const=0;
virtual void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const=0;
@@ -196,11 +212,8 @@ public:
virtual void material_set_flag(RID p_material, VS::MaterialFlag p_flag,bool p_enabled)=0;
virtual bool material_get_flag(RID p_material,VS::MaterialFlag p_flag) const=0;
- virtual void material_set_hint(RID p_material, VS::MaterialHint p_hint,bool p_enabled)=0;
- virtual bool material_get_hint(RID p_material,VS::MaterialHint p_hint) const=0;
-
- virtual void material_set_shade_model(RID p_material, VS::MaterialShadeModel p_model)=0;
- virtual VS::MaterialShadeModel material_get_shade_model(RID p_material) const=0;
+ virtual void material_set_depth_draw_mode(RID p_material, VS::MaterialDepthDrawMode p_mode)=0;
+ virtual VS::MaterialDepthDrawMode material_get_depth_draw_mode(RID p_material) const=0;
virtual void material_set_blend_mode(RID p_material,VS::MaterialBlendMode p_mode)=0;
virtual VS::MaterialBlendMode material_get_blend_mode(RID p_material) const=0;
@@ -222,15 +235,15 @@ public:
virtual void fixed_material_set_texture(RID p_material,VS::FixedMaterialParam p_parameter, RID p_texture);
virtual RID fixed_material_get_texture(RID p_material,VS::FixedMaterialParam p_parameter) const;
- virtual void fixed_material_set_detail_blend_mode(RID p_material,VS::MaterialBlendMode p_mode);
- virtual VS::MaterialBlendMode fixed_material_get_detail_blend_mode(RID p_material) const;
-
virtual void fixed_material_set_texcoord_mode(RID p_material,VS::FixedMaterialParam p_parameter, VS::FixedMaterialTexCoordMode p_mode);
virtual VS::FixedMaterialTexCoordMode fixed_material_get_texcoord_mode(RID p_material,VS::FixedMaterialParam p_parameter) const;
virtual void fixed_material_set_uv_transform(RID p_material,const Transform& p_transform);
virtual Transform fixed_material_get_uv_transform(RID p_material) const;
+ virtual void fixed_material_set_light_shader(RID p_material,VS::FixedMaterialLightShader p_shader);
+ virtual VS::FixedMaterialLightShader fixed_material_get_light_shader(RID p_material) const;
+
virtual void fixed_material_set_point_size(RID p_material,float p_size);
virtual float fixed_material_get_point_size(RID p_material) const;
@@ -264,6 +277,9 @@ public:
virtual AABB mesh_get_aabb(RID p_mesh) const=0;
+ virtual void mesh_set_custom_aabb(RID p_mesh,const AABB& p_aabb)=0;
+ virtual AABB mesh_get_custom_aabb(RID p_mesh) const=0;
+
/* MULTIMESH API */
virtual RID multimesh_create()=0;
@@ -285,6 +301,27 @@ public:
virtual void multimesh_set_visible_instances(RID p_multimesh,int p_visible)=0;
virtual int multimesh_get_visible_instances(RID p_multimesh) const=0;
+ /* BAKED LIGHT */
+
+
+
+
+ /* IMMEDIATE API */
+
+ virtual RID immediate_create()=0;
+ virtual void immediate_begin(RID p_immediate,VS::PrimitiveType p_rimitive,RID p_texture=RID())=0;
+ virtual void immediate_vertex(RID p_immediate,const Vector3& p_vertex)=0;
+ virtual void immediate_normal(RID p_immediate,const Vector3& p_normal)=0;
+ virtual void immediate_tangent(RID p_immediate,const Plane& p_tangent)=0;
+ virtual void immediate_color(RID p_immediate,const Color& p_color)=0;
+ virtual void immediate_uv(RID p_immediate,const Vector2& tex_uv)=0;
+ virtual void immediate_uv2(RID p_immediate,const Vector2& tex_uv)=0;
+ virtual void immediate_end(RID p_immediate)=0;
+ virtual void immediate_clear(RID p_immediate)=0;
+ virtual AABB immediate_get_aabb(RID p_immediate) const=0;
+ virtual void immediate_set_material(RID p_immediate,RID p_material)=0;
+ virtual RID immediate_get_material(RID p_immediate) const=0;
+
/* PARTICLES API */
@@ -417,6 +454,7 @@ public:
virtual int light_instance_get_shadow_passes(RID p_light_instance) const=0;
virtual void light_instance_set_shadow_transform(RID p_light_instance, int p_index, const CameraMatrix& p_camera, const Transform& p_transform, float p_split_near=0,float p_split_far=0)=0;
virtual int light_instance_get_shadow_size(RID p_light_instance, int p_index=0) const=0;
+ virtual bool light_instance_get_pssm_shadow_overlap(RID p_light_instance) const=0;
/* SHADOWS */
@@ -457,6 +495,22 @@ public:
typedef Map<StringName,Variant> ParamOverrideMap;
+ struct BakedLightData {
+
+ VS::BakedLightMode mode;
+ RID octree_texture;
+ float color_multiplier; //used for both lightmaps and octree
+ Transform octree_transform;
+ Map<int,RID> lightmaps;
+ //cache
+
+ float octree_lattice_size;
+ float octree_lattice_divide;
+ float texture_multiplier;
+ float lightmap_multiplier;
+ int octree_steps;
+ Vector2 octree_tex_pixel_size;
+ };
struct InstanceData {
@@ -465,6 +519,9 @@ public:
RID material_override;
Vector<RID> light_instances;
Vector<float> morph_values;
+ BakedLightData *baked_light;
+ Transform *baked_light_octree_xform;
+ int baked_lightmap_id;
bool mirror :8;
bool depth_scale :8;
bool billboard :8;
@@ -474,6 +531,7 @@ public:
virtual void add_mesh( const RID& p_mesh, const InstanceData *p_data)=0;
virtual void add_multimesh( const RID& p_multimesh, const InstanceData *p_data)=0;
+ virtual void add_immediate( const RID& p_immediate, const InstanceData *p_data)=0;
virtual void add_particles( const RID& p_particle_instance, const InstanceData *p_data)=0;
@@ -531,6 +589,7 @@ public:
virtual bool is_material(const RID& p_rid) const=0;
virtual bool is_mesh(const RID& p_rid) const=0;
virtual bool is_multimesh(const RID& p_rid) const=0;
+ virtual bool is_immediate(const RID& p_rid) const=0;
virtual bool is_particles(const RID &p_beam) const=0;
virtual bool is_light(const RID& p_rid) const=0;