diff --git a/SDK/include/NDK/LuaAPI.inl b/SDK/include/NDK/LuaAPI.inl index 685603a6a..4d040c57a 100644 --- a/SDK/include/NDK/LuaAPI.inl +++ b/SDK/include/NDK/LuaAPI.inl @@ -545,6 +545,22 @@ namespace Nz return 1; } + /*! + * \brief Queries arguments for Lua + * \return 1 in case of success + * + * \param instance Lua instance to interact with + * \param index Index type + * \param renderable Resulting reference to a material + */ + + inline unsigned int LuaImplQueryArg(const LuaInstance& instance, int index, MaterialRef* materialRef, TypeTag) + { + *materialRef = *static_cast(instance.CheckUserdata(index, "Material")); + + return 1; + } + /*! * \brief Queries arguments for Lua * \return 1 in case of success @@ -564,6 +580,7 @@ namespace Nz params->loadHeightMap = instance.CheckField("LoadHeightMap", params->loadHeightMap); params->loadNormalMap = instance.CheckField("LoadNormalMap", params->loadNormalMap); params->loadSpecularMap = instance.CheckField("LoadSpecularMap", params->loadSpecularMap); + params->shaderName = instance.CheckField("ShaderName", params->shaderName); return 1; } @@ -1035,6 +1052,20 @@ namespace Nz #ifndef NDK_SERVER + /*! + * \brief Replies by value for Lua + * \return 1 in case of success + * + * \param instance Lua instance to interact with + * \param handle Resulting material + */ + + inline int LuaImplReplyVal(const LuaInstance& instance, MaterialRef&& handle, TypeTag) + { + instance.PushInstance("Material", handle); + return 1; + } + /*! * \brief Replies by value for Lua * \return 1 in case of success diff --git a/SDK/include/NDK/LuaBinding.hpp b/SDK/include/NDK/LuaBinding.hpp index d22628470..f8de961e2 100644 --- a/SDK/include/NDK/LuaBinding.hpp +++ b/SDK/include/NDK/LuaBinding.hpp @@ -76,6 +76,7 @@ namespace Ndk // Graphics Nz::LuaClass instancedRenderable; + Nz::LuaClass material; Nz::LuaClass model; Nz::LuaClass sprite; Nz::LuaClass spriteLibrary; diff --git a/SDK/src/NDK/LuaBinding.cpp b/SDK/src/NDK/LuaBinding.cpp index 3a82ffe1a..888e8fe4f 100644 --- a/SDK/src/NDK/LuaBinding.cpp +++ b/SDK/src/NDK/LuaBinding.cpp @@ -56,6 +56,7 @@ namespace Ndk // Graphics instancedRenderable("InstancedRenderable"), + material("Material"), model("Model"), sprite("Sprite"), spriteLibrary("SpriteLibrary"), diff --git a/SDK/src/NDK/LuaBinding_Graphics.cpp b/SDK/src/NDK/LuaBinding_Graphics.cpp index 3f59b7400..c36098c7a 100644 --- a/SDK/src/NDK/LuaBinding_Graphics.cpp +++ b/SDK/src/NDK/LuaBinding_Graphics.cpp @@ -14,6 +14,243 @@ namespace Ndk { /*********************************** Nz::InstancedRenderable ***********************************/ + /*********************************** Nz::Material ***********************************/ + material.SetConstructor([] (Nz::LuaInstance& lua, Nz::MaterialRef* instance, std::size_t argumentCount) + { + switch (argumentCount) + { + case 0: + Nz::PlacementNew(instance, Nz::Material::New()); + return true; + + case 1: + { + if (lua.IsOfType(1, "MaterialPipeline")) + { + Nz::PlacementNew(instance, Nz::Material::New(*static_cast(lua.ToUserdata(1)))); + return true; + } + else if (lua.IsOfType(1, "Material")) + { + Nz::PlacementNew(instance, Nz::Material::New(**static_cast(lua.ToUserdata(1)))); + return true; + } + else + { + int argIndex = 1; + Nz::PlacementNew(instance, Nz::Material::New(lua.Check(&argIndex))); + return true; + } + } + } + + lua.Error("No matching overload for constructor"); + return false; + }); + + material.BindMethod("Configure", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "MaterialPipeline")) + { + instance->Configure(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->Configure(lua.Check(&argIndex))); + return 1; + } + }); + + material.BindMethod("EnableAlphaTest", &Nz::Material::EnableAlphaTest); + material.BindMethod("EnableBlending", &Nz::Material::EnableBlending); + material.BindMethod("EnableColorWrite", &Nz::Material::EnableColorWrite); + material.BindMethod("EnableDepthBuffer", &Nz::Material::EnableDepthBuffer); + material.BindMethod("EnableDepthSorting", &Nz::Material::EnableDepthSorting); + material.BindMethod("EnableDepthWrite", &Nz::Material::EnableDepthWrite); + material.BindMethod("EnableFaceCulling", &Nz::Material::EnableFaceCulling); + material.BindMethod("EnableScissorTest", &Nz::Material::EnableScissorTest); + material.BindMethod("EnableShadowCasting", &Nz::Material::EnableShadowCasting); + material.BindMethod("EnableShadowReceive", &Nz::Material::EnableShadowReceive); + material.BindMethod("EnableStencilTest", &Nz::Material::EnableStencilTest); + + material.BindMethod("EnsurePipelineUpdate", &Nz::Material::EnsurePipelineUpdate); + + material.BindMethod("GetAlphaMap", &Nz::Material::GetAlphaMap); + material.BindMethod("GetAlphaThreshold", &Nz::Material::GetAlphaThreshold); + material.BindMethod("GetAmbientColor", &Nz::Material::GetAmbientColor); + material.BindMethod("GetDepthFunc", &Nz::Material::GetDepthFunc); + material.BindMethod("GetDepthMaterial", &Nz::Material::GetDepthMaterial); + material.BindMethod("GetDiffuseColor", &Nz::Material::GetDiffuseColor); + material.BindMethod("GetDiffuseMap", &Nz::Material::GetDiffuseMap); + //material.BindMethod("GetDiffuseSampler", &Nz::Material::GetDiffuseSampler); + material.BindMethod("GetDstBlend", &Nz::Material::GetDstBlend); + material.BindMethod("GetEmissiveMap", &Nz::Material::GetEmissiveMap); + material.BindMethod("GetFaceCulling", &Nz::Material::GetFaceCulling); + material.BindMethod("GetFaceFilling", &Nz::Material::GetFaceFilling); + material.BindMethod("GetHeightMap", &Nz::Material::GetHeightMap); + material.BindMethod("GetLineWidth", &Nz::Material::GetLineWidth); + material.BindMethod("GetNormalMap", &Nz::Material::GetNormalMap); + //material.BindMethod("GetPipeline", &Nz::Material::GetPipeline); + //material.BindMethod("GetPipelineInfo", &Nz::Material::GetPipelineInfo); + material.BindMethod("GetPointSize", &Nz::Material::GetPointSize); + //material.BindMethod("GetShader", &Nz::Material::GetShader); + material.BindMethod("GetShininess", &Nz::Material::GetShininess); + material.BindMethod("GetSpecularColor", &Nz::Material::GetSpecularColor); + material.BindMethod("GetSpecularMap", &Nz::Material::GetSpecularMap); + //material.BindMethod("GetSpecularSampler", &Nz::Material::GetSpecularSampler); + material.BindMethod("GetSrcBlend", &Nz::Material::GetSrcBlend); + + material.BindMethod("HasAlphaMap", &Nz::Material::HasAlphaMap); + material.BindMethod("HasDepthMaterial", &Nz::Material::HasDepthMaterial); + material.BindMethod("HasDiffuseMap", &Nz::Material::HasDiffuseMap); + material.BindMethod("HasEmissiveMap", &Nz::Material::HasEmissiveMap); + material.BindMethod("HasHeightMap", &Nz::Material::HasHeightMap); + material.BindMethod("HasNormalMap", &Nz::Material::HasNormalMap); + material.BindMethod("HasSpecularMap", &Nz::Material::HasSpecularMap); + + material.BindMethod("IsAlphaTestEnabled", &Nz::Material::IsAlphaTestEnabled); + material.BindMethod("IsBlendingEnabled", &Nz::Material::IsBlendingEnabled); + material.BindMethod("IsColorWriteEnabled", &Nz::Material::IsColorWriteEnabled); + material.BindMethod("IsDepthBufferEnabled", &Nz::Material::IsDepthBufferEnabled); + material.BindMethod("IsDepthSortingEnabled", &Nz::Material::IsDepthSortingEnabled); + material.BindMethod("IsDepthWriteEnabled", &Nz::Material::IsDepthWriteEnabled); + material.BindMethod("IsFaceCullingEnabled", &Nz::Material::IsFaceCullingEnabled); + material.BindMethod("IsScissorTestEnabled", &Nz::Material::IsScissorTestEnabled); + material.BindMethod("IsStencilTestEnabled", &Nz::Material::IsStencilTestEnabled); + material.BindMethod("IsShadowCastingEnabled", &Nz::Material::IsShadowCastingEnabled); + material.BindMethod("IsShadowReceiveEnabled", &Nz::Material::IsShadowReceiveEnabled); + + material.BindMethod("LoadFromFile", &Nz::Material::LoadFromFile); + + material.BindMethod("Reset", &Nz::Material::Reset); + + material.BindMethod("SetAlphaThreshold", &Nz::Material::SetAlphaThreshold); + material.BindMethod("SetAmbientColor", &Nz::Material::SetAmbientColor); + material.BindMethod("SetDepthFunc", &Nz::Material::SetDepthFunc); + material.BindMethod("SetDepthFunc", &Nz::Material::SetDepthFunc); + material.BindMethod("SetDepthMaterial", &Nz::Material::SetDepthMaterial); + material.BindMethod("SetDiffuseColor", &Nz::Material::SetDiffuseColor); + //material.BindMethod("SetDiffuseSampler", &Nz::Material::SetDiffuseSampler); + material.BindMethod("SetDstBlend", &Nz::Material::SetDstBlend); + material.BindMethod("SetFaceCulling", &Nz::Material::SetFaceCulling); + material.BindMethod("SetFaceFilling", &Nz::Material::SetFaceFilling); + material.BindMethod("SetLineWidth", &Nz::Material::SetLineWidth); + material.BindMethod("SetPointSize", &Nz::Material::SetPointSize); + material.BindMethod("SetShininess", &Nz::Material::SetShininess); + material.BindMethod("SetSpecularColor", &Nz::Material::SetSpecularColor); + material.BindMethod("SetSpecularColor", &Nz::Material::SetSpecularColor); + //material.BindMethod("SetSpecularSampler", &Nz::Material::SetSpecularSampler); + material.BindMethod("SetSrcBlend", &Nz::Material::SetSrcBlend); + + material.BindStaticMethod("GetDefault", &Nz::Material::GetDefault); + + material.BindMethod("SetAlphaMap", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "Texture")) + { + instance->SetAlphaMap(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->SetAlphaMap(lua.Check(&argIndex))); + return 1; + } + }); + + material.BindMethod("SetDiffuseMap", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "Texture")) + { + instance->SetDiffuseMap(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->SetDiffuseMap(lua.Check(&argIndex))); + return 1; + } + }); + + material.BindMethod("SetEmissiveMap", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "Texture")) + { + instance->SetEmissiveMap(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->SetEmissiveMap(lua.Check(&argIndex))); + return 1; + } + }); + + material.BindMethod("SetHeightMap", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "Texture")) + { + instance->SetHeightMap(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->SetHeightMap(lua.Check(&argIndex))); + return 1; + } + }); + + material.BindMethod("SetNormalMap", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "Texture")) + { + instance->SetNormalMap(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->SetNormalMap(lua.Check(&argIndex))); + return 1; + } + }); + + material.BindMethod("SetShader", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "UberShader")) + { + instance->SetShader(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->SetShader(lua.Check(&argIndex))); + return 1; + } + }); + + material.BindMethod("SetSpecularMap", [] (Nz::LuaInstance& lua, Nz::MaterialRef& instance) -> int + { + if (lua.IsOfType(1, "Texture")) + { + instance->SetSpecularMap(*static_cast(lua.ToUserdata(1))); + return 0; + } + else + { + int argIndex = 1; + lua.Push(instance->SetSpecularMap(lua.Check(&argIndex))); + return 1; + } + }); + /*********************************** Nz::Model ***********************************/ model.Inherit(instancedRenderable, [] (Nz::ModelRef* model) -> Nz::InstancedRenderableRef* { @@ -26,7 +263,7 @@ namespace Ndk return true; }); - //modelClass.SetMethod("GetMaterial", &Nz::Model::GetMaterial); + //model.BindMethod("GetMaterial", &Nz::Model::GetMaterial); model.BindMethod("GetMaterialCount", &Nz::Model::GetMaterialCount); //modelClass.SetMethod("GetMesh", &Nz::Model::GetMesh); model.BindMethod("GetSkin", &Nz::Model::GetSkin); @@ -37,7 +274,7 @@ namespace Ndk model.BindMethod("Reset", &Nz::Model::Reset); - //modelClass.SetMethod("SetMaterial", &Nz::Model::SetMaterial); + //model.BindMethod("SetMaterial", &Nz::Model::SetMaterial); //modelClass.SetMethod("SetMesh", &Nz::Model::SetMesh); //modelClass.SetMethod("SetSequence", &Nz::Model::SetSequence); model.BindMethod("SetSkin", &Nz::Model::SetSkin); @@ -57,7 +294,7 @@ namespace Ndk sprite.BindMethod("GetColor", &Nz::Sprite::GetColor); sprite.BindMethod("GetCornerColor", &Nz::Sprite::GetCornerColor); - //spriteClass.BindMethod("GetMaterial", &Nz::Sprite::GetMaterial); + sprite.BindMethod("GetMaterial", &Nz::Sprite::GetMaterial); sprite.BindMethod("GetOrigin", &Nz::Sprite::GetOrigin); sprite.BindMethod("GetSize", &Nz::Sprite::GetSize); sprite.BindMethod("GetTextureCoords", &Nz::Sprite::GetTextureCoords); @@ -65,7 +302,7 @@ namespace Ndk sprite.BindMethod("SetColor", &Nz::Sprite::SetColor); sprite.BindMethod("SetCornerColor", &Nz::Sprite::SetCornerColor); sprite.BindMethod("SetDefaultMaterial", &Nz::Sprite::SetDefaultMaterial); - //spriteClass.BindMethod("SetMaterial", &Nz::Sprite::SetMaterial, true); + sprite.BindMethod("SetMaterial", &Nz::Sprite::SetMaterial, true); sprite.BindMethod("SetOrigin", &Nz::Sprite::SetOrigin); sprite.BindMethod("SetSize", (void(Nz::Sprite::*)(const Nz::Vector2f&)) &Nz::Sprite::SetSize); sprite.BindMethod("SetTexture", &Nz::Sprite::SetTexture, true); @@ -90,6 +327,7 @@ namespace Ndk void LuaBinding::RegisterGraphics(Nz::LuaInstance& instance) { instancedRenderable.Register(instance); + material.Register(instance); model.Register(instance); sprite.Register(instance); spriteLibrary.Register(instance);