From 051abd04e4527095ef15412939450fbe504daebe Mon Sep 17 00:00:00 2001 From: chai <chaifix@163.com> Date: Tue, 26 Oct 2021 19:33:40 +0800 Subject: +texture & imagedata --- Runtime/Scripting/Rendering/Texture.bind.cpp | 143 +++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 Runtime/Scripting/Rendering/Texture.bind.cpp (limited to 'Runtime/Scripting/Rendering/Texture.bind.cpp') diff --git a/Runtime/Scripting/Rendering/Texture.bind.cpp b/Runtime/Scripting/Rendering/Texture.bind.cpp new file mode 100644 index 0000000..061a303 --- /dev/null +++ b/Runtime/Scripting/Rendering/Texture.bind.cpp @@ -0,0 +1,143 @@ +#include "Runtime/Graphics/Texture.h" + +using namespace LuaBind; + +LUA_BIND_REGISTRY(Texture) +{ + LUA_BIND_REGISTER_METHODS(state, + { "New", _New }, + { "GetWidth", _GetWidth }, + { "GetHeight", _GetHeight }, + { "GetSize", _GetSize }, + { "GetType", _GetType }, + { "GetFormat", _GetFormat }, + { "GetWrapMode", _GetWrapMode }, + { "GetImageData", _GetImageData }, + { "IsKeepImageData", _IsKeepImageData }, + { "GetFilterMode", _GetFilterMode } + ); +} + +LUA_BIND_POSTPROCESS(Texture) +{ + LUA_BIND_REGISTER_ENUM(state, "ETextureType", + { "TEX_2D", ETextureType::TEX_2D }, + { "TEX_CUBE", ETextureType::TEX_CUBE } + ); + LUA_BIND_REGISTER_ENUM(state, "ETextureFormat", + { "RGBA32", ETextureFormat::RGBA32 }, + { "RGB24", ETextureFormat::RGB24 }, + { "RGB16", ETextureFormat::RGB16 }, + { "R8", ETextureFormat::R8 }, + { "A8", ETextureFormat::A8 } + ); + LUA_BIND_REGISTER_ENUM(state, "ETextureWrapMode", + { "Clamp", ETextureWrapMode::Clamp }, + { "Repeat", ETextureWrapMode::Repeat }, + { "Mirror", ETextureWrapMode::Mirror } + ); + LUA_BIND_REGISTER_ENUM(state, "ETextureFilterMode", + { "Nearest", ETextureFilterMode::Nearest }, + { "Linear", ETextureFilterMode::Linear } + ); +} + +// Texture.New(imgData, keepImgData, type, format, wrapMode, filterMode) +LUA_BIND_IMPL_METHOD(Texture, _New) +{ + LUA_BIND_STATE(L); + LUA_BIND_CHECK(L, "U"); + + ImageData* imgData = state.GetUserdata<ImageData>(1); + + TextureSetting setting; + setting.keepImageData = state.GetValue(2, false); + setting.type = state.GetValue<int>(3, (int)ETextureType::TEX_2D); + setting.format = state.GetValue(4, (int)ETextureFormat::RGBA32); + setting.wrapMode = state.GetValue(5, (int)ETextureWrapMode::Clamp); + setting.filterMode = state.GetValue(6, (int)ETextureFilterMode::Linear); + + try + { + Texture* tex = new Texture(state.GetVM(), setting, imgData); + tex->PushUserdata(state); + return 1; + } + catch (TextureException e) + { + luaL_error(L, "Failed to create texture."); + return 0; + } + return 0; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetWidth) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_Width); + return 1; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetHeight) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_Height); + return 1; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetSize) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_Width); + state.Push(self->m_Height); + return 2; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetType) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_Type); + return 1; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetFormat) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_Format); + return 1; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetWrapMode) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_WrapMode); + return 1; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetFilterMode) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_FilterMode); + return 1; +} + +LUA_BIND_IMPL_METHOD(Texture, _IsKeepImageData) +{ + LUA_BIND_PREPARE(L, Texture); + state.Push(self->m_KeepPixelData); + return 1; +} + +LUA_BIND_IMPL_METHOD(Texture, _GetImageData) +{ + LUA_BIND_PREPARE(L, Texture); + if (self->m_KeepPixelData) + { + self->PushMemberRef(state, self->m_ImageData); + } + else + { + state.PushNil(); + } + return 1; +} -- cgit v1.1-26-g67d0