diff options
Diffstat (limited to 'scene/resources/material.cpp')
-rw-r--r-- | scene/resources/material.cpp | 124 |
1 files changed, 37 insertions, 87 deletions
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 091a46d4ab..2314926b2b 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -36,17 +36,9 @@ static const char*_flag_names[Material::FLAG_MAX]={ "invert_faces", "unshaded", "on_top", - "wireframe", - "billboard_sw", + "lightmap_on_uv2" }; -static const char*_hint_names[Material::HINT_MAX]={ - "decal", - "opaque_pre_zpass", - "no_shadow", - "no_depth_draw", - "no_alpha_depth_draw", -}; static const Material::Flag _flag_indices[Material::FLAG_MAX]={ Material::FLAG_VISIBLE, @@ -54,15 +46,7 @@ static const Material::Flag _flag_indices[Material::FLAG_MAX]={ Material::FLAG_INVERT_FACES, Material::FLAG_UNSHADED, Material::FLAG_ONTOP, - Material::FLAG_WIREFRAME, - Material::FLAG_BILLBOARD_TOGGLE -}; - -static const Material::Hint _hint_indices[Material::HINT_MAX]={ - Material::HINT_DECAL, - Material::HINT_OPAQUE_PRE_PASS, - Material::HINT_NO_SHADOW, - Material::HINT_NO_DEPTH_DRAW, + Material::FLAG_LIGHTMAP_ON_UV2 }; @@ -80,20 +64,6 @@ void Material::set_flag(Flag p_flag,bool p_enabled) { } -void Material::set_hint(Hint p_hint,bool p_enabled) { - - ERR_FAIL_INDEX(p_hint,HINT_MAX); - hints[p_hint]=p_enabled; - VisualServer::get_singleton()->material_set_hint(material,(VS::MaterialHint)p_hint,p_enabled); - _change_notify(); -} - -bool Material::get_hint(Hint p_hint) const { - - ERR_FAIL_INDEX_V(p_hint,HINT_MAX,false); - return hints[p_hint]; -} - void Material::set_blend_mode(BlendMode p_blend_mode) { ERR_FAIL_INDEX(p_blend_mode,3); @@ -108,17 +78,15 @@ Material::BlendMode Material::get_blend_mode() const { } -void Material::set_shade_model(ShadeModel p_model) { - - ERR_FAIL_INDEX(p_model,8); - shade_model=p_model; - VisualServer::get_singleton()->material_set_shade_model(material,(VS::MaterialShadeModel)p_model); +void Material::set_depth_draw_mode(DepthDrawMode p_depth_draw_mode) { + depth_draw_mode=p_depth_draw_mode; + VisualServer::get_singleton()->material_set_depth_draw_mode(material,(VS::MaterialDepthDrawMode)p_depth_draw_mode); } -Material::ShadeModel Material::get_shade_model() const { +Material::DepthDrawMode Material::get_depth_draw_mode() const { - return shade_model; + return depth_draw_mode; } bool Material::get_flag(Flag p_flag) const { @@ -144,49 +112,32 @@ void Material::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_flag","flag","enable"),&Material::set_flag); ObjectTypeDB::bind_method(_MD("get_flag","flag"),&Material::get_flag); - ObjectTypeDB::bind_method(_MD("set_hint","hint","enable"),&Material::set_hint); - ObjectTypeDB::bind_method(_MD("get_hint","hint"),&Material::get_hint); ObjectTypeDB::bind_method(_MD("set_blend_mode","mode"),&Material::set_blend_mode); ObjectTypeDB::bind_method(_MD("get_blend_mode"),&Material::get_blend_mode); - ObjectTypeDB::bind_method(_MD("set_shade_model","model"),&Material::set_shade_model); - ObjectTypeDB::bind_method(_MD("get_shade_model"),&Material::get_shade_model); ObjectTypeDB::bind_method(_MD("set_line_width","width"),&Material::set_line_width); ObjectTypeDB::bind_method(_MD("get_line_width"),&Material::get_line_width); + ObjectTypeDB::bind_method(_MD("set_depth_draw_mode","mode"),&Material::set_depth_draw_mode); + ObjectTypeDB::bind_method(_MD("get_depth_draw_mode"),&Material::get_depth_draw_mode); for(int i=0;i<FLAG_MAX;i++) ADD_PROPERTYI( PropertyInfo( Variant::BOOL, String()+"flags/"+_flag_names[i] ),_SCS("set_flag"),_SCS("get_flag"),_flag_indices[i]); - for(int i=0;i<HINT_MAX;i++) - ADD_PROPERTYI( PropertyInfo( Variant::BOOL, String()+"hints/"+_hint_names[i] ),_SCS("set_hint"),_SCS("get_hint"),_hint_indices[i]); ADD_PROPERTY( PropertyInfo( Variant::INT, "params/blend_mode",PROPERTY_HINT_ENUM,"Mix,Add,Sub,PMAlpha" ), _SCS("set_blend_mode"),_SCS("get_blend_mode")); + ADD_PROPERTY( PropertyInfo( Variant::INT, "params/depth_draw",PROPERTY_HINT_ENUM,"Always,Opaque Only,Pre-Pass Alpha,Never" ), _SCS("set_depth_draw_mode"),_SCS("get_depth_draw_mode")); ADD_PROPERTY( PropertyInfo( Variant::REAL, "params/line_width",PROPERTY_HINT_RANGE,"0.1,32.0,0.1" ), _SCS("set_line_width"),_SCS("get_line_width")); - BIND_CONSTANT( FLAG_VISIBLE ); BIND_CONSTANT( FLAG_DOUBLE_SIDED ); BIND_CONSTANT( FLAG_INVERT_FACES ); BIND_CONSTANT( FLAG_UNSHADED ); BIND_CONSTANT( FLAG_ONTOP ); - BIND_CONSTANT( FLAG_WIREFRAME ); - BIND_CONSTANT( FLAG_BILLBOARD_TOGGLE ); BIND_CONSTANT( FLAG_MAX ); - BIND_CONSTANT( HINT_DECAL ); - BIND_CONSTANT( HINT_OPAQUE_PRE_PASS ); - BIND_CONSTANT( HINT_NO_SHADOW ); - BIND_CONSTANT( HINT_NO_DEPTH_DRAW ); - BIND_CONSTANT( HINT_NO_DEPTH_DRAW_FOR_ALPHA ); - BIND_CONSTANT( HINT_MAX ); - - BIND_CONSTANT( SHADE_MODEL_LAMBERT ); - BIND_CONSTANT( SHADE_MODEL_LAMBERT_WRAP ); - BIND_CONSTANT( SHADE_MODEL_FRESNEL ); - BIND_CONSTANT( SHADE_MODEL_TOON ); - BIND_CONSTANT( SHADE_MODEL_CUSTOM_0 ); - BIND_CONSTANT( SHADE_MODEL_CUSTOM_1 ); - BIND_CONSTANT( SHADE_MODEL_CUSTOM_2 ); - BIND_CONSTANT( SHADE_MODEL_CUSTOM_3 ); + BIND_CONSTANT( DEPTH_DRAW_ALWAYS ); + BIND_CONSTANT( DEPTH_DRAW_OPAQUE_ONLY ); + BIND_CONSTANT( DEPTH_DRAW_OPAQUE_PRE_PASS_ALPHA ); + BIND_CONSTANT( DEPTH_DRAW_NEVER ); BIND_CONSTANT( BLEND_MODE_MIX ); BIND_CONSTANT( BLEND_MODE_ADD ); @@ -205,15 +156,11 @@ Material::Material(const RID& p_material) { flags[FLAG_INVERT_FACES]=false; flags[FLAG_UNSHADED]=false; flags[FLAG_ONTOP]=false; - flags[FLAG_WIREFRAME]=false; - flags[FLAG_BILLBOARD_TOGGLE]=false; - for(int i=0;i<HINT_MAX;i++) - hints[i]=false; - hints[HINT_NO_DEPTH_DRAW_FOR_ALPHA]=true; + depth_draw_mode=DEPTH_DRAW_OPAQUE_ONLY; blend_mode=BLEND_MODE_MIX; - shade_model = SHADE_MODEL_LAMBERT; + } Material::~Material() { @@ -340,6 +287,17 @@ FixedMaterial::TexCoordMode FixedMaterial::get_texcoord_mode(Parameter p_paramet return texture_texcoord[p_parameter]; } +void FixedMaterial::set_light_shader(LightShader p_shader) { + + light_shader=p_shader; + VS::get_singleton()->fixed_material_set_light_shader(material,VS::FixedMaterialLightShader(p_shader)); +} + +FixedMaterial::LightShader FixedMaterial::get_light_shader() const { + + return light_shader; +} + void FixedMaterial::set_uv_transform(const Transform& p_transform) { @@ -356,16 +314,6 @@ Transform FixedMaterial::get_uv_transform() const { -void FixedMaterial::set_detail_blend_mode(BlendMode p_mode) { - - detail_blend_mode=p_mode; - VS::get_singleton()->fixed_material_set_detail_blend_mode(material,(VS::MaterialBlendMode)p_mode); -} - -Material::BlendMode FixedMaterial::get_detail_blend_mode() const { - - return detail_blend_mode; -} void FixedMaterial::set_fixed_flag(FixedFlag p_flag, bool p_value) { ERR_FAIL_INDEX(p_flag,4); @@ -412,12 +360,12 @@ void FixedMaterial::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_uv_transform","transform"),&FixedMaterial::set_uv_transform); ObjectTypeDB::bind_method(_MD("get_uv_transform"),&FixedMaterial::get_uv_transform); + ObjectTypeDB::bind_method(_MD("set_light_shader","shader"),&FixedMaterial::set_light_shader); + ObjectTypeDB::bind_method(_MD("get_light_shader"),&FixedMaterial::get_light_shader); ObjectTypeDB::bind_method(_MD("set_point_size","size"),&FixedMaterial::set_point_size); ObjectTypeDB::bind_method(_MD("get_point_size"),&FixedMaterial::get_point_size); - ObjectTypeDB::bind_method(_MD("set_detail_blend_mode","mode"),&FixedMaterial::set_detail_blend_mode); - ObjectTypeDB::bind_method(_MD("get_detail_blend_mode"),&FixedMaterial::get_detail_blend_mode); ADD_PROPERTYI( PropertyInfo( Variant::BOOL, "fixed_flags/use_alpha" ), _SCS("set_fixed_flag"), _SCS("get_fixed_flag"), FLAG_USE_ALPHA); ADD_PROPERTYI( PropertyInfo( Variant::BOOL, "fixed_flags/use_color_array" ), _SCS("set_fixed_flag"), _SCS("get_fixed_flag"), FLAG_USE_COLOR_ARRAY); @@ -427,11 +375,10 @@ void FixedMaterial::_bind_methods() { ADD_PROPERTYI( PropertyInfo( Variant::COLOR, "params/specular", PROPERTY_HINT_COLOR_NO_ALPHA ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_SPECULAR ); ADD_PROPERTYI( PropertyInfo( Variant::COLOR, "params/emission", PROPERTY_HINT_COLOR_NO_ALPHA ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_EMISSION ); ADD_PROPERTYI( PropertyInfo( Variant::REAL, "params/specular_exp", PROPERTY_HINT_RANGE,"1,64,0.01" ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_SPECULAR_EXP ); - ADD_PROPERTY( PropertyInfo( Variant::REAL, "params/detail_blend", PROPERTY_HINT_ENUM,"Mix,Add,Sub,Mul" ), _SCS("set_detail_blend_mode"), _SCS("get_detail_blend_mode") ); ADD_PROPERTYI( PropertyInfo( Variant::REAL, "params/detail_mix", PROPERTY_HINT_RANGE,"0,1,0.01" ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_DETAIL ); ADD_PROPERTYI( PropertyInfo( Variant::REAL, "params/normal_depth", PROPERTY_HINT_RANGE,"-4,4,0.01" ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_NORMAL ); - ADD_PROPERTYI( PropertyInfo( Variant::REAL, "params/shade_param", PROPERTY_HINT_RANGE,"0,1,0.01" ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_SHADE_PARAM ); - + ADD_PROPERTY( PropertyInfo( Variant::INT, "params/shader", PROPERTY_HINT_ENUM,"Lambert,Wrap,Velvet,Toon" ), _SCS("set_light_shader"), _SCS("get_light_shader") ); + ADD_PROPERTYI( PropertyInfo( Variant::REAL, "params/shader_param", PROPERTY_HINT_RANGE,"0,1,0.01" ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_SHADE_PARAM ); ADD_PROPERTYI( PropertyInfo( Variant::REAL, "params/glow", PROPERTY_HINT_RANGE,"0,8,0.01" ), _SCS("set_parameter"), _SCS("get_parameter"), PARAM_GLOW ); ADD_PROPERTY( PropertyInfo( Variant::REAL, "params/point_size", PROPERTY_HINT_RANGE,"0,1024,1" ), _SCS("set_point_size"), _SCS("get_point_size")); ADD_PROPERTY( PropertyInfo( Variant::TRANSFORM, "uv_xform"), _SCS("set_uv_transform"), _SCS("get_uv_transform") ); @@ -479,7 +426,7 @@ FixedMaterial::FixedMaterial() : Material(VS::get_singleton()->fixed_material_cr param[PARAM_SHADE_PARAM]=0.5; param[PARAM_DETAIL]=1.0; - detail_blend_mode=BLEND_MODE_MIX; + fixed_flags[FLAG_USE_ALPHA]=false; fixed_flags[FLAG_USE_COLOR_ARRAY]=false; @@ -490,6 +437,8 @@ FixedMaterial::FixedMaterial() : Material(VS::get_singleton()->fixed_material_cr texture_texcoord[i]=TEXCOORD_UV; } + light_shader=LIGHT_SHADER_LAMBERT; + point_size=1.0; } @@ -633,7 +582,7 @@ ParticleSystemMaterial::ParticleSystemMaterial() :Material(VisualServer::get_sin set_flag(FLAG_DOUBLE_SIDED,true); set_flag(FLAG_UNSHADED,true); - set_hint(HINT_NO_DEPTH_DRAW,true); + set_depth_draw_mode(DEPTH_DRAW_NEVER); VisualServer::get_singleton()->fixed_material_set_flag(material,VS::FIXED_MATERIAL_FLAG_USE_ALPHA,true); VisualServer::get_singleton()->fixed_material_set_flag(material,VS::FIXED_MATERIAL_FLAG_USE_COLOR_ARRAY,true); } @@ -680,7 +629,8 @@ void UnshadedMaterial::set_use_alpha(bool p_use_alpha) { alpha=p_use_alpha; VS::get_singleton()->fixed_material_set_flag(material,VS::FIXED_MATERIAL_FLAG_USE_ALPHA,p_use_alpha); - set_hint(HINT_NO_DEPTH_DRAW,p_use_alpha); + //set_depth_draw_mode(); + //set_hint(HINT,p_use_alpha); } |