diff options
author | chai <chaifix@163.com> | 2021-10-17 16:01:30 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-10-17 16:01:30 +0800 |
commit | 6e73ca6ada8a41692809dae5db89c8db0675ce1e (patch) | |
tree | 3ca6f06b29b3e2c183750ddcff8d7a09d0785e6b /Runner | |
parent | e13f699ee5f575198552d94ada1167305c82bb2f (diff) |
-Runner
Diffstat (limited to 'Runner')
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 |