summaryrefslogtreecommitdiff
path: root/Runner
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-17 16:01:30 +0800
committerchai <chaifix@163.com>2021-10-17 16:01:30 +0800
commit6e73ca6ada8a41692809dae5db89c8db0675ce1e (patch)
tree3ca6f06b29b3e2c183750ddcff8d7a09d0785e6b /Runner
parente13f699ee5f575198552d94ada1167305c82bb2f (diff)
-Runner
Diffstat (limited to 'Runner')
-rw-r--r--Runner/FileSystem/FileSystem.cpp9
-rw-r--r--Runner/FileSystem/FileSystem.h24
-rw-r--r--Runner/FileSystem/Unzip.cpp0
-rw-r--r--Runner/FileSystem/Unzip.h0
-rw-r--r--Runner/Graphics/Color.h22
-rw-r--r--Runner/Graphics/Device.cpp73
-rw-r--r--Runner/Graphics/Device.h82
-rw-r--r--Runner/Graphics/DeviceDefine.h69
-rw-r--r--Runner/Graphics/FrameBuffer.cpp12
-rw-r--r--Runner/Graphics/FrameBuffer.h35
-rw-r--r--Runner/Graphics/GlyphAtlas.cpp0
-rw-r--r--Runner/Graphics/GlyphAtlas.h6
-rw-r--r--Runner/Graphics/GpuDataBuffer.cpp206
-rw-r--r--Runner/Graphics/GpuDataBuffer.h90
-rw-r--r--Runner/Graphics/ImageData.cpp0
-rw-r--r--Runner/Graphics/ImageData.h43
-rw-r--r--Runner/Graphics/OpenGL.cpp0
-rw-r--r--Runner/Graphics/OpenGL.h6
-rw-r--r--Runner/Graphics/Point.cpp0
-rw-r--r--Runner/Graphics/Point.h0
-rw-r--r--Runner/Graphics/PolyLine.cpp11
-rw-r--r--Runner/Graphics/PolyLine.h18
-rw-r--r--Runner/Graphics/Quad.cpp52
-rw-r--r--Runner/Graphics/Quad.h25
-rw-r--r--Runner/Graphics/RenderTexture.cpp0
-rw-r--r--Runner/Graphics/RenderTexture.h16
-rw-r--r--Runner/Graphics/Scripting/wrap_Device.cpp0
-rw-r--r--Runner/Graphics/Scripting/wrap_GL.cpp0
-rw-r--r--Runner/Graphics/Scripting/wrap_RenderTexture.cpp0
-rw-r--r--Runner/Graphics/Texture.cpp0
-rw-r--r--Runner/Graphics/Texture.h59
-rw-r--r--Runner/Graphics/VertexBuffer.cpp322
-rw-r--r--Runner/Graphics/VertexBuffer.h103
-rw-r--r--Runner/Input/Input.cpp3
-rw-r--r--Runner/Input/Input.h19
-rw-r--r--Runner/Main.cpp9
-rw-r--r--Runner/Math/AABB.h0
-rw-r--r--Runner/Math/Vector2.cpp0
-rw-r--r--Runner/Math/Vector2.h17
-rw-r--r--Runner/Math/Vector3.cpp1
-rw-r--r--Runner/Math/Vector3.h18
-rw-r--r--Runner/Mesh/Font.cpp0
-rw-r--r--Runner/Mesh/Font.h0
-rw-r--r--Runner/Mesh/FontManager.h0
-rw-r--r--Runner/Mesh/Glyph.h9
-rw-r--r--Runner/Mesh/Mesh.cpp4
-rw-r--r--Runner/Mesh/Mesh.h62
-rw-r--r--Runner/Mesh/MeshUtil.h6
-rw-r--r--Runner/Mesh/TextMesh.h11
-rw-r--r--Runner/Physics/Scripting/wrap_Joint.cpp0
-rw-r--r--Runner/Profiler/FrameStats.h29
-rw-r--r--Runner/Profiler/Profiler.h0
-rw-r--r--Runner/Scripting/luax.h18
-rw-r--r--Runner/Scripting/luax_cfunctions.cpp19
-rw-r--r--Runner/Scripting/luax_cfunctions.h25
-rw-r--r--Runner/Scripting/luax_class.cpp243
-rw-r--r--Runner/Scripting/luax_class.hpp207
-rw-r--r--Runner/Scripting/luax_class.inc637
-rw-r--r--Runner/Scripting/luax_config.h66
-rw-r--r--Runner/Scripting/luax_enum.cpp67
-rw-r--r--Runner/Scripting/luax_enum.h39
-rw-r--r--Runner/Scripting/luax_globalstate.h7
-rw-r--r--Runner/Scripting/luax_internal.h12
-rw-r--r--Runner/Scripting/luax_memberref.cpp16
-rw-r--r--Runner/Scripting/luax_memberref.h27
-rw-r--r--Runner/Scripting/luax_ref.cpp72
-rw-r--r--Runner/Scripting/luax_ref.h62
-rw-r--r--Runner/Scripting/luax_reftable.cpp120
-rw-r--r--Runner/Scripting/luax_reftable.h67
-rw-r--r--Runner/Scripting/luax_state.cpp857
-rw-r--r--Runner/Scripting/luax_state.h298
-rw-r--r--Runner/Scripting/luax_state.inc180
-rw-r--r--Runner/Scripting/luax_utility.h66
-rw-r--r--Runner/Scripting/luax_vm.cpp76
-rw-r--r--Runner/Scripting/luax_vm.h63
-rw-r--r--Runner/Scripting/luax_watchdog.cpp0
-rw-r--r--Runner/Scripting/luax_watchdog.h33
-rw-r--r--Runner/Shaders/ShaderChannel.h27
-rw-r--r--Runner/Shaders/ShaderDefine.cpp11
-rw-r--r--Runner/Shaders/ShaderDefine.h19
-rw-r--r--Runner/Shaders/ShaderUniform.h4
-rw-r--r--Runner/Threads/Mutex.cpp0
-rw-r--r--Runner/Threads/Mutex.h0
-rw-r--r--Runner/Threads/Semaphore.cpp0
-rw-r--r--Runner/Threads/Semaphore.h0
-rw-r--r--Runner/Threads/Thread.h0
-rw-r--r--Runner/Utilities/Assert.h8
-rw-r--r--Runner/Utilities/Base64.cpp0
-rw-r--r--Runner/Utilities/Base64.h0
-rw-r--r--Runner/Utilities/Exception.h6
-rw-r--r--Runner/Utilities/NonCopyable.h14
-rw-r--r--Runner/Utilities/Singleton.h45
-rw-r--r--Runner/Utilities/Type.h21
-rw-r--r--Runner/Utilities/UIDGenerator.h20
-rw-r--r--Runner/Utilities/Utf8.cpp0
-rw-r--r--Runner/Utilities/Utf8.h0
-rw-r--r--Runner/Utilities/UtilMacros.h16
97 files changed, 0 insertions, 4939 deletions
diff --git a/Runner/FileSystem/FileSystem.cpp b/Runner/FileSystem/FileSystem.cpp
deleted file mode 100644
index 8816f78..0000000
--- a/Runner/FileSystem/FileSystem.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "FileSystem.h"
-
-FileSystem& GetFileSystem() {
- if (!FileSystem::m_Instance)
- {
- FileSystem::m_Instance = new FileSystem();
- }
- return *FileSystem::m_Instance;
-}
diff --git a/Runner/FileSystem/FileSystem.h b/Runner/FileSystem/FileSystem.h
deleted file mode 100644
index aae39c1..0000000
--- a/Runner/FileSystem/FileSystem.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef FILESYSTEM_H
-#define FILESYSTEM_H
-
-#include <string>
-
-class FileSystem
-{
-public:
- std::string GetDataPath();
- std::string GetPersistentPath();
- std::string GetTempPath();
-
-private:
- FileSystem();
-
- static FileSystem* m_Instance;
-
- friend FileSystem& GetFileSystem();
-
-};
-
-FileSystem& GetFileSystem();
-
-#endif \ No newline at end of file
diff --git a/Runner/FileSystem/Unzip.cpp b/Runner/FileSystem/Unzip.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/FileSystem/Unzip.cpp
+++ /dev/null
diff --git a/Runner/FileSystem/Unzip.h b/Runner/FileSystem/Unzip.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/FileSystem/Unzip.h
+++ /dev/null
diff --git a/Runner/Graphics/Color.h b/Runner/Graphics/Color.h
deleted file mode 100644
index 461e7af..0000000
--- a/Runner/Graphics/Color.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef COLOR_H
-#define COLOR_H
-
-#include "../Utilities/Type.h"
-
-class ColorRGBAf
-{
-public:
- float r, g, b, a;
-
-};
-
-class ColorRGBA32
-{
-public:
- uint8 r, g, b, a;
-
-};
-
-using Color = ColorRGBAf;
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/Device.cpp b/Runner/Graphics/Device.cpp
deleted file mode 100644
index c28d007..0000000
--- a/Runner/Graphics/Device.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "Device.h"
-
-bool deviceInited = false;
-Device g_Device;
-
-Device::Device()
-{
- Assert(deviceInited);
- deviceInited = true;
-}
-
-void Device::Enable(DeviceEnable enabled)
-{
-
-}
-
-void Device::Disable(DeviceEnable enabled)
-{
-
-}
-
-void Device::IsEnable(uint flag)
-{
-
-}
-
-void Device::SetDepthTest(DepthTest testing)
-{
-
-}
-
-void Device::SetCullFace(CullFace face)
-{
-
-}
-
-void Device::SetStencilMask(byte stencilMask)
-{
-
-}
-
-void Device::SetStencilOp(StencilOp op)
-{
-
-}
-
-void Device::SetAntiAliasing(int level /*= 0*/)
-{
-
-}
-
-void Device::Clear(int clearFlag)
-{
-
-}
-
-void Device::BeginFrame()
-{
- m_IsInsideFrame = true;
-
-}
-
-void Device::EndFrame()
-{
- Get(GPU::BufferPool)->OnEndFrame();
-
- m_IsInsideFrame = false;
-}
-
-void Device::PresentFrame()
-{
-// swap buffers
-} \ No newline at end of file
diff --git a/Runner/Graphics/Device.h b/Runner/Graphics/Device.h
deleted file mode 100644
index 4e02b72..0000000
--- a/Runner/Graphics/Device.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef DEVICE_H
-#define DEVICE_H
-
-#include "../Utilities/NonCopyable.h"
-#include "../Utilities/Type.h"
-#include "../Utilities/Assert.h"
-
-#include "Texture.h"
-#include "Color.h"
-#include "DeviceDefine.h"
-#include "VertexBuffer.h"
-
-struct DeviceSetting
-{
- TextureFilter texFilter;
- TextureWrap texWrap;
-};
-
-class Device : public NonCopyable
-{
-public:
- Device();
- ~Device();
-
- void Initialize(DeviceSetting& setting);
-
- void Enable(DeviceEnable enabled);
- void Disable(DeviceEnable enabled);
- void IsEnable(uint flag);
-
- void SetDepthTest(DepthTest testing);
- void SetCullFace(CullFace face);
- void SetStencilMask(byte stencilMask);
- void SetStencilOp(StencilOp op);
-
- void SetAntiAliasing(int level = 0);
-
- void Clear(int clearFlag);
-
- void BeginFrame();
- void EndFrame();
- void PresentFrame();
-
- GET(SharedVertexBuffer*, SharedVBO, m_SharedVBO);
-
- GET_SET(Color, ClearColor, m_ClearColor);
-
- GET_SET(TextureFilter, TextureFilter, m_TexFilter);
- GET_SET(TextureWrap, TextureWrap, m_TexWrap);
-
- inline bool IsInsideFrame();
-
-private:
- uint m_EnableFlag;
-
- // Global texture setting
- TextureFilter m_TexFilter;
- TextureWrap m_TexWrap;
-
- Color m_ClearColor;
-
- DepthTest m_DepthTest;
- StencilTest m_StencilTest;
- StencilOp m_StencilOp;
- byte m_StencilMask;
-
- SharedVertexBuffer m_SharedVBO;
-
- bool m_IsInsideFrame;
-
-};
-
-extern Device g_Device;
-
-#define g_SharedVBO (*g_Device.GetSharedVBO())
-
-inline bool Device::IsInsideFrame()
-{
- return m_IsInsideFrame;
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/DeviceDefine.h b/Runner/Graphics/DeviceDefine.h
deleted file mode 100644
index 2f3cb6b..0000000
--- a/Runner/Graphics/DeviceDefine.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef DEVICE_DEFINE_H
-#define DEVICE_DEFINE_H
-
-enum DeviceEnable
-{
- DeviceEnable_DepthTest = 1,
- DeviceEnable_DepthWrite = 1 << 1,
- DeviceEnable_StencilTest = 1 << 2,
- DeviceEnable_StencilWrite = 1 << 3,
- DeviceEnable_Cull = 1 << 4,
- DeviceEnable_Blend = 1 << 5,
- DeviceEnable_AntiAliasing = 1 << 6,
-};
-
-enum DepthTest
-{
- DepthTest_Greater = 1,
- DepthTest_GreaterEqual,
- DepthTest_Less,
- DepthTest_LessEqual,
- DepthTest_Equal,
- DepthTest_NotEqual,
- DepthTest_Always,
-};
-
-enum StencilTest {
- StencilTest_Always,
- StencilTest_Never,
- StencilTest_Less,
- StencilTest_Equal,
- StencilTest_NotEqual,
- StencilTest_LessEqual,
- StencilTest_Greater,
- StencilTest_GreaterEqual,
-};
-
-enum StencilOp {
- StencilOp_Keep,
- StencilOp_Zero,
- StencilOp_Replace,
- StencilOp_Incr,
- StencilOp_IncrWrap,
- StencilOp_Decr,
- StencilOp_DecrWrap,
- StencilOp_Invert,
-};
-
-enum DeviceClear
-{
- DeviceClear_Depth = 1,
- DeviceClear_Stencil = 1 << 1,
- DeviceClear_Color = 1 << 2,
-};
-
-enum CullFace
-{
- CullFace_Front = 1,
- CullFace_Back = 2,
- CullFace_None = 3,
- CullFace_All = 4,
-};
-
-enum BlendMode
-{
- BlendMode_Additive = 1,
- BlendMode_Substract = 1,
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/FrameBuffer.cpp b/Runner/Graphics/FrameBuffer.cpp
deleted file mode 100644
index e675aab..0000000
--- a/Runner/Graphics/FrameBuffer.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "FrameBuffer.h"
-
-// 有些版本的OpenGL不支持绑定多个RT
-bool FrameBuffer::BindRenderTexture(RenderTexture* rt, int location /* = 0 */)
-{
-
-}
-
-bool FrameBuffer::Blit(FrameBuffer* target)
-{
-
-}
diff --git a/Runner/Graphics/FrameBuffer.h b/Runner/Graphics/FrameBuffer.h
deleted file mode 100644
index 4b9104b..0000000
--- a/Runner/Graphics/FrameBuffer.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef FRAME_BUFFER_H
-#define FRAME_BUFFER_H
-
-#include "OpenGL.h"
-#include "RenderTexture.h"
-
-// Fbo,所有绑定的texture和renderbuffer的target都是可读写的GL_FRAMEBUFFER
-class FrameBuffer
-{
-public:
- enum FrameBufferUsage
- {
- FrameBufferUsage_None = 0,
- FrameBufferUsage_Depth = 1,
- FrameBufferUsage_Stencil = 2,
- FrameBufferUsage_DepthStencil = 3,
- };
-
- FrameBuffer(FrameBufferUsage usage, int width, int height);
- ~FrameBuffer();
-
- bool Blit(FrameBuffer* target);
-
- bool BindRenderTexture(RenderTexture* rt, int location = 0);
-
- GET(int, Width, m_Width);
- GET(int, Height, m_Height);
-
-private:
- int m_Width, m_Height;
- FrameBufferUsage m_Usage;
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/GlyphAtlas.cpp b/Runner/Graphics/GlyphAtlas.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/GlyphAtlas.cpp
+++ /dev/null
diff --git a/Runner/Graphics/GlyphAtlas.h b/Runner/Graphics/GlyphAtlas.h
deleted file mode 100644
index b0ab858..0000000
--- a/Runner/Graphics/GlyphAtlas.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TEXT_ATLAS_H
-#define TEXT_ATLAS_H
-
-
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/GpuDataBuffer.cpp b/Runner/Graphics/GpuDataBuffer.cpp
deleted file mode 100644
index 5c296ec..0000000
--- a/Runner/Graphics/GpuDataBuffer.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-#include <math.h>
-
-#include "GpuDataBuffer.h"
-
-namespace GPU
-{
-
- // 修改buffer数据要绑定到这个目标上,其他情况下用GetHandle()绑定到其他目标
- // GL_COPY_READ_BUFFER
- static const GLenum kBufferTarget = GL_COPY_WRITE_BUFFER;
-
- DataBuffer::DataBuffer()
- {
- glGenBuffers(1, &m_Handle);
- }
-
- DataBuffer::~DataBuffer()
- {
- glDeleteBuffers(1, &m_Handle);
- }
-
- void DataBuffer::Restore(int size, GLenum usage)
- {
- RestoreWithData(size, usage, 0);
- }
-
- void DataBuffer::RestoreWithData(int size, GLenum usage, const void* data)
- {
- glBindBuffer(kBufferTarget, m_Handle);
- glBufferData(kBufferTarget, size, data, usage);
- glBindBuffer(kBufferTarget, 0);
- m_Size = size;
- m_Usage = usage;
- }
-
- // glBufferSubData
- // glMapBuffer
- // glMapBufferRange (best one)
-
- void DataBuffer::Upload(int offset, int size, const void* data)
- {
- glBindBuffer(kBufferTarget, m_Handle);
- glBufferSubData(kBufferTarget, offset, size, data);
- glBindBuffer(kBufferTarget, 0);
- }
-
- void* DataBuffer::Map(uint32 access)
- {
- glBindBuffer(kBufferTarget, m_Handle);
- void* ptr = glMapBuffer(kBufferTarget, access);
- glBindBuffer(kBufferTarget, 0);
- return ptr;
- }
-
- void* DataBuffer::MapRange(int offset, int size, uint32 access)
- {
- glBindBuffer(kBufferTarget, m_Handle);
- void* ptr = glMapBufferRange(kBufferTarget, offset, size, access);
- glBindBuffer(kBufferTarget, 0);
- return ptr;
- }
-
- void DataBuffer::FlushMapedRange(int offset, int size)
- {
- glBindBuffer(kBufferTarget, m_Handle);
- glFlushMappedBufferRange(kBufferTarget, offset, size);
- glBindBuffer(kBufferTarget, 0);
- }
-
- void DataBuffer::UnMap()
- {
- glBindBuffer(kBufferTarget, m_Handle);
- glUnmapBuffer(kBufferTarget);
- glBindBuffer(kBufferTarget, 0);
- }
-
- void DataBuffer::Orphan()
- {
- glBindBuffer(kBufferTarget, m_Handle);
- glBufferData(kBufferTarget, 0, 0, GL_STREAM_DRAW);
- glBindBuffer(kBufferTarget, 0);
- }
-
- static bool IsBufferPoolCreated = false;
-
- BufferPool::BufferPool()
- :m_LiveBuffers()
- {
- Assert(!IsBufferPoolCreated);
- IsBufferPoolCreated = true;
- }
-
- BufferPool::~BufferPool()
- {
-
- }
-
- void BufferPool::Initialize()
- {
- for(int i = 0; i < kSizeClassCount; ++i)
- m_LiveBuffers[i].clear();
- }
-
- static const float kBufferAllocateWeight = 10.0f; //! Default weight for buffer allocation from scratch.
- static const float kBufferSizeWeightFactor = 1.f / 8096.f; //!< Weight factor for size difference.
- static const float kBufferUsageDiffWeight = 8.f; //!< Weight factor for usage difference.
-
- static int ComputeBufferWeight(DataBuffer* buffer, int desiredSize, GLenum desiredUsage)
- {
- const int bufferSize = buffer->GetSize();
- const GLenum bufferUsage = buffer->GetUsage();
-
- if(bufferSize == 0)
- return kBufferAllocateWeight;
-
- const int sizeDiff = std::abs(bufferSize - desiredSize);
-
- return float(sizeDiff)*kBufferSizeWeightFactor + ((bufferUsage != desiredUsage) ? kBufferUsageDiffWeight : 0.f);
- }
-
- DataBuffer* BufferPool::ClaimBuffer(int size, GLenum usage)
- {
- const float maxWeight = kBufferAllocateWeight;
- const int maxCandidates = 5; // Number of potential candidates to consider actually.
-
- const int sizeClass = GetSizeClass(size);
- int numCandidates = 0; // Number of potential candidates considered
- int bestBufferNdx = -1;
- float bestWeight = std::numeric_limits<float>::infinity();
-
- for (int idx = 0; idx < m_LiveBuffers[sizeClass].size(); ++idx)
- {
- DataBuffer* buffer = m_LiveBuffers[sizeClass][idx];
- const float weight = ComputeBufferWeight(buffer, size, usage);
-
- if (weight < maxWeight && weight < bestWeight)
- {
- bestWeight = weight;
- bestBufferNdx = idx;
- ++numCandidates;
- }
-
- if(numCandidates >= maxCandidates)
- break; // Do not try other buffers, sorry.
- }
-
- if (bestBufferNdx >= 0)
- {
- DataBuffer* selectedBuffer = m_LiveBuffers[sizeClass][bestBufferNdx];
-
- if (bestBufferNdx + 1 != m_LiveBuffers[sizeClass].size())
- std::swap(m_LiveBuffers[sizeClass][bestBufferNdx], m_LiveBuffers[sizeClass].back());
- m_LiveBuffers[sizeClass].pop_back();
-
- return selectedBuffer;
- }
- else
- return new DataBuffer();
-
- }
-
- void BufferPool::ReleaseBuffer(DataBuffer* buffer)
- {
- InsertToLive(buffer);
- }
-
- void BufferPool::OnEndFrame()
- {
- UpdatePendingBuffersArray();
- }
-
- void BufferPool::UpdatePendingBuffersArray()
- {
-
- }
-
- void BufferPool::InsertToLive(DataBuffer* buffer)
- {
- const int bufferSize = buffer->GetSize();
- const int sizeClass = GetSizeClass(bufferSize);
-
- m_LiveBuffers[sizeClass].push_back(buffer);
- }
-
- uint BufferPool::GetSizeClass(uint bufferSize)
- {
- for (int idx = 0; idx < kSizeClassCount; ++idx)
- {
- if(bufferSize < GetSizeClassLimit(idx))
- return idx;
- }
- Assert(false);
- return 0;
- }
-
- DataBuffer* ClaimBuffer(int size = 0, GLenum usage = GL_ARRAY_BUFFER)
- {
- return Get(BufferPool)->ClaimBuffer(size, usage);
- }
-
- void ReleaseBuffer(DataBuffer* buffer)
- {
- Get(BufferPool)->ReleaseBuffer(buffer);
- }
-
-}
diff --git a/Runner/Graphics/GpuDataBuffer.h b/Runner/Graphics/GpuDataBuffer.h
deleted file mode 100644
index 0d65d3d..0000000
--- a/Runner/Graphics/GpuDataBuffer.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef GPU_DATABUFFER_H
-#define GPU_DATABUFFER_H
-
-#include <vector>
-
-#include "../Utilities/Type.h"
-#include "../Utilities/Singleton.h"
-#include "../Utilities/UtilMacros.h"
-#include "../Utilities/Assert.h"
-#include "OpenGL.h"
-
-namespace GPU
-{
-
- class DataBuffer
- {
- public:
- void Upload(int offset, int size, const void* data);
- void* Map(uint32 access);
- void* MapRange(int offset, int size, uint32 access); // best performance
- void FlushMapedRange(int offset, int size);
-
- void UnMap();
-
- void Orphan();
-
- // claim storage of size
- void Restore(int size, GLenum usage);
- // claim storage of size and fill it
- void RestoreWithData(int size, GLenum usage, const void* data);
-
- GET(int, Size, m_Size);
- GET(GLenum, Usage, m_Usage);
- GET(GLuint, Handle, m_Handle);
-
- private:
- friend class BufferPool;
-
- DataBuffer();
- ~DataBuffer();
-
- GLuint m_Handle;
- int m_Size;
- GLenum m_Usage;
- };
-
- // recycle data buffer
- class BufferPool : public Singleton<BufferPool>
- {
- public:
- BufferPool();
- ~BufferPool();
-
- void Initialize();
-
- DataBuffer* ClaimBuffer(int size, GLenum usage);
- void ReleaseBuffer(DataBuffer* buffer);
-
- void OnEndFrame();
-
- private:
-
- inline int GetSizeClassLimit(int classNdx);
-
- void UpdatePendingBuffersArray();
- void InsertToLive(DataBuffer* buffer);
- uint GetSizeClass(uint bufferSize);
-
- enum {
- kSizeClassBaseLog2 = 10,
- kSizeClassStepLog2 = 1,
- kSizeClassCount = 7
- };
-
- std::vector<DataBuffer*> m_LiveBuffers[kSizeClassCount];
-
- };
-
- inline int BufferPool::GetSizeClassLimit(int classNdx)
- {
- // (0, 2^10] 2^11 2^12 2^13 2^14 2^15 INT_MAX
- return classNdx + 1 < kSizeClassCount ? (1 << (classNdx*kSizeClassStepLog2 + kSizeClassBaseLog2)) : INT_MAX;
- }
-
- DataBuffer* ClaimBuffer(int size = 0, GLenum usage = GL_ARRAY_BUFFER);
- void ReleaseBuffer(DataBuffer* buffer);
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/ImageData.cpp b/Runner/Graphics/ImageData.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/ImageData.cpp
+++ /dev/null
diff --git a/Runner/Graphics/ImageData.h b/Runner/Graphics/ImageData.h
deleted file mode 100644
index cd56e83..0000000
--- a/Runner/Graphics/ImageData.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef IMAGE_DATA_H
-#define IMAGE_DATA_H
-
-#include <vector>
-
-class ImageData
-{
-public:
- enum ImageFormat
- {
- ImageFormat_Rgba_Int,
- ImageFormat_Rgba_Float,
- };
-
-private:
- void* m_Data;
-
-};
-
-enum ImageDataAsyncError
-{
- ImageDataAsyncError_NoFile = 1,
- ImageDataAsyncError_ParseFailed = 2,
- ImageDataAsyncError_InvalidFormat = 3,
-};
-
-struct ImageDataRequest
-{
- bool isDone, hasError;
- int error;
- int progress, all;
- ImageData* result;
- std::vector<ImageData*> results;
-};
-
-namespace ImageDataUtil
-{
- ImageData* Load(const char* path);
- ImageDataRequest* LoadAsync(const char* path);
- ImageDataRequest* LoadAsync(std::vector<const char*> paths);
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/OpenGL.cpp b/Runner/Graphics/OpenGL.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/OpenGL.cpp
+++ /dev/null
diff --git a/Runner/Graphics/OpenGL.h b/Runner/Graphics/OpenGL.h
deleted file mode 100644
index 413b70b..0000000
--- a/Runner/Graphics/OpenGL.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef OPENGL_H
-#define OPENGL_H
-
-#include "glad/glad.h"
-
-#endif
diff --git a/Runner/Graphics/Point.cpp b/Runner/Graphics/Point.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/Point.cpp
+++ /dev/null
diff --git a/Runner/Graphics/Point.h b/Runner/Graphics/Point.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/Point.h
+++ /dev/null
diff --git a/Runner/Graphics/PolyLine.cpp b/Runner/Graphics/PolyLine.cpp
deleted file mode 100644
index 794819a..0000000
--- a/Runner/Graphics/PolyLine.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "PolyLine.h"
-#include "../Math/Vector3.h"
-#include "Color.h"
-
-struct PolyLineVBOLayout
-{
- Vector3 position;
- ColorRGBA32 color;
-};
-
-
diff --git a/Runner/Graphics/PolyLine.h b/Runner/Graphics/PolyLine.h
deleted file mode 100644
index 1850e47..0000000
--- a/Runner/Graphics/PolyLine.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef POLY_LINE_H
-#define POLY_LINE_H
-
-#include "../Math/Vector3.h"
-
-class PolyLine
-{
-public:
- PolyLine();
- ~PolyLine();
-
- void Draw();
-
-private:
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/Quad.cpp b/Runner/Graphics/Quad.cpp
deleted file mode 100644
index cbe8b74..0000000
--- a/Runner/Graphics/Quad.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "../Math/Vector2.h"
-#include "../Math/Vector3.h"
-#include "Quad.h"
-#include "Device.h"
-
-struct QuadVBOLayout
-{
- Vector3 position;
- Vector2 uv;
-};
-
-void Quad::Draw()
-{
- const int nVerts = 4;
- const int nIndices = 6;
-
- float pos[] = {
- m_Left, m_Bottom, 0, // left-bottom
- m_Right, m_Bottom, 0, // right-bottom
- m_Right, m_Top, 0, // right-top
- m_Left, m_Top, 0, // top-left
- };
- float uv[] = {
- 0, 0,
- 1, 0,
- 1, 1,
- 0, 1,
- };
- int indices[] = {
- 0, 1, 3, // right-top
- 1, 2, 3, // left-bottom
- };
-
- uint8* vb;
- uint16* ib;
-
- uint attrs = Mask(VertexAttr_Position) | Mask(VertexAttr_TexCoord0);
- g_SharedVBO.GetChunk(attrs, 4, 6, RenderMode_Triangle, (void**)&vb, (void**)&ib);
-
- QuadVBOLayout* dst = (QuadVBOLayout*)vb;
- for (int i = 0; i < nVerts; ++i)
- {
- dst[i].position.Set(pos[3 * i], pos[3 * i + 1], pos[3 * i + 2]);
- dst[i].uv.Set(uv[2 * i], uv[2 * i + 1]);
- }
-
- for (int i = 0; i < nIndices; ++i)
- ib[i] = indices[i];
-
- g_SharedVBO.ReleaseChunk(4, 6);
- g_SharedVBO.DrawChunk();
-} \ No newline at end of file
diff --git a/Runner/Graphics/Quad.h b/Runner/Graphics/Quad.h
deleted file mode 100644
index 0e38ec4..0000000
--- a/Runner/Graphics/Quad.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef QUAD_H
-#define QUAD_H
-
-#include "../Utilities/UtilMacros.h"
-
-class Quad
-{
-public:
- Quad(float l, float r, float t, float b);
-
- void Set(float l, float r, float t, float b);
-
- GET_SET(float, Left, m_Left);
- GET_SET(float, Right, m_Right);
- GET_SET(float, Top, m_Top);
- GET_SET(float, Bottom, m_Bottom);
-
- void Draw();
-
-private:
- float m_Left, m_Right, m_Top, m_Bottom;
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/RenderTexture.cpp b/Runner/Graphics/RenderTexture.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/RenderTexture.cpp
+++ /dev/null
diff --git a/Runner/Graphics/RenderTexture.h b/Runner/Graphics/RenderTexture.h
deleted file mode 100644
index 74c5602..0000000
--- a/Runner/Graphics/RenderTexture.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef RENDER_TEXTURE_H
-#define RENDER_TEXTURE_H
-
-#include "Texture.h"
-
-// 离屏渲染
-class RenderTexture : public Texture
-{
-public:
- RenderTexture(TextureFormat format);
-
-};
-
-RenderTexture* CreateRenderTexture(int width, int height, TextureFormat format);
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/Scripting/wrap_Device.cpp b/Runner/Graphics/Scripting/wrap_Device.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/Scripting/wrap_Device.cpp
+++ /dev/null
diff --git a/Runner/Graphics/Scripting/wrap_GL.cpp b/Runner/Graphics/Scripting/wrap_GL.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/Scripting/wrap_GL.cpp
+++ /dev/null
diff --git a/Runner/Graphics/Scripting/wrap_RenderTexture.cpp b/Runner/Graphics/Scripting/wrap_RenderTexture.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/Scripting/wrap_RenderTexture.cpp
+++ /dev/null
diff --git a/Runner/Graphics/Texture.cpp b/Runner/Graphics/Texture.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Graphics/Texture.cpp
+++ /dev/null
diff --git a/Runner/Graphics/Texture.h b/Runner/Graphics/Texture.h
deleted file mode 100644
index ce05ff7..0000000
--- a/Runner/Graphics/Texture.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef TEXTURE_H
-#define TEXTURE_H
-
-#include "../Utilities/UtilMacros.h"
-#include "OpenGL.h"
-#include "ImageData.h"
-
-enum TextureFormat
-{
- TextureFormat_DepthComponent,
- TextureFormat_Red,
- TextureFormat_Green,
- TextureFormat_Blue,
- TextureFormat_Alpha,
- TextureFormat_Rgb,
- TextureFormat_Rgba,
-};
-
-enum TextureWrap
-{
- TextureWrap_Clamp,
- TextureWrap_Repeat,
-};
-
-enum TextureFilter
-{
- TextureFilter_Nearest,
- TextureFilter_Bilinear,
- TextureFilter_Trilinear,
-};
-
-class Texture
-{
-public:
- Texture(ImageData* imgData, TextureFormat format);
- Texture(ImageData* imgData, TextureFormat format, TextureWrap wrap, TextureFilter filter);
- Texture();
- ~Texture();
-
- GET(int, Width, m_Width);
- GET(int, Height, m_Height);
-
- GET(TextureFilter, Filter, m_Filter);
- GET(TextureWrap, Wrap, m_Wrap);
-
- GET(GLint, Handle, m_Handle);
-
-protected:
- GLint m_Handle;
- int m_Width, m_Height;
- TextureFilter m_Filter;
- TextureWrap m_Wrap;
-
-};
-
-Texture* CreateTexture(ImageData* imgData, TextureFormat format);
-Texture* CreateTexture(ImageData* imgData, TextureFormat format, TextureWrap wrap, TextureFilter filter);
-
-#endif \ No newline at end of file
diff --git a/Runner/Graphics/VertexBuffer.cpp b/Runner/Graphics/VertexBuffer.cpp
deleted file mode 100644
index c9f5164..0000000
--- a/Runner/Graphics/VertexBuffer.cpp
+++ /dev/null
@@ -1,322 +0,0 @@
-#include "VertexBuffer.h"
-#include "../Profiler/FrameStats.h"
-
-void SetupDefaultVertexArray(const VertexArrayInfo& info);
-void InvalidateVertexInputCache();
-
-// LUTs of vertex attributes
-static const int kVertexAttrSize[VertexAttr_Count] = {
- 3 * sizeof(float), // position
- 3 * sizeof(float), // normal
- 4 * sizeof(float), // tangent
- 1 * sizeof(uint32), // color
- 2 * sizeof(float), // uv0
- 2 * sizeof(float), // uv1
-};
-
-static const int kVertexAttrDimension[VertexAttr_Count] = {
- 3, // position
- 3, // normal
- 4, // tangent
- 1, // color
- 2, // uv0
- 2 // uv1
-};
-
-enum VertexAttrFormat
-{
- VertexAttrFormat_Float = 0, // position \ normal \ tangent \ uv0 \ uv1
- VertexAttrFormat_Float16 = 1,
- VertexAttrFormat_Color = 2, // color
- VertexAttrFormat_Byte = 3,
-
- VertexAttrFormat_Count = 4
-};
-
-// map VertexAttrFormat to OpenGL type
-static GLenum kGLVertexAttrFormat [VertexAttr_Count] = {
- GL_FLOAT, // VertexAttrFormat_Float
- GL_HALF_FLOAT, // VertexAttrFormat_Float16
- GL_UNSIGNED_BYTE, // VertexAttrFormat_Color
- GL_BYTE // VertexAttrFormat_Byte
-};
-
-static bool IsGLVertexAttrNeedNormalized(uint attr, uint format)
-{
- if(attr == VertexAttr_Position)
- return false;
- else // color and byte need to be normalized
- return format != VertexAttrFormat_Float && format != VertexAttrFormat_Float16;
-}
-
-static uint GetDefaultShaderChannelFormat(uint attr)
-{
-// besides color, other attributes are all composite of float values
- return attr == VertexAttr_Color ? VertexAttrFormat_Color : VertexAttrFormat_Float;
-}
-
-static uint32 GetDefaultVertexAttrSize(/*VertexAttr*/ int attr)
-{
- return kVertexAttrSize[attr];
-}
-
-static uint GetDefaultVertexAttrDimension(uint attr)
-{
- return kVertexAttrDimension[attr];
-}
-
-static uint GetDefaultShaderChannelDimension(uint attr)
-{
- return attr == VertexAttr_Color ? 4 : GetDefaultVertexAttrDimension(attr);
-}
-
-// index is stored in unsgined short (GL_UNSIGNED_SHORT)
-static const int kIndexSize = sizeof(uint16);
-static GLenum kGLIndexFormat = GL_UNSIGNED_SHORT;
-
-// Get size used for vertexAttrMask
-static uint32 GetDynamicChunkStride(uint32 vertexAttrMask)
-{
- uint32 stride = 0;
- for (int i = 0; i < vertexAttrMask; ++i)
- {
- if (vertexAttrMask & Mask(i))
- stride += GetDefaultVertexAttrSize(i);
- }
- return stride;
-}
-
-VertexBuffer::VertexBuffer(VertexBufferType type)
-{
-}
-
-VertexBuffer::~VertexBuffer()
-{
-}
-
-SharedVertexBuffer::SharedVertexBuffer()
-{
-}
-
-SharedVertexBuffer::~SharedVertexBuffer()
-{
-}
-
-//GetChunk
-//-> ReleaseChunk
-//-> DrawChunk
-
-void SharedVertexBuffer::GetChunk(uint attrsMask, int maxVerts, int maxIndices, RenderMode mode, void **out_vb, void **out_ib)
-{
- Assert(out_vb && out_ib);
-
- uint stride = GetDynamicChunkStride(attrsMask); // data size of single vertex
- GLenum usage = GL_STREAM_DRAW;
- uint vbufferSize = stride * maxVerts;
- uint ibufferSize = kIndexSize * maxIndices;
-
- const bool mapVertexBuffer = vbufferSize >= DataBufferThreshold;
- const bool mapIndexBuffer = ibufferSize >= DataBufferThreshold;
-
- GPU::DataBuffer* vertexBuffer = mapVertexBuffer ? GPU::ClaimBuffer(vbufferSize, usage) : 0;
- GPU::DataBuffer* indexBuffer = mapIndexBuffer ? GPU::ClaimBuffer(ibufferSize, usage) : 0;
-
- if(vertexBuffer && vertexBuffer->GetSize() < vbufferSize)
- vertexBuffer->Restore(vbufferSize, usage);
-
- if(indexBuffer && indexBuffer->GetSize() < ibufferSize)
- indexBuffer->Restore(ibufferSize, usage);
-
- if(!mapVertexBuffer && m_CurVBData.size() < vbufferSize)
- m_CurVBData.resize(vbufferSize);
-
- if(!mapIndexBuffer && m_CurIBData.size() < ibufferSize)
- m_CurIBData.resize(ibufferSize);
-
- const GLenum access = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_FLUSH_EXPLICIT_BIT;
-
- if (vertexBuffer)
- *out_vb = vertexBuffer->MapRange(0, vbufferSize, access);
- else
- *out_vb = &m_CurVBData[0];
-
- if(indexBuffer)
- *out_ib = indexBuffer->MapRange(0, ibufferSize, access);
- else
- *out_ib = &m_CurIBData[0];
-
- m_CurVB = vertexBuffer;
- m_CurIB = indexBuffer;
- m_CurRenderMode = mode;
- m_CurAttrMask = attrsMask;
- m_CurStride = stride;
-}
-
-void SharedVertexBuffer::ReleaseChunk(int actualVerts, int actualIndices)
-{
- int actualVBufferSize = m_CurStride * actualVerts;
- int actualIBufferSize = kIndexSize * actualIndices;
-
- const GLenum usage = GL_STREAM_DRAW;
-
- if (m_CurVB)
- {
- m_CurVB->FlushMapedRange(0, actualVBufferSize);
- m_CurVB->UnMap();
- }
- else if(actualVBufferSize >= DataBufferThreshold)
- {
- m_CurVB = GPU::ClaimBuffer(actualVBufferSize, usage);
- m_CurVB->RestoreWithData(actualVBufferSize, usage, &m_CurVBData[0]);
- }
-
- if (m_CurIB)
- {
- m_CurIB->FlushMapedRange(0, actualIBufferSize);
- m_CurIB->UnMap();
- }
- else if (actualIBufferSize >= DataBufferThreshold)
- {
- m_CurIB = GPU::ClaimBuffer(0, usage);
- m_CurIB->RestoreWithData(0, usage, &m_CurIBData[0]);
- }
-
- m_CurVertexCount = actualVerts;
- m_CurIndexCount = actualIndices;
-}
-
-void SharedVertexBuffer::DrawChunk()
-{
- VertexArrayInfo vertexArray;
- FillVertexArrayInfo(vertexArray);
-
- // bind vertex attributes data
- SetupDefaultVertexArray(vertexArray);
-
- const void* indexPtr = m_CurIB ? 0 : (m_CurIBData.empty() ? 0 : &m_CurIBData[0]);
-
- if (m_CurIB)
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_CurIB->GetHandle());
-
- switch (m_CurRenderMode)
- {
- case RenderMode_Triangle:
- glDrawElements(GL_TRIANGLES, m_CurIndexCount, kGLIndexFormat, indexPtr);
- g_FrameStats.AddDrawCall();
- g_FrameStats.AddTrianglesCount(m_CurIndexCount / 3);
- break;
- case RenderMode_Line:
- glDrawElements(GL_LINE, m_CurIndexCount, kGLIndexFormat, indexPtr);
- g_FrameStats.AddDrawCall();
- break;
- case RenderMode_Point:
- glDrawElements(GL_POINT, m_CurIndexCount, kGLIndexFormat, indexPtr);
- g_FrameStats.AddDrawCall();
- break;
- }
-
- if(m_CurIB)
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
-
- // End draw
- Clean();
-}
-
-void SharedVertexBuffer::FillVertexArrayInfo(VertexArrayInfo& dst)
-{
- const byte* basepointer = m_CurVB ? 0 : &m_CurVBData[0];
- const GLuint buffer = m_CurVB ? m_CurVB->GetHandle() : 0;
-
- int attrOffsets[VertexAttr_Count] = {0};
-
- {
- uint32 curOffset = 0;
- for (uint idx = 0; idx < VertexAttr_Count; ++idx)
- {
- if (m_CurAttrMask & Mask(idx))
- {
- attrOffsets[idx] = curOffset;
- curOffset += GetDefaultVertexAttrSize(idx);
- }
- }
- }
-
- for (uint32 attrIdx = 0; attrIdx < VertexAttr_Count; ++attrIdx)
- {
- if (m_CurAttrMask & Mask(attrIdx))
- {
- dst.buffers[attrIdx] = buffer;
-
- dst.attributes[attrIdx].pointer = basepointer + attrOffsets[attrIdx];
- dst.attributes[attrIdx].componentType = GetDefaultShaderChannelFormat(attrIdx);
- dst.attributes[attrIdx].componentNum = GetDefaultShaderChannelDimension(attrIdx);
- dst.attributes[attrIdx].stride = m_CurStride;
-
- dst.enableMask |= Mask(attrIdx);
- }
- }
-}
-
-void SharedVertexBuffer::Clean()
-{
- if (m_CurVB)
- {
- GPU::ReleaseBuffer(m_CurVB);
- m_CurVB = 0;
- }
-
- if (m_CurIB)
- {
- GPU::ReleaseBuffer(m_CurIB);
- m_CurIB = 0;
- }
-
- m_CurRenderMode = (RenderMode)0;
- m_CurAttrMask = 0;
- m_CurStride = 0;
- m_CurVertexCount = 0;
- m_CurIndexCount = 0;
-
- m_CurVBData.clear();
- m_CurIBData.clear();
-}
-
-static uint32 sEnabledArrays = 0;
-
-void SetupDefaultVertexArray(const VertexArrayInfo& info)
-{
- GLuint curBoundBuffer = 0;
-
- for (int attrIdx = 0; attrIdx < VertexAttr_Count; ++attrIdx)
- {
- if (info.enableMask & Mask(attrIdx))
- {
- if (!sEnabledArrays & Mask(attrIdx))
- glEnableVertexAttribArray(attrIdx);
- const GLuint buffer = info.buffers[attrIdx];
- const int numCompo = info.attributes[attrIdx].componentNum;
- const GLenum compoType = kGLVertexAttrFormat[info.attributes[attrIdx].componentType];
- const bool normalized = IsGLVertexAttrNeedNormalized(attrIdx, compoType);
- const uint stride = info.attributes[attrIdx].stride;
- const void* pointer = info.attributes[attrIdx].pointer;
-
- if (curBoundBuffer != buffer)
- {
- glBindBuffer(GL_ARRAY_BUFFER, buffer);
- curBoundBuffer = buffer;
- }
-
- glVertexAttribPointer(attrIdx, numCompo, compoType, normalized ? GL_TRUE : GL_FALSE, stride, pointer);
- }
- else if(sEnabledArrays & Mask(attrIdx))
- glDisableVertexAttribArray(attrIdx);
- }
- sEnabledArrays = info.enableMask;
-}
-
-void InvalidateVertexInputCache()
-{
- sEnabledArrays = 0;
- for(int attrIdx = 0; attrIdx < VertexAttr_Count; ++attrIdx)
- glDisableVertexAttribArray(attrIdx);
-} \ No newline at end of file
diff --git a/Runner/Graphics/VertexBuffer.h b/Runner/Graphics/VertexBuffer.h
deleted file mode 100644
index 33c0783..0000000
--- a/Runner/Graphics/VertexBuffer.h
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef VBO_H
-#define VBO_H
-
-#include <vector>
-
-#include "../Utilities/UtilMacros.h"
-#include "../Shaders/ShaderChannel.h"
-
-#include "OpenGL.h"
-#include "GpuDataBuffer.h"
-
-enum VertexAttr
-{
- VertexAttr_Position = 0,
- VertexAttr_Normal = 1,
- VertexAttr_Tangent = 2,
- VertexAttr_Color = 3,
- VertexAttr_TexCoord0 = 4,
- VertexAttr_TexCoord1 = 5,
-
- VertexAttr_Count = 6
-};
-
-enum RenderMode
-{
- RenderMode_Triangle = 1,
- RenderMode_Line = 2,
- RenderMode_Point = 3,
-};
-
-struct VertexInputInfo
-{
- const void* pointer; // either cpu memory or gpu memory
- uint componentType; // one of VertexAttrFormat
- uint componentNum;
- uint16 stride;
-};
-
-// gpu side vertex attributes array
-struct VertexArrayInfo
-{
- uint32 enableMask;
- GLuint buffers[VertexAttr_Count];
- VertexInputInfo attributes[VertexAttr_Count];
-};
-
-class VertexBuffer
-{
-public:
- enum VertexBufferType
- {
- VertexBufferType_Static, // device
- VertexBufferType_Stream, // pinned (best performance)
- VertexBufferType_Dynamic,// device
- };
-
- VertexBuffer(VertexBufferType type);
- ~VertexBuffer();
-
- void Draw();
-
-private:
-
- VertexBufferType m_Type;
- GPU::DataBuffer *m_VB, *m_IB;// vertex buffer and index buffer
-
-};
-
-class SharedVertexBuffer
-{
-public:
- void GetChunk(uint attrs, int maxVerts, int maxIndices, RenderMode mode, void **out_vb, void **out_ib);
- void ReleaseChunk(int actualVerts, int actualIndices);
-
- void DrawChunk();
-
-private:
-
- void FillVertexArrayInfo(VertexArrayInfo& dst);
-
- void Clean();
-
- // if vertex databuffer size beyond this value, use pinned memory mapping, instead of glBufferData.
- enum { DataBufferThreshold = 1024 };
-
- // shared vbo and ibo
- GPU::DataBuffer *m_CurVB, *m_CurIB;
-
- // restore vbo and ibo data if not using pinned memory mapping
- std::vector<byte> m_CurVBData;
- std::vector<uint16> m_CurIBData;
-
- RenderMode m_CurRenderMode;
-
- uint m_CurAttrMask;
- uint m_CurStride;
-
- uint m_CurVertexCount;
- uint m_CurIndexCount;
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Input/Input.cpp b/Runner/Input/Input.cpp
deleted file mode 100644
index d82bd64..0000000
--- a/Runner/Input/Input.cpp
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "Input.h"
-
-
diff --git a/Runner/Input/Input.h b/Runner/Input/Input.h
deleted file mode 100644
index 5612e74..0000000
--- a/Runner/Input/Input.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef INPUT_H
-#define INPUT_H
-
-#include "SDL2/SDL.h"
-
-class Input
-{
-public:
- void PollEvent(SDL_Event& e);
-
- bool IsKeyDown();
- bool IsKeyUp();
- bool IsKeyClick();
-
-};
-
-extern Input g_Input;
-
-#endif \ No newline at end of file
diff --git a/Runner/Main.cpp b/Runner/Main.cpp
deleted file mode 100644
index a511ed7..0000000
--- a/Runner/Main.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "SDL2/SDL.h"
-
-
-
-
-int main(int argn, char* args[])
-{
- return 0;
-}
diff --git a/Runner/Math/AABB.h b/Runner/Math/AABB.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Math/AABB.h
+++ /dev/null
diff --git a/Runner/Math/Vector2.cpp b/Runner/Math/Vector2.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Math/Vector2.cpp
+++ /dev/null
diff --git a/Runner/Math/Vector2.h b/Runner/Math/Vector2.h
deleted file mode 100644
index 7bf3987..0000000
--- a/Runner/Math/Vector2.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef VECTOR2_H
-#define VECTOR2_H
-
-class Vector2
-{
-public:
- float x, y;
-
- inline void Set(float x, float y)
- {
- this->x = x;
- this->y = y;
- }
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Math/Vector3.cpp b/Runner/Math/Vector3.cpp
deleted file mode 100644
index 8b13789..0000000
--- a/Runner/Math/Vector3.cpp
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/Runner/Math/Vector3.h b/Runner/Math/Vector3.h
deleted file mode 100644
index 041ffef..0000000
--- a/Runner/Math/Vector3.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef VECTOR3_H
-#define VECTOR3_H
-
-class Vector3
-{
-public:
- float x, y, z;
-
- inline void Set(float x, float y, float z)
- {
- this->x = x;
- this->y = y;
- this->z = z;
- }
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Mesh/Font.cpp b/Runner/Mesh/Font.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Mesh/Font.cpp
+++ /dev/null
diff --git a/Runner/Mesh/Font.h b/Runner/Mesh/Font.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Mesh/Font.h
+++ /dev/null
diff --git a/Runner/Mesh/FontManager.h b/Runner/Mesh/FontManager.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Mesh/FontManager.h
+++ /dev/null
diff --git a/Runner/Mesh/Glyph.h b/Runner/Mesh/Glyph.h
deleted file mode 100644
index 6020b45..0000000
--- a/Runner/Mesh/Glyph.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef GLYPH_H
-#define GLYPH_H
-
-class Glyph
-{
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Mesh/Mesh.cpp b/Runner/Mesh/Mesh.cpp
deleted file mode 100644
index 95bd597..0000000
--- a/Runner/Mesh/Mesh.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "Mesh.h"
-#include "MeshUtil.h"
-
-
diff --git a/Runner/Mesh/Mesh.h b/Runner/Mesh/Mesh.h
deleted file mode 100644
index 77c6577..0000000
--- a/Runner/Mesh/Mesh.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef MESH_H
-#define MESH_H
-
-#include "../Graphics/VertexBuffer.h"
-#include "../Utilities/Type.h"
-
-// 相对VertexBuffer更加uplevel
-class Mesh
-{
-public:
-
- Mesh(bool readable = false);
- ~Mesh();
-
- void IsReadable();
-
- void SetVertices(float* data);
- void SetNormals(float* data);
- void SetTangents(float* data);
- void SetColors(float* data);
- void SetTexCoords(int channel, float* data);
-
- void SetTriangles(int* indices);
- void SetIndices(int* indices);
-
- void SetVertices(float* data, int start, int length);
- void SetNormals(float* data, int start, int length);
- void SetTangents(float* data, int start, int length);
- void SetColors(float* data, int start, int length);
- void SetTexCoords(int channel, float* data, int start, int length);
-
- void SetVertex(float x, float y, float z, int index);
- void SetNormal(float x, float y, float z, int index);
- void SetTangent(float x, float y, float z, int index);
- void SetColor(float r, float g, float b, float a, int index);
- void SetTexCoord(float u, float v, int index);
-
- void GetAABB(float bias = 0.f);
-
- inline bool HasVertexAttr(VertexAttrMask attr);
-
- void Draw();
-
- void CalculateNormal();
- void CalculateTangent();
-
-private:
-
- uint m_VertexAttrBits;
-
- bool m_IsReadable;
-
- VertexBuffer* m_VBO;
-
-};
-
-inline bool Mesh::HasVertexAttr(VertexAttrMask attr)
-{
- return m_VertexAttrBits & attr;
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Mesh/MeshUtil.h b/Runner/Mesh/MeshUtil.h
deleted file mode 100644
index 830ac70..0000000
--- a/Runner/Mesh/MeshUtil.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef MESH_UTIL_H
-#define MESH_UTIL_H
-
-
-
-#endif \ No newline at end of file
diff --git a/Runner/Mesh/TextMesh.h b/Runner/Mesh/TextMesh.h
deleted file mode 100644
index 1f27bbb..0000000
--- a/Runner/Mesh/TextMesh.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TEXT_MESH_H
-#define TEXT_MESH_H
-
-class TextMesh
-{
-public:
-
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Physics/Scripting/wrap_Joint.cpp b/Runner/Physics/Scripting/wrap_Joint.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Physics/Scripting/wrap_Joint.cpp
+++ /dev/null
diff --git a/Runner/Profiler/FrameStats.h b/Runner/Profiler/FrameStats.h
deleted file mode 100644
index b3073d5..0000000
--- a/Runner/Profiler/FrameStats.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef FRAME_STATS_H
-#define FRAME_STATS_H
-
-#include "../Utilities/Singleton.h"
-#include "../Utilities/UtilMacros.h"
-#include "../Utilities/Type.h"
-
-class FrameStats : public Singleton<FrameStats>
-{
-public:
- void OnBeginFrame();
- void OnEndFrame();
-
- void AddDrawCall(uint n = 1);
- void AddTrianglesCount(uint n = 1);
-
- GET(uint, DrawCall, m_DrawCall);
- GET(uint, TrianglesCount, m_TrianglesCount);
-
-private:
-
- uint m_DrawCall;
- uint m_TrianglesCount;
-
-};
-
-#define g_FrameStats (*FrameStats::Instance())
-
-#endif \ No newline at end of file
diff --git a/Runner/Profiler/Profiler.h b/Runner/Profiler/Profiler.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Profiler/Profiler.h
+++ /dev/null
diff --git a/Runner/Scripting/luax.h b/Runner/Scripting/luax.h
deleted file mode 100644
index 1980f41..0000000
--- a/Runner/Scripting/luax.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef __LUAX_H__
-#define __LUAX_H__
-
-///
-/// Luax(port) library 用于给lua注册类和函数
-///
-
-#include "luax_state.h"
-#include "luax_vm.h"
-#include "luax_ref.h"
-#include "luax_reftable.h"
-#include "luax_enum.h"
-#include "luax_class.hpp"
-#include "luax_memberref.h"
-#include "luax_class.inc"
-#include "luax_state.inc"
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_cfunctions.cpp b/Runner/Scripting/luax_cfunctions.cpp
deleted file mode 100644
index d93a0ee..0000000
--- a/Runner/Scripting/luax_cfunctions.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "luax_cfunctions.h"
-#include "luax_config.h"
-
-namespace Luax
-{
-
- int luax_c_getupvalue(lua_State* L)
- {
- lua_pushvalue(L, lua_upvalueindex(1));
- return 1;
- }
-
- int luax_c_errfunc(lua_State* L)
- {
- cc8* msg = luaL_optstring(L, lua_upvalueindex(1), "");
- return luaL_error(L, msg);
- }
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_cfunctions.h b/Runner/Scripting/luax_cfunctions.h
deleted file mode 100644
index 2570bb9..0000000
--- a/Runner/Scripting/luax_cfunctions.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef __LUAX_CFUNCTIONS_H__
-#define __LUAX_CFUNCTIONS_H__
-
-#include "luax_config.h"
-
-/**
- * luax_cfunction里的函数用来注册给lua,一些特殊功能的通用函数。
-*/
-
-namespace Luax
-{
-
- ///
- /// 获得第一个upvalue
- ///
- extern int luax_c_getupvalue(lua_State* L);
-
- ///
- /// 调用此函数时会报错,upvalue(1)是错误信息
- ///
- extern int luax_c_errfunc(lua_State* L);
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_class.cpp b/Runner/Scripting/luax_class.cpp
deleted file mode 100644
index 762f0dc..0000000
--- a/Runner/Scripting/luax_class.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-#include "luax_class.hpp"
-#include "luax_cfunctions.h"
-#include "luax_vm.h"
-
-namespace Luax
-{
-
-#if LUAX_ENABLE_PLAIN_CLASS
-
- int LuaxPlainClass::registry(lua_State* L)
- {
- LUAX_STATE(L);
-
- // params:
- // 1: class name
-
- cc8* type = state.GetValue<cc8*>(1, "");
-
- lua_newtable(L); // class table
-
- // GetClassName()
- lua_pushstring(L, type);
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClassName");
-
- // GetClass()
- lua_pushvalue(L, -1); // class table
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClass");
-
- // TypeOf()
- lua_pushcfunction(L, _TypeOf);
- lua_setfield(L, -2, "TypeOf");
-
- // New()
- lua_pushvalue(L, -1); // class table
- lua_pushcclosure(L, _New, 1);
- lua_setfield(L, -2, "New");
-
- // Extend()
- lua_pushvalue(L, -1); // class table
- lua_pushcclosure(L, _Extend, 1);
- lua_setfield(L, -2, "Extend");
-
- lua_pushvalue(L, -1); // class table
- lua_setfield(L, -2, "__index");
-
- lua_pushstring(L, type);
- lua_pushcclosure(L, __tostring, 1);
- lua_setfield(L, -2, "__tostring");
-
- return 1;
- }
-
- int LuaxPlainClass::__tostring(lua_State* L)
- {
- // upvalues:
- // 1: class name
-
- // params:
- // 1: instance
-
- if (!lua_istable(L, 1))
- {
- return luaL_typerror(L, 1, lua_typename(L, LUA_TTABLE));
- }
-
- cc8* type = lua_tostring(L, lua_upvalueindex(1));
-
- lua_pushfstring(L, "%s: %p", type, lua_topointer(L, 1));
-
- return 1;
- }
-
- ///
- /// New函数接受n个参数,并尝试获取__init,将参数传给__init初始化实例。
- ///
- int LuaxPlainClass::_New(lua_State* L)
- {
- LUAX_STATE(L);
-
- // upvalues:
- // 1: class table
-
- // params:
- // n: params
- int n = lua_gettop(L);
-
- int classTable = lua_upvalueindex(1);
-
- lua_newtable(L); // instance table
-
- // instance 的 metatable 设置为 class
- lua_pushvalue(L, classTable);
- lua_setmetatable(L, -2);
-
- // 找到构造函数,会触发metatable.__index,根据继承链向上找。
- lua_getfield(L, classTable, "__init");
- if (state.IsType(-1, LUA_TFUNCTION))
- {
- // stack:
- // -1: __init()
- // -2: instance
- // -3~-n-2: params
-
- lua_insert(L, -2 - n);
- // stack:
- // -1: instance
- // -2~-n-1: params
- // -n-2: __init()
-
- lua_pushvalue(L, -1);
- // stack:
- // -1: instance
- // -2: instance
- // -3~-n-2: params
- // -n-3: __init
-
- lua_insert(L, -3 - n);
- // stack:
- // -1: instance
- // -2~-n-1: params
- // -n-2: __init()
- // -n-3: instance
-
- lua_insert(L, -1 - n);
- // stack:
- // -1~-n: params
- // -n-1: instance
- // -n-2: __init()
- // -n-3: instance
-
- lua_pcall(L, n + 1, 0, 0);
- }
- else
- {
- state.Pop();
- }
-
- return 1;
- }
-
- int LuaxPlainClass::_Extend(lua_State* L)
- {
- LUAX_STATE(L);
-
- // upvalues:
- // 1: base class
-
- // params:
- // 1: class name
-
- cc8* type = state.GetValue<cc8*>(1, "");
-
- int baseClass = lua_upvalueindex(1);
-
- lua_newtable(L); // class table
-
- // GetClassName()
- lua_pushstring(L, type);
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClassName");
-
- // GetClass()
- lua_pushvalue(L, -1); // class table
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClass");
-
- // New()
- lua_pushvalue(L, -1); // class table
- lua_pushcclosure(L, _New, 1);
- lua_setfield(L, -2, "New");
-
- // Extend()
- lua_pushvalue(L, -1); // class table
- lua_pushcclosure(L, _Extend, 1);
- lua_setfield(L, -2, "Extend");
-
- // .__base 用来索引到基类
- lua_pushvalue(L, baseClass); // base class
- lua_setfield(L, -2, "__base");
-
- lua_pushvalue(L, -1); // class table
- lua_setfield(L, -2, "__index");
-
- lua_pushstring(L, type);
- lua_pushcclosure(L, __tostring, 1);
- lua_setfield(L, -2, "__tostring");
-
- // class的metatable设置为baseClass
- lua_pushvalue(L, baseClass);
- lua_setmetatable(L, -2);
-
- return 1;
- }
-
- int LuaxPlainClass::_TypeOf(lua_State* L)
- {
- // params:
- // 1: lua instance
- // 2: type string
-
- LUAX_STATE(L);
-
- cc8* type = state.GetValue<cc8*>(2, "");
-
- if (!lua_istable(L, 1))
- {
- return luaL_typerror(L, 1, "Object");
- }
-
- lua_pushvalue(L, 1); // lua instance
-
- while (lua_getmetatable(L, -1))
- {
- lua_getfield(L, -1, "GetClassName");
- if (lua_isfunction(L, -1))
- {
- state.Call(0, 1);
- cc8* name = state.GetValue<cc8*>(-1, "");
- if (strcmp(name, type) == 0)
- {
- lua_pushboolean(L, true);
- return 1;
- }
- else
- {
- state.Pop(); // name
- }
- }
- else
- {
- state.Pop();
- }
- }
-
- lua_pushboolean(L, false);
- return 1;
- }
-
-#endif /*LUAX_ENABLE_PLAIN_CLASS*/
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_class.hpp b/Runner/Scripting/luax_class.hpp
deleted file mode 100644
index 12eb268..0000000
--- a/Runner/Scripting/luax_class.hpp
+++ /dev/null
@@ -1,207 +0,0 @@
-#ifndef __LUAX_CLASS_H__
-#define __LUAX_CLASS_H__
-
-#include "luax_config.h"
-
-#if LUAX_PROFILER
-#include <unordered_set>
-#endif
-
-#include <vector>
-
-#include "luax_ref.h"
-#include "luax_memberref.h"
-#include "luax_cfunctions.h"
-#include "luax_watchdog.h"
-#include "luax_utility.h"
-
-namespace Luax
-{
-
- class LuaxVM;
-
- ///
- /// 虚基类,为了实现多态。需要访问下面这些接口的外部基类需要虚继承此类,之后再派生链中就会
- /// 调用对应实体的方法。注意继承此类时不能实现下面的方法,实现在LuaxNativeClass中,实现会
- /// 导致二义性。
- ///
- /// 依据Effective C++条款40,如果在必须使用virtual base基类情况下,应该尽可能避免向其中放
- /// 置数据成员,规避数据成员初始化造成的一些隐性问题。依据这一点,vpb基类更加接近C#和Java中
- /// 的Interface。所以,在这里把类用I开头标识这是一个接口。
- ///
- class LuaxObject
- {
- public:
- LuaxObject() {};
- virtual ~LuaxObject() {};
-
- ///
- /// 成员引用管理,在实例的ref table里。设置、取、清除。
- ///
- virtual bool PushLuaxMemberRef(LuaxState& state, int refID) = 0;
- virtual bool PushLuaxUserdata(LuaxState& state) = 0;
- virtual bool PushLuaxMemberTable(LuaxState& state) = 0;
- virtual bool PushLuaxRefTable(LuaxState& state) = 0;
-
- ///
- /// 被LuaxNativeClass实现。保持和释放native资源。
- ///
- virtual void Retain() = 0;
- virtual void Release() = 0;
-
- };
-
- // TODO: 将公共部分提取出来,不要重复生成代码
- //class LuaxNativeClassBase
- //{
- //}
-
- ///
- /// 需要暴露给lua的native class需要继承此类。通过lua管理的实例要确保引用计数的正确性,在多个线程中需要确
- /// 定不会误释放。
- ///
- template<class TYPE, class BASE = LuaxObject>
- class LuaxNativeClass : public BASE
- {
- public:
-
- ///
- /// 将userdata作为key,在ref table里对userdata添加一个引用,以维持userdata的生命周期。
- /// 相比较member ref,这个用在实体会被多次被不同其他实体引用的情况,并频繁销毁这些实体,
- /// 避免lua频繁的调用gc检测。
- ///
- template<class DATATYPE> void LuaxRetain(LuaxState& state, DATATYPE* userdata);
-
- ///
- /// 对userdata减少一个引用在ref table里,以尝试回收userdata。
- ///
- template<class DATATYPE> void LuaxRelease(LuaxState& state, DATATYPE* userdata);
-
- ///
- /// 将userdata push到栈顶,如果没有初始化mUserdata,初始化设置好元表并把初始化好的
- /// userdata留在栈顶。并添加一个引用。这是一个将native对象所有权移交给lua控制的方法。
- ///
- bool PushLuaxMemberRef(LuaxState& state, int refID) override;
- bool PushLuaxUserdata(LuaxState& state) override;
- bool PushLuaxMemberTable(LuaxState& state) override;
- bool PushLuaxRefTable(LuaxState& state) override;
-
- ///
- /// Watch dog 添加一个native引用。luaVM引用不会提供外部接口。继承此类的派生类不能直接使用
- /// delete方法,应该使用Release释放。一般情况下这个操作由虚拟机__gc进行,但是允许用户
- /// 程序在native中隔绝虚拟机情况下释放,这种情况下要使用Release。
- ///
- /// 这两个函数是native接口。
- ///
- void Retain() override final;
- void Release() override final;
-
-#if LUAX_PROFILER
- // 对堆上创建的实例进行delete保险检查
- static void operator delete(void* pdead, size_t size);
-#endif
-
- protected:
-
- LuaxNativeClass();
- virtual ~LuaxNativeClass();
-
- ///
- /// 成员引用管理,在实例的ref table里。设置、取、清除
- ///
- void SetLuaxMemberRef(LuaxState& state, LuaxMemberRef& memRef, int idx);
- bool PushLuaxMemberRef(LuaxState& state, LuaxMemberRef& memRef);
- void ClearLuaxMemberRef(LuaxState& state, LuaxMemberRef& memRef);
-
- private:
-
- friend class LuaxState;
-
- static void RegisterLuaxClassShared(LuaxState& state);
- static void RegisterLuaxFactoryClass(LuaxState& state);
- static void RegisterLuaxSingletonClass(LuaxState& state);
-
- static void SetLuaxClassTableRef(LuaxState& state, int idx);
- static void PushLuaxClassTable(LuaxState& state);
-
- ///
- /// 创建userdata,绑定实例到state。
- ///
- void BindToLua(LuaxState& state);
-
- //------------------------------------------------------------------------------//
-
- // 公共内容
- static int __tostring (lua_State*);
- static int _GetClass (lua_State*);
- static int _GetClassName (lua_State*);
-
- // 工厂类相关
- static int __gc (lua_State*);
- static int _GetRefTable (lua_State*);
- static int _New (lua_State*);
-
-#if LUAX_ENABLE_NATIVE_EXTEND
- static int _ExtendFactory (lua_State*);
- static int _ExtendSingleton (lua_State*);
-#endif
-
- //--------------------------------------------------------------------------------//
-
- ///
- /// class table,工厂和单例都有。
- ///
- static LuaxStrongRef mClassTable;
-
- ///
- /// 如果类是单例,这个用来保存singleton的引用关系,以保证不会被回收类似普通类的ref table。
- /// 单例的成员是全生命周期的,所以直接在_LUAX_STRONGREF_TABLE。单例对userdata进行
- /// LuaxRetain\LuaxRelease和member ref操作时和工厂实例不同,是存在下面这个ref table里
- /// 的,这个table在_LUAX_STRONGREF_TABLE里。
- ///
- static LuaxStrongRef mSingletonRefTable;
-
- ///
- /// 通过userdata可以拿到:
- /// 1: ref table
- /// 2: member table
- /// 3: class table
- ///
- LuaxWeakRef mUserdata;
-
- /// 通过后才能删除
- LuaxWatchDog mWatchDog;
-
-#if LUAX_PROFILER
- // 托管此对象的虚拟机
- std::unordered_set<LuaxVM*> mRefVMs;
- // 保险,此类的派生类不能在外部使用delete直接删除,而应该使用Release
- bool mSafer;
-#endif
-
- };
-
-#if LUAX_ENABLE_PLAIN_CLASS
- ///
- /// 纯lua类
- ///
- class LuaxPlainClass
- {
- public:
-
- ///
- /// 用来注册类的入口函数。可以通过registry(类名)注册类。
- ///
- static int registry(lua_State* L);
-
- LUAX_DECL_METHOD(__tostring);
- LUAX_DECL_METHOD(_Extend);
- LUAX_DECL_METHOD(_New);
- LUAX_DECL_METHOD(_TypeOf);
-
- };
-#endif
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_class.inc b/Runner/Scripting/luax_class.inc
deleted file mode 100644
index 1d6a89f..0000000
--- a/Runner/Scripting/luax_class.inc
+++ /dev/null
@@ -1,637 +0,0 @@
-namespace Luax
-{
-
- //--------------------------------------------------------------------------------//
-
- ///
- /// 对不同类型,通过调用GetLuaClassName获得类型名,如果是派生类,GetClassName会被覆盖,指向luax_c_getupvalue。
- ///
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::_GetClassName(lua_State* L)
- {
- LUAX_SETUP(L, "*");
-
- cc8* type = TYPE::GetLuaxClassName();
- state.Push(type);
- return 1;
- }
-
- //--------------------------------------------------------------------------------//
-
- ///
- /// 注册工厂和单例共有的类成员
- ///
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::RegisterLuaxClassShared(LuaxState& state)
- {
- luaL_Reg regTable[] = {
- { "GetClass", _GetClass },
- { "GetClassName", _GetClassName },
- { NULL, NULL }
- };
-
- state.RegisterMethods(regTable);
- }
-
- ///
- /// 工厂类的成员,注册在class table
- ///
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::RegisterLuaxFactoryClass(LuaxState& state)
- {
- luaL_Reg regTable[] = {
- { "GetRefTable", _GetRefTable },
- { NULL, NULL }
- };
-
- state.RegisterMethods(regTable);
- }
-
- ///
- /// 单例类的成员,注册在class table
- ///
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::RegisterLuaxSingletonClass(LuaxState& state)
- {
- luaL_Reg regTable[] = {
- { NULL, NULL }
- };
-
- state.RegisterMethods(regTable);
- }
-
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::PushLuaxClassTable(LuaxState& state)
- {
- assert(mClassTable);
-
- mClassTable.PushRef(state);
- }
-
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::SetLuaxClassTableRef(LuaxState& state, int idx)
- {
- mClassTable.SetRef(state, idx);
- }
-
- template<class TYPE, class BASE>
- LuaxNativeClass<TYPE, BASE>::LuaxNativeClass()
- : mWatchDog()
-#if LUAX_PROFILER
- , mSafer(false)
-#endif
- {
- }
-
- template<class TYPE, class BASE>
- LuaxNativeClass<TYPE, BASE>::~LuaxNativeClass()
- {
- }
-
-#if LUAX_PROFILER
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::operator delete(void* pdead, size_t size)
- {
- if (pdead == nullptr)
- return;
- // 堆上创建的实例必须使用Release释放。
- TYPE* p = static_cast<TYPE*>(pdead);
- assert(p->mSafer);
- ::operator delete(pdead, size);
- }
-#endif
-
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::Retain()
- {
- ++mWatchDog.mNativeRef;
- }
-
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::Release()
- {
- if (mWatchDog.mNativeRef > 0)
- --mWatchDog.mNativeRef;
- if (mWatchDog)
- {
-#if LUAX_PROFILER
- mSafer = true;
-#endif
- delete this;
- }
- }
-
- template<class TYPE, class BASE>
- template<typename U>
- void LuaxNativeClass<TYPE, BASE>::LuaxRetain(LuaxState& state, U* userdata)
- {
- if (PushLuaxRefTable(state))
- {
- if (userdata->PushLuaxUserdata(state))
- {
- lua_pushvalue(state, -1); // copy the userdata
- lua_gettable(state, -3); // get the count (or nil)
- u32 count = state.GetValue<u32>(-1, 0); // get the count (or 0)
- lua_pop(state, 1); // pop the old count
- lua_pushnumber(state, count + 1); // push the new count
- lua_settable(state, -3); // save it in the table: reftable[userdata] = count
- }
- }
- }
-
- template<class TYPE, class BASE>
- template<typename U>
- void LuaxNativeClass<TYPE, BASE>::LuaxRelease(LuaxState& state, U* userdata)
- {
- if (PushLuaxRefTable(state))
- {
- if (userdata->PushLuaxUserdata(state))
- {
- lua_pushvalue(state, -1); // copy the userdata
- lua_gettable(state, -3); // get the count (or nil)
- u32 count = state.GetValue<u32>(-1, 0); // get the count (or 0)
- lua_pop(state, 1); // pop the old count
-
- // no such reference
- if (count == 0)
- {
- state.Pop(2); // userdata, reftable
- return; // nothing to do
- }
-
- if (count > 1) {
- lua_pushnumber(state, count - 1); // push the new count
- }
- else {
- lua_pushnil(state); // maybe cause gc
- }
- lua_settable(state, -3); // save it in the table
-
- state.Pop(1); // reftable
- return;
- }
- state.Pop(2); // nil, reftable
- return;
- }
- }
-
- template<class TYPE, class BASE>
- bool LuaxNativeClass<TYPE, BASE>::PushLuaxUserdata(LuaxState& state)
- {
- assert(!TYPE::IsLuaxClassSingleton());
- if (!mUserdata)
- {
- BindToLua(state);
- return true;
- }
- return mUserdata.PushRef(state);
- }
-
- template<class TYPE, class BASE>
- bool LuaxNativeClass<TYPE, BASE>::PushLuaxMemberTable(LuaxState& state)
- {
- int top = state.GetTop();
- if (this->PushLuaxUserdata(state))
- {
- if (lua_getmetatable(state, -1)) // ref table
- {
- lua_replace(state, -2);
- if (lua_getmetatable(state, -1)) // member table
- {
- lua_replace(state, -2);
- return true;
- }
- }
- }
- lua_settop(state, top);
- lua_pushnil(state);
- return false;
- }
-
- template<class TYPE, class BASE>
- bool LuaxNativeClass<TYPE, BASE>::PushLuaxRefTable(LuaxState& state)
- {
- // Singleton
- if (TYPE::IsLuaxClassSingleton())
- {
- if (!this->mSingletonRefTable) {
- lua_newtable(state);
- this->mSingletonRefTable.SetRef(state, -1); // strong ref to member table won't be garbage collected
- }
- else {
- this->mSingletonRefTable.PushRef(state);
- }
- return true;
- }
- // Factory
- else
- {
- if (this->PushLuaxUserdata(state))
- {
- if (lua_getmetatable(state, -1))
- {
- lua_replace(state, -2);
- return true;
- }
- }
- }
- return false;
- }
-
- ///
- /// 创建userdata,并以此添加ref table,member table和class table。
- /// ref table 是kv强引用table,保存对其他userdata的引用计数(通过userdata作为key,
- /// 计数为value),以及成员引用
- /// member table 保存lua创建的实例的成员
- /// class table 所有本类型的实例共有的函数表
- ///
- /// BindToLua只会在第一次注册给Lua虚拟机时调用。
- ///
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::BindToLua(LuaxState& state)
- {
- // 单例不能绑定userdata
- assert(!TYPE::IsLuaxClassSingleton());
- assert(!mUserdata);
-
- ///
- /// 创建userdata并留在栈顶,注意地址要转换为TYPE*,直接用this可能会导致多重继承的类丧失多态。
- /// 如果直接传this进去,在多重继承情况下,是拿不到另一头的虚函数表的。所以这里需要将this
- /// 转换为整个对象的低地址,这样可以拿到另一个基类的虚函数表,通过另一个基类实现多态。
- ///
- TYPE* p = static_cast<TYPE*>(this);
- state.PushPtrUserdata(p);
-
- lua_newtable(state); // ref table,无法在lua处访问,用来管理C对象的生命周期
- lua_newtable(state); // member table,lua中创建的对象成员都保存在这里
- PushLuaxClassTable(state); // class table
-
- // stack:
- // -1: class table
- // -2: member table
- // -3: ref table
- // -4: userdata
-
- int top = state.GetTop();
- int memberTable = top - 1;
- int refTable = top - 2;
-
- // ref table 注册 __tostring 和 __gc
- lua_pushcfunction(state, __tostring);
- lua_setfield(state, refTable, "__tostring");
-
- lua_pushcfunction(state, __gc);
- lua_setfield(state, refTable, "__gc");
-
- // ref table 的 __index 和 __newindex 设为 member table
- lua_pushvalue(state, memberTable);
- lua_setfield(state, refTable, "__index");
-
- lua_pushvalue(state, memberTable);
- lua_setfield(state, refTable, "__newindex");
-
- // 设置元表
- lua_setmetatable(state, -2); // class is meta of member
- lua_setmetatable(state, -2); // member is meta of ref
- lua_setmetatable(state, -2); // ref is meta of userdata
-
- // 设置一个userdata的弱引用,方便通过PushLuaUserdata方法返回lua对象
- mUserdata.SetRef(state, -1);
- assert(mUserdata);
-
- // 增加一个虚拟机引用,在GC时-1
- ++mWatchDog.mVMRef;
-#if LUAX_PROFILER
- mRefVMs.insert(state.GetVM());
-#endif
- }
-
- ///
- /// 成员引用管理
- ///
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::SetLuaxMemberRef(LuaxState& state, LuaxMemberRef& memRef, int idx)
- {
- ClearLuaxMemberRef(state, memRef);
- if (!lua_isnil(state, idx))
- {
- idx = state.AbsIndex(idx);
- if (PushLuaxRefTable(state))
- {
- lua_pushvalue(state, idx);
- memRef.refID = luaL_ref(state, -2);
- state.Pop(); // ref table
- }
- }
- }
-
- template<class TYPE, class BASE>
- bool LuaxNativeClass<TYPE, BASE>::PushLuaxMemberRef(LuaxState& state, LuaxMemberRef& memRef)
- {
- if (memRef)
- {
- if (PushLuaxRefTable(state))
- {
- lua_rawgeti(state, -1, memRef.refID);
- lua_replace(state, -2); // ref table
- if (lua_isnil(state, -1))
- goto failed;
- return true;
- }
- }
- lua_pushnil(state);
- failed:
- memRef.refID = LUA_NOREF;
- return false;
- }
-
- template<class TYPE, class BASE>
- bool LuaxNativeClass<TYPE, BASE>::PushLuaxMemberRef(LuaxState& state, int refID)
- {
- if (PushLuaxRefTable(state))
- {
- lua_rawgeti(state, -1, refID);
- lua_replace(state, -2); // ref table
- if (lua_isnil(state, -1))
- goto failed;
- return true;
- }
- lua_pushnil(state);
- failed:
- return false;
- }
-
- template<class TYPE, class BASE>
- void LuaxNativeClass<TYPE, BASE>::ClearLuaxMemberRef(LuaxState& state, LuaxMemberRef& memRef)
- {
- if (memRef)
- {
- if (PushLuaxRefTable(state))
- {
- luaL_unref(state, -1, memRef.refID);
- state.Pop(); // ref table
- }
- memRef.refID = LUA_NOREF;
- }
- }
-
- //--------------------------------------------------------------------------------//
-
- ///
- /// 释放工厂创建的实例
- ///
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::__gc(lua_State* L)
- {
- LUAX_STATE(L);
-
- TYPE* self = state.GetUserdata<TYPE>(1);
- assert(self);
-
-#if LUAX_PROFILER
- std::cout << "Luax: GC<" << TYPE::GetLuaxClassName() << ">\n";
-#endif
-
- if(self->mWatchDog.mVMRef > 0)
- --self->mWatchDog.mVMRef;
-
- self->Release();
-
- return 0;
- }
-
- ///
- /// 输出格式如下:
- /// 地址 类名
- ///
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::__tostring(lua_State* L)
- {
- // params:
- // 1: userdata
-
- LUAX_STATE(L);
- TYPE* self = state.GetUserdata<TYPE>(1);
- if (self)
- {
- cc8* classname = "";
- lua_getfield(state, 1, "GetClassName");
- if (state.IsType(-1, LUA_TFUNCTION))
- {
- lua_pushvalue(L, 1); // userdata
- state.Call(1, 1); // 派生类的GetClassName函数
- classname = state.GetValue<cc8*>(-1, "");
- }
- else
- {
- classname = TYPE::GetLuaxClassName();
- }
- lua_pushfstring(L, "%s: %p", classname, self);
- return 1;
- }
- return 0;
- }
-
-#if LUAX_ENABLE_NATIVE_EXTEND
- ///
- /// 派生出子类,在lua里对派生类的成员和行为进行重新设计,但是保证了userdata的统一。Native class的派生提供__init支持,在
- /// native实体创建后可以使用__init进行初始化,派生类拥有和基类一样的New参数列表,且native对象是一样的类型。
- ///
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::_ExtendFactory(lua_State* L)
- {
- // upvalues:
- // 1: base class
-
- // params:
- // 1: class name
-
- int baseClass = lua_upvalueindex(1);
-
- lua_newtable(L); // class table
-
- int inheritClass = lua_gettop(L);
-
- // .GetClassName()
- cc8* type = lua_tostring(L, 1);
- lua_pushstring(L, type);
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClassName");
-
- // .GetClass()
- lua_pushvalue(L, inheritClass);
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClass");
-
- // .Extend()
- lua_pushvalue(L, inheritClass);
- lua_pushcclosure(L, _ExtendFactory, 1);
- lua_setfield(L, -2, "Extend");
-
- // .New()
- lua_pushvalue(L, inheritClass);
- lua_getfield(L, baseClass, "New");
- lua_pushcclosure(L, _New, 2);
- lua_setfield(L, -2, "New");
-
- // __base = baseClass
- lua_pushvalue(L, baseClass);
- lua_setfield(L, -2, "__base");
-
- // __index = inheritClass
- lua_pushvalue(L, inheritClass);
- lua_setfield(L, -2, "__index");
-
- // metatable is baseClass
- lua_pushvalue(L, baseClass);
- lua_setmetatable(L, inheritClass);
-
- return 1;
- }
-
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::_ExtendSingleton(lua_State* L)
- {
- // upvalues:
- // 1: base class
-
- // params:
- // 1: class name
-
- int baseClass = lua_upvalueindex(1);
-
- lua_newtable(L); // class name
-
- int inheritClass = lua_gettop(L);
-
- // .GetClassName()
- cc8* type = lua_tostring(L, 1);
- lua_pushstring(L, type);
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClassName");
-
- // .GetClass()
- lua_pushvalue(L, inheritClass);
- lua_pushcclosure(L, luax_c_getupvalue, 1);
- lua_setfield(L, -2, "GetClass");
-
- // .Extend()
- lua_pushvalue(L, inheritClass);
- lua_pushcclosure(L, _ExtendFactory, 1);
- lua_setfield(L, -2, "Extend");
-
- // __base = baseClass
- lua_pushvalue(L, baseClass);
- lua_setfield(L, -2, "__base");
-
- // __index = inheritClass
- lua_pushvalue(L, inheritClass);
- lua_setfield(L, -2, "__index");
-
- // metatable is baseClass
- lua_pushvalue(L, baseClass);
- lua_setmetatable(L, inheritClass);
-
- return 1;
- }
-#endif /*LUAX_ENABLE_NATIVE_EXTEND*/
-
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::_GetClass(lua_State* L)
- {
- LUAX_STATE(L);
- if (!mClassTable)
- lua_pushnil(L);
- else
- mClassTable.PushRef(state);
- return 1;
- }
-
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::_GetRefTable(lua_State* L)
- {
- LUAX_STATE(L);
- TYPE* self = state.GetUserdata<TYPE>(1);
- bool success = self->PushLuaxRefTable(state);
- if (!success)
- lua_pushnil(L);
- return 1;
- }
-
- template<class TYPE, class BASE>
- int LuaxNativeClass<TYPE, BASE>::_New(lua_State* L)
- {
- LUAX_STATE(L);
-
- // upvalues:
- // 1: class table
- // 2: original New()
-
- // stack:
- // -1~-n: args
-
- int n = lua_gettop(L); // n args
-
- lua_pushvalue(L, lua_upvalueindex(2));
- if (state.IsType(-1, LUA_TFUNCTION))
- {
- // stack:
- // -1: New
- // -2~-1-n: args
-
- state.PushValues(-1 - n, n);
-
- // stack:
- // -1~-n: args
- // -n-1: New
- // -n-2~-1-2n: args
-
- state.Call(n, 1);
-
- // stack:
- // -1: userdata
- // -2~-1-n: args
-
- // reset member table's metatable to class table
- if (state.IsType(-1, LUA_TUSERDATA))
- {
- if (lua_getmetatable(L, -1)) // ref table
- {
- if (lua_getmetatable(L, -1)) // member table
- {
- lua_pushvalue(L, lua_upvalueindex(1)); // class table
- lua_setmetatable(L, -2);
- state.Pop(); // member table
- }
- state.Pop(); // ref table
- }
-
- // stack:
- // -1: userdata
- // -2~-1-n: args
-
- int args = state.AbsIndex(-1 - n);
-
- // 尝试调用__init函数
- lua_getfield(L, lua_upvalueindex(1), "__init");
-
- if (state.IsType(-1, LUA_TFUNCTION))
- {
- lua_pushvalue(L, -2); // userdata
- state.PushValues(args, n);
- state.Call(n + 1, 0);
- }
- else
- state.Pop();
-
- }
-
- return 1;
- }
- return 0;
- }
-
- template<class TYPE, class BASE> LuaxStrongRef LuaxNativeClass<TYPE, BASE>::mClassTable; // class table
- template<class TYPE, class BASE> LuaxStrongRef LuaxNativeClass<TYPE, BASE>::mSingletonRefTable; // 单例
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_config.h b/Runner/Scripting/luax_config.h
deleted file mode 100644
index 31ea7df..0000000
--- a/Runner/Scripting/luax_config.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef __LUAX_TYPE_H__
-#define __LUAX_TYPE_H__
-
-#include <iostream>
-
-extern "C" {
-#include "lua51/lua.h"
-#include "lua51/lualib.h"
-#include "lua51/lauxlib.h"
-}
-
-#include <assert.h>
-
-namespace Luax
-{
-
- typedef unsigned int uint;
- typedef unsigned long uintptr;
- typedef long sintptr;
-
- typedef const char cc8;
-
- typedef unsigned char u8;
- typedef unsigned short u16;
- typedef unsigned int u32;
- typedef unsigned long long u64;
-
- typedef signed char s8;
- typedef signed short s16;
- typedef signed int s32;
- typedef signed long long s64;
-
-#ifdef _WIN32
- #define LUAX_FINAL final
- #define LUAX_LIBRARY_EXPORT __declspec(dllexport)
- #define LUAX_LIBRARY_IMPORT __declspec(dllimport)
- #define LUAX_FORCE_INLINE __forceinline
- #define LUAX_RESTRICT __restrict
- #define LUAX_ATTRIBUTE_USED
- #define LUAX_ABSTRACT
- #define LUAX_API LUAX_LIBRARY_EXPORT
-#else
- #define LUAX_FINAL final
- #define LUAX_LIBRARY_EXPORT __attribute__((visibility("default")))
- #define LUAX_LIBRARY_IMPORT
- #define LUAX_FORCE_INLINE __attribute__((always_inline)) inline
- #define LUAX_RESTRICT __restrict__
- #define LUAX_ATTRIBUTE_USED __attribute__((used))
- #define LUAX_ABSTRACT
- #define LUAX_API LUAX_LIBRARY_EXPORT
-#endif
-
-#define LUAX_ENABLE_NATIVE_EXTEND 0
-
-#define LUAX_ENABLE_PLAIN_CLASS 0
-#define LUAX_ENABLE_PLAIN_ENUM 0
-
-#define LUAX_PROFILER 1
-
-}
-
-#if LUAX_PROFILER
-#include <iostream>
-#endif
-
-#endif // __LUAX_TYPE_H__ \ No newline at end of file
diff --git a/Runner/Scripting/luax_enum.cpp b/Runner/Scripting/luax_enum.cpp
deleted file mode 100644
index ec73fce..0000000
--- a/Runner/Scripting/luax_enum.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#include "luax_enum.h"
-#include "luax_state.h"
-#include "luax_vm.h"
-
-namespace Luax
-{
-
- ///
- /// 只读metatable的__index
- ///
- int _rmt__index(lua_State* L)
- {
- // params:
- // 1: enum table
- // 2: key
-
- // upvalues:
- // 1: metatable
-
- int mt = lua_upvalueindex(1);
- lua_pushvalue(L, 2);
- lua_rawget(L, mt);
-
- return 1;
- }
-
- int _rmt__newindex(lua_State* L)
- {
- // upvalue:
- // 1: enum table name
-
- cc8* name = lua_tostring(L, lua_upvalueindex(1));
-
- return luaL_error(L, "Enum called \"%s\" is readonly.", name);
- }
-
- //--------------------------------------------------------------------------------//
-#if LUAX_ENABLE_PLAIN_ENUM
- int LuaxPlainEnum::registry(lua_State* L)
- {
- // params:
- // 1: enum name
- // 2: metatable
-
- cc8* name = luaL_checkstring(L, 1);
-
- if (!lua_istable(L, 2))
- {
- return luaL_error(L, "Create plain enum failed. Require table, but get %s", luaL_typename(L, 2));
- }
-
- lua_pushvalue(L, -1);
- lua_setfield(L, -2, "__index");
-
- lua_pushstring(L, name);
- lua_pushcclosure(L, _rmt__newindex, 1);
- lua_setfield(L, -2, "__newindex");
-
- lua_newtable(L); // enum table
-
- lua_pushvalue(L, -2); // metatable
- lua_setmetatable(L, -2);
-
- return 1;
- }
-#endif
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_enum.h b/Runner/Scripting/luax_enum.h
deleted file mode 100644
index 9afece2..0000000
--- a/Runner/Scripting/luax_enum.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef __LUAX_ENUM_H__
-#define __LUAX_ENUM_H__
-
-#include "luax_config.h"
-
-namespace Luax
-{
-
- ///
- /// 导出枚举,枚举是一类不可修改整型集合,枚举的值在
- ///
- struct LuaxEnum
- {
- cc8* name;
- int value;
- };
-
- extern int _rmt__index(lua_State* L);
-
- extern int _rmt__newindex(lua_State* L);
-
- //--------------------------------------------------------------------------------//
-
-#if LUAX_ENABLE_PLAIN_ENUM
- ///
- /// 纯lua的枚举,创建不可修改的table
- ///
- class LuaxPlainEnum
- {
- public:
-
- static int registry(lua_State* L);
-
- };
-#endif
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_globalstate.h b/Runner/Scripting/luax_globalstate.h
deleted file mode 100644
index 91be51f..0000000
--- a/Runner/Scripting/luax_globalstate.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef __LUAX_GLOBAL_STATE_H__
-#define __LUAX_GLOBAL_STATE_H__
-
-// 索引到lua里的global_State
-typedef struct global_State global_State;
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_internal.h b/Runner/Scripting/luax_internal.h
deleted file mode 100644
index 5904008..0000000
--- a/Runner/Scripting/luax_internal.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __LUAX_INTERNAL_H__
-#define __LUAX_INTERNAL_H__
-
-///
-/// 对lua源代码的深度使用
-///
-extern "C"
-{
-#include "lua51/lstate.h"
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_memberref.cpp b/Runner/Scripting/luax_memberref.cpp
deleted file mode 100644
index a8a09ba..0000000
--- a/Runner/Scripting/luax_memberref.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "luax_memberref.h"
-
-namespace Luax
-{
-
- LuaxMemberRef::LuaxMemberRef()
- : refID(LUA_NOREF)
- {
- }
-
- LuaxMemberRef::~LuaxMemberRef()
- {
-
- }
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_memberref.h b/Runner/Scripting/luax_memberref.h
deleted file mode 100644
index cda7946..0000000
--- a/Runner/Scripting/luax_memberref.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef __LUAX_MEMBER_REF_H__
-#define __LUAX_MEMBER_REF_H__
-
-#include "luax_config.h"
-
-namespace Luax
-{
-
- ///
- /// 实例的ref table保存的member ref。由luax class做具体的管理。实例的ref table是强引用,用来管理里面member的生命周期。
- /// 用来在lua和native之间进行数据沟通。
- ///
- class LuaxMemberRef
- {
- public:
- LuaxMemberRef();
- ~LuaxMemberRef();
-
- inline operator bool() { return refID != LUA_NOREF; };
-
- int refID;
-
- };
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_ref.cpp b/Runner/Scripting/luax_ref.cpp
deleted file mode 100644
index d4be775..0000000
--- a/Runner/Scripting/luax_ref.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#include "luax_vm.h"
-#include "luax_ref.h"
-
-namespace Luax
-{
-
- LuaxRef::LuaxRef(int mode)
- : mRefID(LUA_NOREF)
- , mMode(mode)
- {
- }
-
- LuaxRef::~LuaxRef()
- {
- }
-
- LuaxRef::operator bool()
- {
- return (mRefID != LUA_NOREF);
- }
-
- bool LuaxRef::PushRef(LuaxState& state)
- {
- assert(mRefID != LUA_NOREF);
-
- LuaxVM* vm = state.GetVM();
- if (!vm) return false;
- if (mMode == STRONG_REF)
- {
- LuaxRefTable& table = vm->GetStrongRefTable();
- table.PushRef(state, mRefID);
- }
- else if (mMode == WEAK_REF)
- {
- LuaxRefTable& table = vm->GetWeakRefTable();
- table.PushRef(state, mRefID);
- }
- else
- {
- state.PushNil();
- return false;
- }
- return true;
- }
-
- void LuaxRef::SetRef(LuaxState& state, int idx)
- {
- LuaxVM* vm = state.GetVM();
- if (!vm) return;
- if (mMode == STRONG_REF)
- {
- LuaxRefTable& table = vm->GetStrongRefTable();
- mRefID = table.Ref(state, idx);
- }
- else if (mMode == WEAK_REF)
- {
- LuaxRefTable& table = vm->GetWeakRefTable();
- mRefID = table.Ref(state, idx);
- }
- }
-
- LuaxStrongRef::LuaxStrongRef()
- : LuaxRef(STRONG_REF)
- {
- }
-
- LuaxWeakRef::LuaxWeakRef()
- : LuaxRef(WEAK_REF)
- {
- }
-
-}
diff --git a/Runner/Scripting/luax_ref.h b/Runner/Scripting/luax_ref.h
deleted file mode 100644
index d0001f2..0000000
--- a/Runner/Scripting/luax_ref.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef __LUAX_REF_H__
-#define __LUAX_REF_H__
-
-#include "luax_config.h"
-#include "luax_state.h"
-
-namespace Luax
-{
-
- ///
- /// 引用,存在LUA_REGISTRYINDEX下面的两个表里
- ///
- class LuaxRef
- {
- public:
-
- enum RefMode
- {
- STRONG_REF,
- WEAK_REF
- };
-
- LuaxRef(int mode = STRONG_REF);
- virtual ~LuaxRef();
-
- operator bool();
-
- void SetRef(LuaxState& state, int idx);
- bool PushRef(LuaxState& state);
-
- int GetRefID();
-
- private:
-
- int mRefID; // luaL_ref
- int mMode; // strong or weak
-
- };
-
- ///
- /// 强引用,在LUA_REGISTRYINDEX["_LUAX_STRONGREF_TABLE"]里,保证lua object不会被回收。
- ///
- class LuaxStrongRef: public LuaxRef
- {
- public:
- LuaxStrongRef();
-
- };
-
- ///
- /// 弱引用,在LUA_REGISTRYINDEX["_LUAX_WEAKREF_TABLE"]里,不影响lua object的回收,只是作为一个方便取lua object的映射。
- ///
- class LuaxWeakRef : public LuaxRef
- {
- public:
- LuaxWeakRef();
-
- };
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_reftable.cpp b/Runner/Scripting/luax_reftable.cpp
deleted file mode 100644
index 461e2d9..0000000
--- a/Runner/Scripting/luax_reftable.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-#include "luax_reftable.h"
-#include "luax_state.h"
-
-namespace Luax
-{
-
- LuaxRefTable::LuaxRefTable()
- : mState(nullptr)
- {
- }
-
- LuaxRefTable::~LuaxRefTable()
- {
- }
-
- void LuaxRefTable::Init(LuaxState& state, cc8* name, cc8* mode)
- {
- assert(!mState);
- assert(name);
-
- mName = name;
- mMode = 0;
- for (int i = 0; mode && mode[i]; ++i)
- {
- if (mode[i] == 'k') mMode |= WEAK_KEY;
- else if (mode[i] == 'v') mMode |= WEAK_VALUE;
- }
- mState = state.GetHandle();
-
- state.GetField(LUA_REGISTRYINDEX, name); // register[mName]
- if (state.IsNil(-1))
- {
- state.Pop();
-
- lua_newtable(state); // ref table
- int ridx = state.AbsIndex(-1);
- lua_newtable(state); // metatable of ref table
- int idx = state.AbsIndex(-1);
-
- // __mode
- if (mode)
- {
- state.Push(mode);
- state.SetField(idx, "__mode");
- }
-
- state.Settop(idx);
- lua_setmetatable(state, ridx);
-
- state.Settop(ridx);
- state.SetField(LUA_REGISTRYINDEX, name);
- }
- else
- {
- state.Pop();
- }
- }
-
- bool LuaxRefTable::IsKeyWeak()
- {
- assert(mState);
-
- return mMode & WEAK_KEY;
- }
-
- bool LuaxRefTable::IsValueWeak()
- {
- assert(mState);
-
- return mMode & WEAK_VALUE;
- }
-
- int LuaxRefTable::Ref(LuaxState& state, int idx)
- {
- assert(mState);
-
- idx = state.AbsIndex(idx);
- state.GetField(LUA_REGISTRYINDEX, mName); // ref table
- lua_pushvalue(state, idx); // stuff
- int refID = luaL_ref(state, -2);
- assert(refID != LUA_NOREF);
- state.Pop();
- return refID;
- }
-
- void LuaxRefTable::Unref(LuaxState& state, int refID)
- {
- assert(mState);
-
- state.GetField(LUA_REGISTRYINDEX, mName); // ref table
- luaL_unref(state, -1, refID);
- state.Pop();
- return;
- }
-
- void LuaxRefTable::PushRefTable(LuaxState& state)
- {
- assert(mState);
-
- lua_getfield(state, LUA_REGISTRYINDEX, mName);
- }
-
- void LuaxRefTable::PushRef(LuaxState& state, int refID)
- {
- assert(mState);
-
- lua_getfield(state, LUA_REGISTRYINDEX, mName);
- lua_rawgeti(state, -1, refID);
- lua_replace(state, -2);
- }
-
- void LuaxRefTable::Clear(LuaxState& state)
- {
- assert(mState);
-
- lua_newtable(state);
- state.SetField(LUA_REGISTRYINDEX, mName);
- }
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_reftable.h b/Runner/Scripting/luax_reftable.h
deleted file mode 100644
index 58e4b9c..0000000
--- a/Runner/Scripting/luax_reftable.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef __LUAX_REFTABLE_H__
-#define __LUAX_REFTABLE_H__
-
-#include "luax_config.h"
-
-namespace Luax
-{
-
- class LuaxState;
-
- ///
- /// ref table 管理,对strong ref table和weak ref table两个table的代理。
- ///
- class LuaxRefTable
- {
- public:
-
- enum
- {
- WEAK_KEY = 1,
- WEAK_VALUE = 1 << 1
- };
-
- LuaxRefTable();
- ~LuaxRefTable();
-
- inline operator bool() { return mState; };
-
- void Init(LuaxState& state, cc8* name, cc8* mode = nullptr);
-
- bool IsKeyWeak();
- bool IsValueWeak();
-
- ///
- /// 对stack[idx]的实体在此ref table中增加一个引用,并返回refID
- ///
- int Ref(LuaxState& state, int idx);
- void Unref(LuaxState& state, int refID);
-
- ///
- /// 将此 ref table 放在栈顶
- ///
- void PushRefTable(LuaxState& state);
-
- ///
- /// 将 reftable[refID] 放在栈顶
- ///
- void PushRef(LuaxState& state, int refID);
-
- ///
- /// 清空 ref table,表还留在LUA_REGISTRYINDEX[mName]
- ///
- void Clear(LuaxState& state);
-
- private:
-
- friend class LuaxState;
-
- lua_State* mState; // 用来做一些确认工作
- cc8* mName; // ref table的名称
- int mMode; // ref table的类型
-
- };
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_state.cpp b/Runner/Scripting/luax_state.cpp
deleted file mode 100644
index a2610b4..0000000
--- a/Runner/Scripting/luax_state.cpp
+++ /dev/null
@@ -1,857 +0,0 @@
-#include "luax_enum.h"
-#include "luax_state.h"
-#include "luax_vm.h"
-#include "luax_class.hpp"
-#include "luax_internal.h"
-
-namespace Luax
-{
-
- LuaxState::LuaxState(lua_State* state)
- : mState(state)
- {
- assert(state);
- }
-
- LuaxState::LuaxState(const LuaxState& state)
- : mState(state.mState)
- {
- assert(state.mState);
- }
-
- LuaxState::~LuaxState()
- {
- }
-
- void LuaxState::OpenLibs()
- {
- luaL_openlibs(mState);
- }
-
- global_State* LuaxState::GetGlobalState()
- {
- return G(mState);
- }
-
- LuaxVM* LuaxState::GetVM()
- {
- return LuaxVM::TryGetVM(G(mState));
- }
-
- void LuaxState::PushGlobalNamespace()
- {
- int top = GetTop();
-
- lua_newtable(mState); // pseudo namespace table
- int pnt = GetTop();
-
- lua_newtable(mState); // metatable
- int mt = GetTop();
-
- // __index = _G
- // __newindex = _G
- lua_pushvalue(mState, LUA_GLOBALSINDEX);
- lua_pushvalue(mState, LUA_GLOBALSINDEX);
- lua_setfield(mState, mt, "__index");
- lua_setfield(mState, mt, "__newindex");
-
- lua_setmetatable(mState, pnt);
-
- // stack:
- // -1 pseudo global namespace
- }
-
- void LuaxState::PushNamespace(cc8* name)
- {
- assert(IsNamespace(-1));
-
- int top = GetTop();
-
- lua_getfield(mState, -1, name);
- if (lua_isnil(mState, -1))
- {
- lua_pop(mState, 1);
-
- lua_newtable(mState);
- lua_pushvalue(mState, -1);
- lua_setfield(mState, top, name);
- }
-
- // stack:
- // -1 namespace
- }
-
- void LuaxState::PopNamespace()
- {
- assert(lua_istable(mState, -1));
- lua_pop(mState, 1);
- }
-
- bool LuaxState::IsNamespace(int idx)
- {
- return lua_istable(mState, idx);
- }
-
- void LuaxState::DoString(const std::string& code)
- {
- luaL_dostring(mState, code.c_str());
- }
-
- int LuaxState::AbsIndex(int idx)
- {
-/*
-#define abs_index(mState, i) ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : \
- lua_gettop(mState) + (i) + 1)
-*/
- if (idx < 0) {
- //return lua_gettop(mState) + idx + 1;
- return ((idx) > 0 || (idx) <= LUA_REGISTRYINDEX ? (idx) : \
- lua_gettop(mState) + (idx)+1);
- }
- return idx;
- }
-
- void LuaxState::Call(int nArgs, int nResults)
- {
- lua_pcall(mState, nArgs, nResults, 0);
- }
-
- void LuaxState::PushNil()
- {
- lua_pushnil(mState);
- }
-
- void LuaxState::Push(bool value)
- {
- lua_pushboolean(mState, value ? 1 : 0);
- }
-
- void LuaxState::Push(cc8* value)
- {
- lua_pushstring(mState, value);
- }
-
- void LuaxState::Push(double value)
- {
- lua_pushnumber(mState, value);
- }
-
- void LuaxState::Push(float value)
- {
- lua_pushnumber(mState, value);
- }
-
- void LuaxState::Push(int value)
- {
- lua_pushnumber(mState, value);
- }
-
- void LuaxState::Push(u16 value)
- {
- lua_pushnumber(mState, value);
- }
-
- void LuaxState::Push(u32 value)
- {
- lua_pushnumber(mState, value);
- }
-
- void LuaxState::Push(u64 value)
- {
- lua_pushnumber(mState, (double)value);
- }
-
- void LuaxState::Push(s64 value)
- {
- lua_pushinteger(mState, value);
- }
-
- void LuaxState::Push(uintptr value)
- {
- lua_pushlightuserdata(mState, (void*)value);
- }
-
- void LuaxState::Push(lua_CFunction value)
- {
- lua_pushcfunction(mState, value);
- }
-
- void LuaxState::Push(void* data, size_t size)
- {
- lua_pushlstring(mState, (cc8*)data, size);
- }
-
- void LuaxState::Push(const void* value)
- {
- lua_pushlightuserdata(mState, (void*)value);
- }
-
- void LuaxState::Push(std::string value)
- {
- Push(value.c_str());
- }
-
- void LuaxState::PushValues(int idx, int n)
- {
- idx = AbsIndex(idx);
- for (int i = idx; i < idx + n; ++i)
- lua_pushvalue(mState, i);
- }
-
- void LuaxState::Pop(int n /* = 1 */)
- {
- lua_pop(mState, n);
- }
-
- bool LuaxState::IsNil(int idx)
- {
- return lua_isnil(mState, idx);
- }
-
- bool LuaxState::IsNilOrNone(int idx)
- {
- int t = lua_type(mState, idx);
- return ((t == LUA_TNONE) || (t == LUA_TNIL));
- }
-
- bool LuaxState::IsTableOrUserdata(int idx)
- {
- int check = lua_type(mState, idx);
- return ((check == LUA_TTABLE) || (check == LUA_TUSERDATA));
- }
-
- bool LuaxState::IsTrueOrNotNil(int idx)
- {
- if (lua_isboolean(mState, idx)) {
- return lua_toboolean(mState, idx) ? true : false;
- }
- return !lua_isnil(mState, idx);
- }
-
- bool LuaxState::IsType(int idx, int type)
- {
- return (lua_type(mState, idx) == type);
- }
-
- bool LuaxState::IsType(int idx, cc8* name, int type)
- {
- return this->HasField(idx, name, type);
- }
-
- bool LuaxState::IsValid()
- {
- return (mState != 0);
- }
-
- void LuaxState::Settop(int idx)
- {
- lua_settop(mState, idx);
- }
-
- int LuaxState::GetTop()
- {
- return lua_gettop(mState);
- }
-
- bool LuaxState::HasField(int idx, cc8* name) {
-
- lua_getfield(mState, idx, name);
- bool hasField = (lua_isnil(mState, -1) == false);
- lua_pop(mState, 1);
-
- return hasField;
- }
-
- bool LuaxState::HasField(int idx, int key) {
-
- this->GetField(idx, key);
- bool hasField = (lua_isnil(mState, -1) == false);
- lua_pop(mState, 1);
-
- return hasField;
- }
-
- bool LuaxState::HasField(int idx, cc8* name, int type) {
-
- lua_getfield(mState, idx, name);
- bool hasField = (lua_type(mState, -1) == type);
- lua_pop(mState, 1);
-
- return hasField;
- }
-
- bool LuaxState::HasField(int idx, int key, int type) {
-
- this->GetField(idx, key);
- bool hasField = (lua_type(mState, -1) == type);
- lua_pop(mState, 1);
-
- return hasField;
- }
-
- bool LuaxState::HasKeys(int idx) {
-
- idx = this->AbsIndex(idx);
-
- lua_pushnil(mState); /* first key */
- if (lua_next(mState, idx) != 0) {
- lua_pop(mState, 2);
- return true;
- }
- return false;
- }
-
- void LuaxState::GetField(int idx, cc8* name)
- {
- lua_getfield(mState, idx, name);
- }
-
- void LuaxState::GetField(int idx, int key)
- {
- idx = this->AbsIndex(idx);
-
- lua_pushinteger(mState, key);
- lua_gettable(mState, idx);
- }
-
- std::string LuaxState::GetField(int idx, cc8* key, cc8* default_value)
- {
- std::string str;
- if (this->GetFieldWithType(idx, key, LUA_TSTRING)) {
- str = lua_tostring(mState, -1);
- lua_pop(mState, 1);
- }
- else {
- str = default_value;
- }
- return str;
- }
-
- std::string LuaxState::GetField(int idx, int key, cc8* default_value)
- {
- std::string str;
- if (this->GetFieldWithType(idx, key, LUA_TSTRING)) {
- str = lua_tostring(mState, -1);
- lua_pop(mState, 1);
- }
- else {
- str = default_value;
- }
- return str;
- }
-
- std::string LuaxState::GetField(int idx, cc8* key, const std::string& value)
- {
- std::string str;
- if (this->GetFieldWithType(idx, key, LUA_TSTRING)) {
- str = lua_tostring(mState, -1);
- lua_pop(mState, 1);
- }
- else {
- str = value;
- }
- return str;
- }
-
- std::string LuaxState::GetField(int idx, int key, const std::string& value)
- {
- std::string str;
- if (this->GetFieldWithType(idx, key, LUA_TSTRING)) {
- str = lua_tostring(mState, -1);
- lua_pop(mState, 1);
- }
- else {
- str = value;
- }
- return str;
- }
-
- bool LuaxState::GetFieldWithType(int idx, cc8* name, int type)
- {
- lua_getfield(mState, idx, name);
- if (lua_type(mState, -1) != type) {
- lua_pop(mState, 1);
- return false;
- }
- return true;
- }
-
- bool LuaxState::GetFieldWithType(int idx, int key, int type)
- {
- this->GetField(idx, key);
- if (lua_type(mState, -1) != type) {
- lua_pop(mState, 1);
- return false;
- }
- return true;
- }
-
- void LuaxState::SetField(int idx, cc8* key)
- {
- if (IsTableOrUserdata(idx))
- {
- idx = AbsIndex(idx);
- lua_setfield(mState, idx, key);
- }
- }
-
- cc8* LuaxState::GetLuaTypeName(int type)
- {
- switch (type) {
- case LUA_TNONE: return "none";
- case LUA_TNIL: return "nil";
- case LUA_TBOOLEAN: return "boolean";
- case LUA_TLIGHTUSERDATA: return "lightuserdata";
- case LUA_TNUMBER: return "number";
- case LUA_TSTRING: return "string";
- case LUA_TTABLE: return "table";
- case LUA_TFUNCTION: return "function";
- case LUA_TUSERDATA: return "userdata";
- case LUA_TTHREAD: return "thread";
- }
- return "unknown";
- }
-
-
- bool LuaxState::GetSubfieldWithType(int idx, cc8* format, int type, ...)
- {
- va_list args;
- va_start(args, type);
-
- idx = this->AbsIndex(idx);
- lua_pushvalue(this->mState, idx);
-
- for (cc8* c = format; *c; ++c) {
- switch (*c) {
- // number
- case 'N':
- lua_pushnumber(this->mState, va_arg(args, int));
- lua_gettable(this->mState, -1);
- break;
-
- // string
- case 'S':
- lua_getfield(this->mState, -1, va_arg(args, char*));
- break;
-
- default:
- lua_pushnil(this->mState);
- }
-
- if (lua_isnil(this->mState, -1)) break;
- lua_replace(this->mState, -2);
- }
- va_end(args);
- if (lua_type(this->mState, -1) != type) {
- lua_pop(this->mState, 1);
- return false;
- }
- return true;
- }
-
- bool LuaxState::CheckParams(int idx, cc8* format)
- {
- idx = AbsIndex(idx);
-
- for (int i = 0; format[i]; ++i) {
-
- int pos = idx + i;
- int type = LUA_TNIL;
- int expected = LUA_TNONE;
-
- if (pos <= GetTop()) {
- type = lua_type(mState, pos);
- }
-
- switch (format[i]) {
-
- // boolean
- case 'B':
- if (type != LUA_TBOOLEAN) expected = LUA_TBOOLEAN;
- break;
-
- // coroutine
- case 'C':
- if (type != LUA_TTHREAD) expected = LUA_TTHREAD;
- break;
-
- // function
- case 'F':
- if (type != LUA_TFUNCTION) expected = LUA_TFUNCTION;
- break;
-
- // light userdata
- case 'L':
- if (type != LUA_TLIGHTUSERDATA) expected = LUA_TLIGHTUSERDATA;
- break;
-
- // number
- case 'N':
- if (type != LUA_TNUMBER) expected = LUA_TNUMBER;
- break;
-
- // string
- case 'S':
- if (type != LUA_TSTRING) expected = LUA_TSTRING;
- break;
-
- // table
- case 'T':
- if (type != LUA_TTABLE) expected = LUA_TTABLE;
- break;
-
- // userdata
- case 'U':
- if (type != LUA_TUSERDATA) expected = LUA_TUSERDATA;
- break;
-
- // any type
- case '*':
- case '.':
- break;
- }
-
- if (expected != LUA_TNONE) {
- return false;
- }
- }
-
- return true;
- }
-
- template <>
- bool LuaxState::GetValue < bool >(int idx, const bool value) {
-
- if (this->IsType(idx, LUA_TBOOLEAN)) {
- return (lua_toboolean(this->mState, idx) != 0);
- }
- return value;
- }
-
-
- template <>
- cc8* LuaxState::GetValue < cc8* >(int idx, const cc8* value) {
-
- if (this->IsType(idx, LUA_TSTRING)) {
- return lua_tostring(this->mState, idx);
- }
- return value;
- }
-
- template <>
- std::string LuaxState::GetValue<std::string>(int idx, const std::string value)
- {
- std::string str;
- if (lua_type(this->mState, idx) == LUA_TSTRING) {
- str = lua_tostring(this->mState, idx);
- }
- else {
- str = value;
- }
- return str;
- }
-
- template <>
- double LuaxState::GetValue < double >(int idx, const double value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- float LuaxState::GetValue < float >(int idx, const float value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (float)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- s8 LuaxState::GetValue < s8 >(int idx, const s8 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (s8)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
-
- template <>
- s16 LuaxState::GetValue < s16 >(int idx, const s16 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (s16)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
-
- template <>
- s32 LuaxState::GetValue < s32 >(int idx, const s32 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (s32)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- s64 LuaxState::GetValue < s64 >(int idx, const s64 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (s64)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- u8 LuaxState::GetValue < u8 >(int idx, const u8 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (u8)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- u16 LuaxState::GetValue < u16 >(int idx, const u16 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (u16)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- u32 LuaxState::GetValue < u32 >(int idx, const u32 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (u32)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- u64 LuaxState::GetValue < u64 >(int idx, const u64 value)
- {
- if (this->IsType(idx, LUA_TNUMBER)) {
- return (u64)lua_tonumber(this->mState, idx);
- }
- return value;
- }
-
- template <>
- const void* LuaxState::GetValue < const void* >(int idx, const void* value)
- {
- if (this->IsType(idx, LUA_TLIGHTUSERDATA)) {
- return (void*)lua_touserdata(this->mState, idx);
- }
- return value;
- }
-
- void LuaxState::PushPtrUserdata(void* ptr)
- {
- void** handle = (void**)lua_newuserdata(this->mState, sizeof(void*));
- assert(handle);
- (*handle) = ptr;
- }
-
- void LuaxState::RegisterEnum(cc8* name, LuaxEnum* en)
- {
- assert(name);
- assert(en);
-
- // short name
- lua_State* L = mState;
-
- int top = GetTop();
-
- lua_newtable(L); // enum table
-
- int et = GetTop();
-
- lua_newtable(L); // matatable
-
- // 所有枚举都存在metatable下,修改时触发__newindex报错
- for (; en->name; ++en)
- {
- lua_pushinteger(L, en->value);
- lua_setfield(L, -2, en->name);
- }
-
- // __index
- //lua_pushvalue(L, -1); // metatable
- //lua_pushcclosure(L, _rmt__index, 1);
- lua_pushvalue(L, -1);
- lua_setfield(L, -2, "__index");
-
- // __newinedx
- lua_pushstring(L, name); // enum name
- lua_pushcclosure(L, _rmt__newindex, 1);
- lua_setfield(L, -2, "__newindex");
-
- lua_setmetatable(L, et);
-
- lua_setfield(L, top, name);
- }
-
-
- void LuaxState::RegisterMethods(const luaL_Reg *l)
- {
- assert(lua_istable(mState, -1));
- // luaL_register第二个参数为空,则向-1位置注册luaL_Reg中这些函数
- luaL_register(mState, 0, l);
- }
-
- void LuaxState::RegisterMethod(cc8* fname, lua_CFunction func)
- {
- assert(lua_istable(mState, -1));
- lua_pushcfunction(mState, func);
- lua_setfield(mState, -1, fname);
- }
-
- void LuaxState::RegisterPreloader(cc8* libname, lua_CFunction preloader)
- {
- lua_getglobal(mState, "package");
- lua_getfield(mState, -1, "preload");
- lua_pushcfunction(mState, preloader);
- lua_setfield(mState, -2, libname);
- lua_pop(mState, 2);
- }
-
- void LuaxState::RegisterLib(cc8* libname, const luaL_Reg* l)
- {
- luaL_register(mState, libname, l);
- }
-
-#if LUAX_ENABLE_PLAIN_CLASS
- void LuaxState::RegisterPlainClassRegistry(cc8* name)
- {
- assert(lua_istable(mState, -1));
- lua_pushcfunction(mState, LuaxPlainClass::registry);
- lua_setfield(mState, -2, name);
- }
-#endif
-
-#if LUAX_ENABLE_PLAIN_ENUM
- void LuaxState::RegisterPlainEnumRegistry(cc8* name)
- {
- assert(lua_istable(mState, -1));
- lua_pushcfunction(mState, LuaxPlainEnum::registry);
- lua_setfield(mState, -2, name);
- }
-#endif
-
- int LuaxState::ErrorType(int idx, cc8* hint)
- {
- return luaL_typerror(mState, idx, hint);
- }
-
- template <>
- bool LuaxState::CheckValue < bool >(int idx)
- {
- bool b = false;
- if (lua_type(mState, idx) == LUA_TBOOLEAN)
- {
- b = lua_toboolean(mState, idx);
- }
- else
- {
- luaL_typerror(mState, idx, lua_typename(mState, LUA_TBOOLEAN));
- }
- return b;
- }
-
- template <>
- cc8* LuaxState::CheckValue < cc8* >(int idx)
- {
- return luaL_checkstring(mState, idx);
- }
-
- template <>
- double LuaxState::CheckValue < double >(int idx)
- {
- return luaL_checknumber(mState, idx);
- }
-
- template <>
- float LuaxState::CheckValue < float >(int idx)
- {
- return luaL_checknumber(mState, idx);
- }
-
- template <>
- s8 LuaxState::CheckValue < s8 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- s16 LuaxState::CheckValue < s16 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- s32 LuaxState::CheckValue < s32 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- s64 LuaxState::CheckValue < s64 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- u8 LuaxState::CheckValue < u8 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- u16 LuaxState::CheckValue < u16 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- u32 LuaxState::CheckValue < u32 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- u64 LuaxState::CheckValue < u64 >(int idx)
- {
- return luaL_checkinteger(mState, idx);
- }
-
- template <>
- std::string LuaxState::CheckValue < std::string >(int idx)
- {
- return luaL_checkstring(mState, idx);
- }
-
- ///
- /// check light userdata
- ///
- template <>
- const void* LuaxState::CheckValue < const void* >(int idx)
- {
- if (IsType(idx, LUA_TLIGHTUSERDATA))
- {
- return GetValue<const void*>(idx, nullptr);
- }
- else
- {
- luaL_typerror(mState, idx, "light userdata");
- return nullptr;
- }
- }
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_state.h b/Runner/Scripting/luax_state.h
deleted file mode 100644
index e162965..0000000
--- a/Runner/Scripting/luax_state.h
+++ /dev/null
@@ -1,298 +0,0 @@
-#ifndef __LUAX_STATE_H__
-#define __LUAX_STATE_H__
-
-#include <string>
-
-#include "luax_config.h"
-#include "luax_reftable.h"
-#include "luax_globalstate.h"
-
-namespace Luax
-{
-
- class LuaxVM;
- class LuaxEnum;
- class LuaxStrongRef;
- class LuaxWeakRef;
-
- ///
- /// 对lua_State的代理,除了保存一个lua_State的引用不保存其他内容。一个实例的metatable如下:
- /// class table
- /// member table
- /// ref table
- /// userdata
- /// 从userdata通过getmetatable获取上级metatable。除此之外还有一个class table注册在对应
- /// 的名称空间里。
- ///
- LUAX_API class LuaxState
- {
- public:
-
- LuaxState(lua_State* state);
- LuaxState(const LuaxState& state);
- virtual ~LuaxState();
-
- inline lua_State* operator ->() { return mState; };
- inline lua_State& operator *() { return *mState; };
- inline operator lua_State*() { return mState; }
- inline operator bool() { return mState != nullptr; };
-
- ///
- /// 获取绑定的lua_State
- ///
- inline lua_State* GetHandle() { return mState; };
-
- global_State* GetGlobalState();
-
- LuaxVM* GetVM();
-
- //------------------------------------------------------------------------------//
-
- void OpenLibs();
-
- //------------------------------------------------------------------------------//
- // 名称空间管理,名称空间就是一个表,_G是最上面的表
-
- void PushGlobalNamespace();
- void PushNamespace(cc8* name);
- void PopNamespace();
- bool IsNamespace(int idx);
-
- //------------------------------------------------------------------------------//
-
- void SetTop(int top);
- int GetTop();
- bool CheckParams(int idx, cc8* format);
- int AbsIndex(int idx);
- void Call(int nArgs, int nResults);
-
- //------------------------------------------------------------------------------//
-
- void GetField(int idx, cc8* name);
- void GetField(int idx, int key);
- std::string GetField(int idx, cc8* key, cc8* value);
- std::string GetField(int idx, int key, cc8* value);
- std::string GetField(int idx, cc8* key, const std::string& value);
- std::string GetField(int idx, int key, const std::string& value);
- bool GetFieldWithType(int idx, cc8* name, int type);
- bool GetFieldWithType(int idx, int key, int type);
- bool GetSubfieldWithType(int idx, cc8* format, int type, ...);
- static cc8* GetLuaTypeName(int type);
-
- void SetField(int idx, cc8* key);
-
- bool IsNil(int idx);
- bool IsNilOrNone(int idx);
- bool IsTableOrUserdata(int idx);
- bool IsTrueOrNotNil(int idx);
- bool IsType(int idx, int type);
- bool IsType(int idx, cc8* name, int type);
- bool IsValid();
-
- bool HasField(int idx, cc8* name);
- bool HasField(int idx, int key);
- bool HasField(int idx, cc8* name, int type);
- bool HasField(int idx, int name, int type);
- bool HasKeys(int idx);
-
- void PushNil();
- void Push(bool value);
- void Push(cc8* value);
- void Push(double value);
- void Push(float value);
- void Push(int value);
- void Push(u16 value);
- void Push(u32 value);
- void Push(u64 value);
- void Push(s64 value);
- void Push(uintptr value);
- void Push(lua_CFunction value);
- void Push(void* data, size_t size);
- void Push(const void* value);
- void Push(std::string value);
-
- ///
- /// 将idx开始的n个push到栈顶,idx会被取正,n向上生长。
- ///
- void PushValues(int idx, int n);
-
- ///
- /// 以void** 的形式创建userdata,并将值设置为ptr
- ///
- void PushPtrUserdata(void* ptr);
-
- void Pop(int n = 1);
-
- void Settop(int idx);
-
- template<typename T> T* GetUserdata(int idx = 1);
-
- //------------------------------------------------------------------------------//
-
- int ErrorType(int idx, cc8* hint);
-
- //------------------------------------------------------------------------------//
-
- template<typename T> T GetValue(int idx, T default_value);
- template<typename T> T GetField(int idx, int key, T value);
- template<typename T> T GetField(int idx, cc8* key, T value);
- template<typename T> void SetField(int idx, cc8* key, T value);
- template<typename T> void SetFieldByIndex(int idx, int key, T value);
-
- template<typename T> T* CheckUserdata(int idx);
- template<typename T> T CheckValue(int idx);
-
- //------------------------------------------------------------------------------//
-
- void DoString(const std::string& code);
- void DoFile(const std::string& file);
-
- //------------------------------------------------------------------------------//
- // 注册方法
-
- ///
- /// 注册工厂,适用于普通类,有New方法
- ///
- template<class TYPE> void RegisterFactory();
-
- ///
- /// 注册单例,没有New方法
- ///
- template<class TYPE> void RegisterSingleton();
-
- ///
- /// 注册枚举
- ///
- void RegisterEnum(cc8* name, LuaxEnum* enums);
-
- ///
- /// 注册C函数,注意后面加一行{0, 0}
- ///
- void RegisterMethods(const luaL_Reg *l);
-
- ///
- /// 注册单个C函数
- ///
- void RegisterMethod(cc8* fname, lua_CFunction func);
-
- ///
- /// 把preloader加到package.preload里,当require"libname"时lua的loader_preload根据
- /// libname找到preloader直接加载。用来实现需要require的时候才加载,并且加载过一次后
- /// package.loaded记录下来,下次不会再加载。通过require会调用这个preloader。
- ///
- void RegisterPreloader(cc8* libname, lua_CFunction preloader);
-
- ///
- /// 根据luaL_Reg建立lib table,并在_G和package.loaded建立对libname的索引,指向lib table。
- ///
- void RegisterLib(cc8* libname, const luaL_Reg* l);
-
-#if LUAX_ENABLE_PLAIN_CLASS
- ///
- /// 注册纯lua类的注册函数,用来创建纯lua类。
- ///
- void RegisterPlainClassRegistry(cc8* name);
-#endif
-
-#if LUAX_ENABLE_PLAIN_ENUM
- ///
- /// 注册纯lua的枚举,以防止修改枚举值。
- ///
- void RegisterPlainEnumRegistry(cc8* name);
-#endif
-
- protected:
-
- friend class LuaxVM;
-
- ///
- /// 屏蔽对LuaxState的地址相关操作
- ///
- void* operator &();
- void* operator new(size_t size);
-
- lua_State* const mState;
- };
-
- //--------------------------------------------------------------------------------//
- // GetValue()模板特化
-
- template <> bool LuaxState::GetValue < bool >(int idx, const bool value);
- template <> cc8* LuaxState::GetValue < cc8* >(int idx, const cc8* value);
- template <> double LuaxState::GetValue < double >(int idx, const double value);
- template <> float LuaxState::GetValue < float >(int idx, const float value);
- template <> s8 LuaxState::GetValue < s8 >(int idx, const s8 value);
- template <> s16 LuaxState::GetValue < s16 >(int idx, const s16 value);
- template <> s32 LuaxState::GetValue < s32 >(int idx, const s32 value);
- template <> s64 LuaxState::GetValue < s64 >(int idx, const s64 value);
- template <> u8 LuaxState::GetValue < u8 >(int idx, const u8 value);
- template <> u16 LuaxState::GetValue < u16 >(int idx, const u16 value);
- template <> u32 LuaxState::GetValue < u32 >(int idx, const u32 value);
- template <> u64 LuaxState::GetValue < u64 >(int idx, const u64 value);
- template <> std::string LuaxState::GetValue < std::string >(int idx, const std::string value);
- template <> const void* LuaxState::GetValue < const void* >(int idx, const void* value);
-
- //--------------------------------------------------------------------------------//
- // CheckValue模板特化
-
- template <> bool LuaxState::CheckValue < bool >(int idx);
- template <> cc8* LuaxState::CheckValue < cc8* >(int idx);
- template <> double LuaxState::CheckValue < double >(int idx);
- template <> float LuaxState::CheckValue < float >(int idx);
- template <> s8 LuaxState::CheckValue < s8 >(int idx);
- template <> s16 LuaxState::CheckValue < s16 >(int idx);
- template <> s32 LuaxState::CheckValue < s32 >(int idx);
- template <> s64 LuaxState::CheckValue < s64 >(int idx);
- template <> u8 LuaxState::CheckValue < u8 >(int idx);
- template <> u16 LuaxState::CheckValue < u16 >(int idx);
- template <> u32 LuaxState::CheckValue < u32 >(int idx);
- template <> u64 LuaxState::CheckValue < u64 >(int idx);
- template <> std::string LuaxState::CheckValue < std::string >(int idx);
- template <> const void* LuaxState::CheckValue < const void* >(int idx);
-
- ///
- /// 在成员方法里创建LuaxState并对参数进行检查。
- ///
-#define LUAX_SETUP(L, params) \
- Luax::LuaxState state(L); \
- if(!state.CheckParams(1, params)) return 0
-
-#define LUAX_STATE(L) \
- Luax::LuaxState state(L)
-
- //--------------------------------------------------------------------------------//
-
- ///
- /// 确保不安全的lua调用能够在调用之后返回到最初stack状态。
- ///
- class LuaxScopedState
- : public LuaxState
- {
- public:
- LuaxScopedState(lua_State* state)
- : LuaxState(state)
- {
- mRestoreTop = lua_gettop(mState);
- }
- LuaxScopedState(const LuaxState& state)
- : LuaxState(state)
- {
- mRestoreTop = lua_gettop(mState);
- }
- ~LuaxScopedState()
- {
- if (mState) {
- if (lua_gettop(mState) != mRestoreTop) {
- lua_settop(mState, mRestoreTop);
- }
- }
- }
- private:
- void* operator new(size_t);
- int mRestoreTop;
-
- };
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_state.inc b/Runner/Scripting/luax_state.inc
deleted file mode 100644
index 6671bb5..0000000
--- a/Runner/Scripting/luax_state.inc
+++ /dev/null
@@ -1,180 +0,0 @@
-namespace Luax
-{
-
- ///
- /// 注册工厂,注册class table,以type name为键设置在名称空间上。在注册阶段不会设置元表,等到New方法调用的时候才会。
- ///
- template<class TYPE>
- void LuaxState::RegisterFactory()
- {
- cc8* type = TYPE::GetLuaxFactoryName();
-
- lua_State* L = mState;
- LuaxState& state = *this;
-
- int top = lua_gettop(L); // namespace table
- assert(lua_istable(L, top));
-
- // class table
- lua_newtable(L);
- TYPE::RegisterLuaxClassShared(state);
- TYPE::RegisterLuaxFactoryClass(state);
- TYPE::RegisterLuaxClass(state);
-
- // 检测TYPE里面是否没有注册必须的方法
-#define _assertmethod(I, NAME) \
- GetField(I, NAME); \
- assert(IsType(-1, LUA_TFUNCTION)); \
- Pop();
-
- //_assertmethod(-1, "New");
-
-#undef _assertmethod
-
-#if LUAX_ENABLE_NATIVE_EXTEND
- // .Extend()
- lua_pushvalue(state, -1); // class table
- lua_pushcclosure(state, TYPE::_ExtendFactory, 1);
- lua_setfield(state, -2, "Extend");
-#endif
-
- // class["__index"] = class
- lua_pushvalue(state, -1); // class table
- lua_setfield(state, -2, "__index");
-
- TYPE::SetLuaxClassTableRef(state, -1);
-
- SetField(top, type);
-
- // reset top
- lua_settop(L, top);
-
- // 后处理
- TYPE::RegisterLuaxPostprocess(state);
- }
-
- ///
- /// Singleton
- ///
- template<typename TYPE>
- void LuaxState::RegisterSingleton()
- {
- lua_State* L = mState;
- LuaxState& state = *this;
-
- int top = lua_gettop(L); // namespace table
- assert(lua_istable(L, top));
-
- // class table.
- lua_newtable(L);
- TYPE::RegisterLuaxClassShared(state);
- TYPE::RegisterLuaxSingletonClass(state);
- TYPE::RegisterLuaxClass(state);
-
- TYPE::SetLuaxClassTableRef(state, -1);
-
- lua_pushvalue(state, -1);
- lua_setfield(state, -2, "__index");
-
-#if LUAX_ENABLE_NATIVE_EXTEND
- // .Extend()
- lua_pushvalue(state, -1); // class table
- lua_pushcclosure(state, TYPE::_ExtendSingleton, 1);
- lua_setfield(state, -2, "Extend");
-#endif
-
- cc8* type = TYPE::GetLuaxSingletonName();
- SetField(top, type);
-
- // reset top
- lua_settop(L, top);
-
- // 后处理
- TYPE::RegisterLuaxPostprocess(state);
- }
-
- template<typename TYPE>
- void LuaxState::SetField(int idx, cc8* key, TYPE value)
- {
- if (IsTableOrUserdata(idx))
- {
- idx = AbsIndex(idx);
- this->Push(value);
- lua_setfield(mState, idx, key);
- }
- }
-
- template<typename TYPE>
- void LuaxState::SetFieldByIndex(int idx, int key, TYPE value)
- {
- if (IsTableOrUserdata(idx))
- {
- idx = AbsIndex(idx);
- this->Push(value);
- lua_rawseti(mState, idx, key);
- }
- }
-
- template<typename TYPE>
- TYPE LuaxState::GetField(int idx, cc8* key, TYPE value)
- {
- GetField(idx, key);
- TYPE result = GetValue < TYPE >(-1, value);
- this->Pop();
-
- return result;
- }
-
- template<typename TYPE>
- TYPE LuaxState::GetField(int idx, int key, TYPE value)
- {
- GetField(idx, key);
- TYPE result = GetValue < TYPE >(-1, value);
- Pop();
-
- return result;
- }
-
- template<typename TYPE>
- TYPE* LuaxState::GetUserdata(int idx)
- {
- void* p = nullptr;
-
- if (IsType(idx, LUA_TUSERDATA))
- {
- p = *(void**)lua_touserdata(mState, idx);
- }
-
- return static_cast<TYPE*>(p);
- }
-
- template<typename TYPE>
- TYPE* LuaxState::CheckUserdata(int idx)
- {
- if (IsType(idx, LUA_TUSERDATA))
- {
- if (lua_getmetatable(mState, idx)) // ref table
- {
- if (lua_getmetatable(mState, -1)) // member table
- {
- if (lua_getmetatable(mState, -1)) // class table
- {
- TYPE::PushLuaxClassTable(*this); // target class table
- if (lua_rawequal(mState, -1, -2))
- {
- Pop(4); // ref\member\class\target class
- TYPE* udata = GetUserdata<TYPE>(idx);
- return udata; // userdata
- }
- Pop(2); // target class table\class table
- }
- Pop(1); // member table
- }
- Pop(1); // ref table
- }
- }
- luaL_typerror(mState, idx, TYPE::GetLuaxClassName());
- return nullptr;
- }
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_utility.h b/Runner/Scripting/luax_utility.h
deleted file mode 100644
index 79601e0..0000000
--- a/Runner/Scripting/luax_utility.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef __LUAX_UTILITY_H__
-#define __LUAX_UTILITY_H__
-
-// 导出native接口
-
-/// RegisterLuaxClass 注册类的方法和成员,比如枚举、常量等到class table LuaxGetFactoryName 获得工厂的类名,
-/// 同时用来避免注册时错误注册为了singleton,通过编译时报错避免
-#define LUAX_DECL_FACTORY(type, ...) \
- friend class Luax::LuaxState; \
- friend class Luax::LuaxNativeClass<type,##__VA_ARGS__>; \
- static void RegisterLuaxClass(Luax::LuaxState&); \
- static void RegisterLuaxPostprocess(Luax::LuaxState&); \
- static const char* GetLuaxFactoryName() { return #type; };\
- static const char* GetLuaxClassName() { return #type; };\
- static bool IsLuaxClassSingleton() { return false; }
-
-/// 作为基类的抽象工厂类可以使用此宏,注册一个入口,在派生类的注册函数中调用,注册基类的这些方法。
-#define LUAX_DECL_ABSTRACT_FACTORY() \
- static void RegisterLuaxClass(Luax::LuaxState&);\
- static void RegisterLuaxPostprocess(Luax::LuaxState&)
-
-/// RegisterLuaxClass 注册类的方法和成员,比如枚举、常量等到class table LuaxGetSingletonName 获得单例的类名
-#define LUAX_DECL_SINGLETON(type, ...) \
- friend class Luax::LuaxState; \
- friend class Luax::LuaxNativeClass<type,##__VA_ARGS__>; \
- static void RegisterLuaxClass(Luax::LuaxState&); \
- static void RegisterLuaxPostprocess(Luax::LuaxState&); \
- static const char* GetLuaxSingletonName() { return #type; }; \
- static const char* GetLuaxClassName() { return #type; }; \
- static bool IsLuaxClassSingleton() { return true; }
-
-#define LUAX_DECL_METHOD(mtd) static int mtd(lua_State* L)
-
-#define LUAX_DECL_ENUM(e, under_line_index)
-
-/// 标明方法实现的宏。上下文里有一个L。
-#define LUAX_IMPL_METHOD(type, f) int type::f(lua_State* L)
-
-/// 由应用程序实现的两个接口。上下文里有一个state。
-#define LUAX_REGISTRY(type) void type::RegisterLuaxClass(Luax::LuaxState& state)
-#define LUAX_POSTPROCESS(type) void type::RegisterLuaxPostprocess(Luax::LuaxState& state)
-
-/// 用来注册的宏。之前这里忘了用可变宏,导致没有luaclastable ref没有注册对。
-#define LUAX_REGISTER_FACTORY(state, param) state.RegisterFactory<param>()
-#define LUAX_REGISTER_SINGLETON(state, param) state.RegisterSingleton<param>()
-#define LUAX_REGISTER_ABSTRACT_FACTORY(state, type) type::RegisterLuaxPostprocess(state)
-#define LUAX_REGISTER_METHODS(state, ...) \
- do{ \
- luaL_Reg __m[] = {__VA_ARGS__,{0, 0}}; \
- state.RegisterMethods(__m); \
- }while(0)
-#define LUAX_REGISTER_ENUM(state, name, ...) \
- do{ \
- Luax::LuaxEnum __e[] = {__VA_ARGS__,{0, 0}}; \
- state.RegisterEnum(name, __e); \
- }while(0)
-
-#define LUAX_PREPARE(L, T) \
- LUAX_STATE(L); \
- T* self = state.GetUserdata<T>(1);
-
-#define LUAX_INHERIT(state, type) type::RegisterLuaxClass(state)
-
-#define luaxport private
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_vm.cpp b/Runner/Scripting/luax_vm.cpp
deleted file mode 100644
index 4dc7e0c..0000000
--- a/Runner/Scripting/luax_vm.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "luax_internal.h"
-#include "luax_vm.h"
-
-namespace Luax
-{
-
- LuaxVM::VMap LuaxVM::VMs; // 通过线程查找虚拟机,为了方便
-
- LuaxVM* LuaxVM::TryGetVM(global_State* gState)
- {
- auto it = VMs.find(gState);
- if (it != VMs.end())
- return it->second;
- else
- return nullptr;
- }
-
- LuaxVM* LuaxVM::TryGetVM(lua_State* state)
- {
- return TryGetVM(G(state));
- }
-
- LuaxVM::LuaxVM()
- : mStrongRefTable()
- , mWeakRefTable()
- {
- mMainThread = luaL_newstate();
- assert(mMainThread);
- mGlobalState = G(mMainThread);
-
- VMs.insert(std::pair<global_State*, LuaxVM*>(mGlobalState, this));
- }
-
- LuaxVM::~LuaxVM()
- {
- VMs.erase(mGlobalState);
- lua_close(mMainThread);
- }
-
- // 初始化context
- void LuaxVM::Setup()
- {
- LUAX_STATE(mMainThread);
-
- mStrongRefTable.Init(state, "_LUAX_STRONGREF_TABLE");
- mWeakRefTable.Init(state, "_LUAX_WEAKREF_TABLE", "v");
- }
-
- lua_State* LuaxVM::CreateThread()
- {
- lua_State* thread = lua_newthread(mMainThread);
- assert(thread);
- return thread;
- }
-
- lua_State* LuaxVM::GetMainThread()
- {
- return mMainThread;
- }
-
- LuaxState LuaxVM::GetMainState()
- {
- return mMainThread;
- }
-
- LuaxRefTable& LuaxVM::GetStrongRefTable()
- {
- return mStrongRefTable;
- }
-
- LuaxRefTable& LuaxVM::GetWeakRefTable()
- {
- return mWeakRefTable;
- }
-
-} \ No newline at end of file
diff --git a/Runner/Scripting/luax_vm.h b/Runner/Scripting/luax_vm.h
deleted file mode 100644
index 3eda3f8..0000000
--- a/Runner/Scripting/luax_vm.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef __LUAX_CONTEXT_H__
-#define __LUAX_CONTEXT_H__
-
-#include <map>
-#include <unordered_set>
-
-#include "luax_ref.h"
-#include "luax_config.h"
-#include "luax_state.h"
-#include "luax_globalstate.h"
-
-namespace Luax
-{
-
- ///
- /// 单个lua_state相关的context。是一系列代理的集合,拷贝也没关系,主要是为了节约内存。
- ///
- class LuaxVM
- {
- public:
-
- ///
- /// 根据global_State拿到虚拟机。
- ///
- static LuaxVM* TryGetVM(global_State* gState);
- static LuaxVM* TryGetVM(lua_State* state);
-
- LuaxVM();
- ~LuaxVM();
-
- ///
- /// 创建虚拟机后,需要手动调用Setup函数,初始化一些虚拟机状态。
- ///
- void Setup();
-
- lua_State* GetMainThread();
- lua_State* CreateThread();
- LuaxState GetMainState();
-
- LuaxRefTable& GetStrongRefTable();
- LuaxRefTable& GetWeakRefTable();
-
- private:
-
- typedef std::map<global_State*, LuaxVM*> VMap;
-
- static VMap VMs; // 通过global_State索引虚拟机,为了方便
-
- LuaxRefTable mStrongRefTable; // _LUAX_STRONGREF_TABLE
- LuaxRefTable mWeakRefTable; // _LUAX_WEAKREF_TABLE
-
- global_State* mGlobalState; // 虚拟机的global_State,由当前虚拟机的所有线程共享
- lua_State* mMainThread; // 主线程
-
-#if LUAX_PROFILER
- size_t mObjectCount; // 统计所有在此虚拟机中创建的实例
-#endif
-
- };
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Scripting/luax_watchdog.cpp b/Runner/Scripting/luax_watchdog.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Scripting/luax_watchdog.cpp
+++ /dev/null
diff --git a/Runner/Scripting/luax_watchdog.h b/Runner/Scripting/luax_watchdog.h
deleted file mode 100644
index b07b007..0000000
--- a/Runner/Scripting/luax_watchdog.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef __LUAX_DOG_H__
-#define __LUAX_DOG_H__
-
-#include "luax_config.h"
-
-namespace Luax
-{
-
- ///
- /// LuaxNativeClass实例的引用计数额watch dog,只有在watch dog通过时才可以delete。
- ///
- class LuaxWatchDog
- {
- public:
- LuaxWatchDog()
- : mVMRef(0)
- , mNativeRef(0)
- {
- }
-
- inline operator bool()
- {
- return mVMRef == 0 && mNativeRef == 0;
- }
-
- uint mVMRef; // 托管给的虚拟机数
- uint mNativeRef; // 本地引用数
-
- };
-
-}
-
-#endif \ No newline at end of file
diff --git a/Runner/Shaders/ShaderChannel.h b/Runner/Shaders/ShaderChannel.h
deleted file mode 100644
index d0d2e0a..0000000
--- a/Runner/Shaders/ShaderChannel.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef SHADER_CHANNEL_H
-#define SHADER_CHANNEL_H
-
-enum ShaderChannel
-{
- ShaderChannel_Position = 0,
- ShaderChannel_Normal = 1,
- ShaderChannel_Tangent = 2,
- ShaderChannel_Color = 3,
- ShaderChannel_TexCoord0 = 4,
- ShaderChannel_TexCoord1 = 5,
-
- ShaderChannel_Count = 6,
-};
-
-// Vertex attributes locations
-enum VertexAttrLocs
-{
- VertexAttrLocs_Position = 0,
- VertexAttrLocs_Normal = 1,
- VertexAttrLocs_Tangent = 2,
- VertexAttrLocs_Color = 3,
- VertexAttrLocs_TexCoord0 = 4,
- VertexAttrLocs_TexCoord1 = 5,
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Shaders/ShaderDefine.cpp b/Runner/Shaders/ShaderDefine.cpp
deleted file mode 100644
index bd6a7dc..0000000
--- a/Runner/Shaders/ShaderDefine.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "ShaderDefine.h"
-
-BuiltinAttirbutes BuiltinAttributesNames[ShaderChannel_Count] = {
- {ShaderChannel_Position, "Jin_Position"},
- {ShaderChannel_Normal, "Jin_Normal"},
- {ShaderChannel_Tangent, "Jin_Tangent"},
- {ShaderChannel_Color, "Jin_Color"},
- {ShaderChannel_TexCoord0, "Jin_TexCoord0"},
- {ShaderChannel_TexCoord1, "Jin_TexCoord1"}
-};
-
diff --git a/Runner/Shaders/ShaderDefine.h b/Runner/Shaders/ShaderDefine.h
deleted file mode 100644
index 058bfc4..0000000
--- a/Runner/Shaders/ShaderDefine.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef SHADER_DEFINE_H
-#define SHADER_DEFINE_H
-
-#include "ShaderChannel.h"
-
-struct BuiltinAttirbutes
-{
- int channel;
- const char* name;
-};
-
-extern BuiltinAttirbutes BuiltinAttributesNames[ShaderChannel_Count];
-
-struct BuilinUniforms
-{
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Shaders/ShaderUniform.h b/Runner/Shaders/ShaderUniform.h
deleted file mode 100644
index d736e40..0000000
--- a/Runner/Shaders/ShaderUniform.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef SHADER_UNIFORM_H
-#define SHADER_UNIFORM_H
-
-#endif \ No newline at end of file
diff --git a/Runner/Threads/Mutex.cpp b/Runner/Threads/Mutex.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Threads/Mutex.cpp
+++ /dev/null
diff --git a/Runner/Threads/Mutex.h b/Runner/Threads/Mutex.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Threads/Mutex.h
+++ /dev/null
diff --git a/Runner/Threads/Semaphore.cpp b/Runner/Threads/Semaphore.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Threads/Semaphore.cpp
+++ /dev/null
diff --git a/Runner/Threads/Semaphore.h b/Runner/Threads/Semaphore.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Threads/Semaphore.h
+++ /dev/null
diff --git a/Runner/Threads/Thread.h b/Runner/Threads/Thread.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Threads/Thread.h
+++ /dev/null
diff --git a/Runner/Utilities/Assert.h b/Runner/Utilities/Assert.h
deleted file mode 100644
index aab7b73..0000000
--- a/Runner/Utilities/Assert.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef ASSERT_H
-#define ASSERT_H
-
-#include <assert.h>
-
-#define Assert(c) assert(c)
-
-#endif \ No newline at end of file
diff --git a/Runner/Utilities/Base64.cpp b/Runner/Utilities/Base64.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Utilities/Base64.cpp
+++ /dev/null
diff --git a/Runner/Utilities/Base64.h b/Runner/Utilities/Base64.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Utilities/Base64.h
+++ /dev/null
diff --git a/Runner/Utilities/Exception.h b/Runner/Utilities/Exception.h
deleted file mode 100644
index bd73c6b..0000000
--- a/Runner/Utilities/Exception.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef EXCEPTION_H
-#define EXCEPTION_H
-
-
-
-#endif \ No newline at end of file
diff --git a/Runner/Utilities/NonCopyable.h b/Runner/Utilities/NonCopyable.h
deleted file mode 100644
index 7135827..0000000
--- a/Runner/Utilities/NonCopyable.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef NON_COPYABLE_H
-#define NON_COPYABLE_H
-
-class NonCopyable
-{
-public:
- NonCopyable() {}
-
-private:
- NonCopyable(const NonCopyable&);
- NonCopyable& operator=(const NonCopyable&);
-};
-
-#endif
diff --git a/Runner/Utilities/Singleton.h b/Runner/Utilities/Singleton.h
deleted file mode 100644
index 65c9e60..0000000
--- a/Runner/Utilities/Singleton.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef SINGLETON_H
-#define SINGLETON_H
-
-template<class T>
-class Singleton
-{
-public:
-
- static T* Instance()
- {
- if (!instance) instance = new T;
- return instance;
- }
-
- static void Destroy()
- {
- delete instance;
- instance = nullptr;
- }
-
-protected:
-
- Singleton()
- {
- instance = static_cast<T*>(this);
- };
-
- virtual ~Singleton() {};
-
- static T* instance;
-
-private:
-
- Singleton(const Singleton& singleton);
-
- Singleton& operator = (const Singleton& singleton);
-
-};
-
-template<class T>
-T* Singleton<T>::instance = nullptr;
-
-#define Get(T) T::Instance()
-
-#endif \ No newline at end of file
diff --git a/Runner/Utilities/Type.h b/Runner/Utilities/Type.h
deleted file mode 100644
index b3d0826..0000000
--- a/Runner/Utilities/Type.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef TYPE_H
-#define TYPE_H
-
-#include <cstdlib>
-#include <stdint.h>
-
-typedef int8_t int8;
-typedef uint8_t uint8;
-typedef unsigned char byte;
-typedef char sbyte;
-typedef int16_t int16;
-typedef uint16_t uint16;
-typedef int32_t int32;
-typedef uint32_t uint32;
-typedef int64_t int64;
-typedef uint64_t uint64;
-
-typedef uint32_t uint;
-typedef int32_t sint;
-
-#endif \ No newline at end of file
diff --git a/Runner/Utilities/UIDGenerator.h b/Runner/Utilities/UIDGenerator.h
deleted file mode 100644
index 81918f0..0000000
--- a/Runner/Utilities/UIDGenerator.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef UID_GENERATOR_H
-#define UID_GENERATOR_H
-
-class UIDGenerator
-{
-public:
- UIDGenerator(int from = 0)
- : m_Index(from)
- {
- };
- ~UIDGenerator(){};
-
- int GenUID(){return m_Index++;};
-
-private:
- int m_Index;
-
-};
-
-#endif \ No newline at end of file
diff --git a/Runner/Utilities/Utf8.cpp b/Runner/Utilities/Utf8.cpp
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Utilities/Utf8.cpp
+++ /dev/null
diff --git a/Runner/Utilities/Utf8.h b/Runner/Utilities/Utf8.h
deleted file mode 100644
index e69de29..0000000
--- a/Runner/Utilities/Utf8.h
+++ /dev/null
diff --git a/Runner/Utilities/UtilMacros.h b/Runner/Utilities/UtilMacros.h
deleted file mode 100644
index 1941d7f..0000000
--- a/Runner/Utilities/UtilMacros.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef UTIL_MACROS_H
-#define UTIL_MACROS_H
-
-#define GET_SET(TYPE,PROP,VAR) \
- inline void Set##PROP (TYPE val) { VAR = val; } \
- inline TYPE Get##PROP () {return VAR; }
-
-#define GET(TYPE, PROP, VAR) \
- inline TYPE Get##PROP () const {return VAR; }
-
-#define SET(TYPE, PROP, VAR) \
- inline void Set##PROP (TYPE val) { VAR = val; } \
-
-#define Mask(v) (1 << v)
-
-#endif \ No newline at end of file