summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Asura.Editor/Controls/GUIPanel.cpp6
-rw-r--r--Source/Asura.Editor/Controls/GUIPanel.h10
-rw-r--r--Source/Asura.Editor/Graphics/GUIMaterial.cpp5
-rw-r--r--Source/Asura.Editor/Graphics/GUIMaterial.h22
-rw-r--r--Source/Asura.Editor/Graphics/GUIStyle.cpp4
-rw-r--r--Source/Asura.Editor/Graphics/GUIStyle.h34
-rw-r--r--Source/Asura.Editor/Graphics/Pen.h7
-rw-r--r--Source/Asura.Editor/Graphics/Shader.h13
-rw-r--r--Source/Asura.Editor/Graphics/Shaders/GUIClip.shader.h (renamed from Source/Asura.Editor/Graphics/shaders/image.shader.h)0
-rw-r--r--Source/Asura.Editor/Graphics/Shaders/GUIText.shader.h (renamed from Source/Asura.Editor/Graphics/shaders/polygon.shader.h)0
-rw-r--r--Source/Asura.Editor/Graphics/Shaders/GUITexture.shader.h35
-rw-r--r--Source/Asura.Editor/Graphics/Style.h15
-rw-r--r--Source/Asura.Editor/System/ContainerFrame.cpp6
-rw-r--r--Source/Asura.Editor/System/ContainerFrame.h63
-rw-r--r--Source/Asura.Editor/System/ContainerWindow.h14
-rw-r--r--Source/Asura.Editor/System/GUIWindow.cpp (renamed from Source/Asura.Editor/Graphics/Pen.cpp)0
-rw-r--r--Source/Asura.Editor/System/GUIWindow.h36
-rw-r--r--Source/Asura.Editor/System/Input.cpp2
-rw-r--r--Source/modules/asura-base/Classes.h11
-rw-r--r--Source/modules/asura-base/Math/Matrix44.h8
-rw-r--r--Source/modules/asura-base/Math/Quaternion.h4
-rw-r--r--Source/modules/asura-base/Math/Random.h4
-rw-r--r--Source/modules/asura-base/Math/Rect.hpp8
-rw-r--r--Source/modules/asura-base/Math/Transform.h6
-rw-r--r--Source/modules/asura-base/Math/Vector2.hpp6
-rw-r--r--Source/modules/asura-base/Math/Vector3.hpp8
-rw-r--r--Source/modules/asura-base/Math/Vector4.h8
-rw-r--r--Source/modules/asura-base/Misc/GUID.cpp (renamed from Source/Asura.Editor/Graphics/Style.cpp)0
-rw-r--r--Source/modules/asura-base/Misc/GUID.h (renamed from Source/modules/asura-base/Utilities/LinkedList.cpp)0
-rw-r--r--Source/modules/asura-base/Misc/UTF8.cpp395
-rw-r--r--Source/modules/asura-base/Misc/UTF8.h20
-rw-r--r--Source/modules/asura-base/Utilities/LinkedList.h388
-rw-r--r--Source/modules/asura-base/Utilities/dynamic_array.h337
-rw-r--r--Source/modules/asura-box2d/Physics2D/Body.h (renamed from Source/modules/asura-box2d/Physics/Body.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/ChainShape.h (renamed from Source/modules/asura-box2d/Physics/ChainShape.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/CircleShape.h (renamed from Source/modules/asura-box2d/Physics/CircleShape.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/Contact.h (renamed from Source/modules/asura-box2d/Physics/Contact.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/DebugDraw.h (renamed from Source/modules/asura-box2d/Physics/DebugDraw.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/DistanceJoint.h (renamed from Source/modules/asura-box2d/Physics/DistanceJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/EdgeShape.h (renamed from Source/modules/asura-box2d/Physics/EdgeShape.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/Fixture.h (renamed from Source/modules/asura-box2d/Physics/Fixture.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/FrictionJoint.h (renamed from Source/modules/asura-box2d/Physics/FrictionJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/GearJoint.h (renamed from Source/modules/asura-box2d/Physics/GearJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/Joint.h (renamed from Source/modules/asura-box2d/Physics/Joint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/MotorJoint.h (renamed from Source/modules/asura-box2d/Physics/MotorJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/MouseJoint.h (renamed from Source/modules/asura-box2d/Physics/MouseJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/PolygonShape.h (renamed from Source/modules/asura-box2d/Physics/PolygonShape.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/PrismaticJoint.h (renamed from Source/modules/asura-box2d/Physics/PrismaticJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/PulleyJoint.h (renamed from Source/modules/asura-box2d/Physics/PulleyJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/RevoluteJoint.h (renamed from Source/modules/asura-box2d/Physics/RevoluteJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/RopeJoint.h (renamed from Source/modules/asura-box2d/Physics/RopeJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/Shape.h (renamed from Source/modules/asura-box2d/Physics/Shape.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/WeldJoint.h (renamed from Source/modules/asura-box2d/Physics/WeldJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/WheelJoint.h (renamed from Source/modules/asura-box2d/Physics/WheelJoint.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/World.h (renamed from Source/modules/asura-box2d/Physics/World.h)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/binding/_body.cpp (renamed from Source/modules/asura-box2d/Physics/binding/_body.cpp)0
-rw-r--r--Source/modules/asura-box2d/Physics2D/binding/_world.cpp (renamed from Source/modules/asura-box2d/Physics/binding/_world.cpp)0
-rw-r--r--Source/modules/asura-core/Font/TTF.h17
-rw-r--r--Source/modules/asura-core/Font/TTFImporter.cpp (renamed from Source/modules/asura-core/Font/TTF.cpp)0
-rw-r--r--Source/modules/asura-core/Font/TTFImporter.h (renamed from Source/modules/asura-core/Graphics/Mesh2D.cpp)0
-rw-r--r--Source/modules/asura-core/Font/Utf.hpp720
-rw-r--r--Source/modules/asura-core/Font/Utf.inc752
-rw-r--r--Source/modules/asura-core/Graphics/DrawInfo.h8
-rw-r--r--Source/modules/asura-core/Graphics/GPUBuffer.cpp13
-rw-r--r--Source/modules/asura-core/Graphics/GfxDevice.cpp76
-rw-r--r--Source/modules/asura-core/Graphics/GfxDevice.h110
-rw-r--r--Source/modules/asura-core/Graphics/Image.cpp103
-rw-r--r--Source/modules/asura-core/Graphics/Image.h63
-rw-r--r--Source/modules/asura-core/Graphics/MatrixStack.cpp2
-rw-r--r--Source/modules/asura-core/Graphics/MatrixStack.h26
-rw-r--r--Source/modules/asura-core/Graphics/Mesh.cpp (renamed from Source/modules/asura-core/Graphics/RenderTarget.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/Mesh.h (renamed from Source/modules/asura-core/Graphics/VBO.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/Mesh2D.h52
-rw-r--r--Source/modules/asura-core/Graphics/RenderTarget.h52
-rw-r--r--Source/modules/asura-core/Graphics/RenderTexture.cpp0
-rw-r--r--Source/modules/asura-core/Graphics/RenderTexture.h22
-rw-r--r--Source/modules/asura-core/Graphics/Shader.cpp26
-rw-r--r--Source/modules/asura-core/Graphics/Shader.h27
-rw-r--r--Source/modules/asura-core/Graphics/Texture.h38
-rw-r--r--Source/modules/asura-core/Graphics/VBO.h27
-rw-r--r--Source/modules/asura-core/Graphics/VBOs.cpp0
-rw-r--r--Source/modules/asura-core/Graphics/VBOs.h56
-rw-r--r--Source/modules/asura-core/Graphics/binding/Canvas.binding.cpp48
-rw-r--r--Source/modules/asura-core/Graphics/binding/Color.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_color.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/Color32.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_color32.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/GPUBuffer.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_gpu_buffer.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/GfxDevice.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_gfx_device.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/Image.binding.cpp71
-rw-r--r--Source/modules/asura-core/Graphics/binding/IndexBuffer.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_index_buffer.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/Mesh.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_mesh2d.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/Shader.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_shader.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/SpriteBatch.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_sprite_batch.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/Texture.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_texture.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/VertexBuffer.binding.cpp (renamed from Source/modules/asura-core/Graphics/binding/_vertex_buffer.cpp)0
-rw-r--r--Source/modules/asura-core/Graphics/binding/_canvas.cpp48
-rw-r--r--Source/modules/asura-core/Graphics/binding/_image.cpp71
-rw-r--r--Source/modules/asura-core/Input/InputDevice.h5
-rw-r--r--Source/modules/asura-core/Input/InputEvent.h2
-rw-r--r--Source/modules/asura-core/Input/InputManager.cpp8
-rw-r--r--Source/modules/asura-core/Input/InputManager.h14
-rw-r--r--Source/modules/asura-core/Mesh/Mesh2DData.h4
-rw-r--r--Source/modules/asura-json/Json/JsonData.cpp9
-rw-r--r--Source/modules/asura-json/Json/JsonData.h17
-rw-r--r--Source/tests/win32/01-window/03_sub_menu.cpp42
104 files changed, 1863 insertions, 2141 deletions
diff --git a/Source/Asura.Editor/Controls/GUIPanel.cpp b/Source/Asura.Editor/Controls/GUIPanel.cpp
index 3a78af7..e69de29 100644
--- a/Source/Asura.Editor/Controls/GUIPanel.cpp
+++ b/Source/Asura.Editor/Controls/GUIPanel.cpp
@@ -1,6 +0,0 @@
-#include "GUIPanel.h"
-
-namespace_begin(AsuraEditor)
-
-
-namespace_end
diff --git a/Source/Asura.Editor/Controls/GUIPanel.h b/Source/Asura.Editor/Controls/GUIPanel.h
index 0f98eaa..9ff6eed 100644
--- a/Source/Asura.Editor/Controls/GUIPanel.h
+++ b/Source/Asura.Editor/Controls/GUIPanel.h
@@ -1,11 +1,13 @@
-#ifndef _ASURA_EDITOR_GUI_PANEL_H_
-#define _ASURA_EDITOR_GUI_PANEL_H_
+#ifndef _ASURA_EDITOR_GUIPANEL_H_
+#define _ASURA_EDITOR_GUIPANEL_H_
#include <asura-base/Classes.h>
+#include "../System/GUIWindow.h"
+
namespace_begin(AsuraEditor)
-/// IMGUI panel
+// GUIWindowĵ
class GUIPanel
{
public:
@@ -15,10 +17,12 @@ public:
private:
+ GUIWindow* m_GUIWindow; // Ļƴ
};
+
namespace_end
#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/Graphics/GUIMaterial.cpp b/Source/Asura.Editor/Graphics/GUIMaterial.cpp
new file mode 100644
index 0000000..b82afaa
--- /dev/null
+++ b/Source/Asura.Editor/Graphics/GUIMaterial.cpp
@@ -0,0 +1,5 @@
+#include "GUIMaterial.h"
+
+namespace_begin(AsuraEditor)
+
+namespace_end
diff --git a/Source/Asura.Editor/Graphics/GUIMaterial.h b/Source/Asura.Editor/Graphics/GUIMaterial.h
new file mode 100644
index 0000000..bccfc7e
--- /dev/null
+++ b/Source/Asura.Editor/Graphics/GUIMaterial.h
@@ -0,0 +1,22 @@
+#ifndef _ASURA_EDITOR_GUI_MATERIAL_H_
+#define _ASURA_EDITOR_GUI_MATERIAL_H_
+
+#include <asura-base/Classes.h>
+
+namespace_begin(AsuraEditor)
+
+// GUIڽ
+class GUIMaterial
+{
+public:
+
+private:
+
+
+
+};
+
+
+namespace_end
+
+#endif
diff --git a/Source/Asura.Editor/Graphics/GUIStyle.cpp b/Source/Asura.Editor/Graphics/GUIStyle.cpp
new file mode 100644
index 0000000..4da2847
--- /dev/null
+++ b/Source/Asura.Editor/Graphics/GUIStyle.cpp
@@ -0,0 +1,4 @@
+#include "GUIStyle.h"
+
+
+
diff --git a/Source/Asura.Editor/Graphics/GUIStyle.h b/Source/Asura.Editor/Graphics/GUIStyle.h
new file mode 100644
index 0000000..8556397
--- /dev/null
+++ b/Source/Asura.Editor/Graphics/GUIStyle.h
@@ -0,0 +1,34 @@
+#ifndef _ASURA_EDITOR_GUI_STYLE_H_
+#define _ASURA_EDITOR_GUI_STYLE_H_
+
+#include <asura-base/Classes.h>
+
+#include "GUIMaterial.h"
+
+namespace_begin(AsuraEditor)
+
+/// ༭ʽ
+class GUIStyle
+{
+public:
+
+ GUIStyle();
+ ~GUIStyle();
+
+ void DrawContent();
+
+private:
+
+ GUIMaterial* GetGUITextMaterial();
+ GUIMaterial* GetGUIBlendMaterial();
+ GUIMaterial* GetGUIBlitMaterial();
+
+ GUIMaterial* m_GUITextMaterial;
+ GUIMaterial* m_GUIBlendMaterial;
+ GUIMaterial* m_GUIBlitMaterial;
+
+};
+
+namespace_end
+
+#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/Graphics/Pen.h b/Source/Asura.Editor/Graphics/Pen.h
deleted file mode 100644
index b949d14..0000000
--- a/Source/Asura.Editor/Graphics/Pen.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _ASURA_EDITOR_PEN_H_
-#define _ASURA_EDITOR_PEN_H_
-
-
-
-
-#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/Graphics/Shader.h b/Source/Asura.Editor/Graphics/Shader.h
index a3abec1..af291a5 100644
--- a/Source/Asura.Editor/Graphics/Shader.h
+++ b/Source/Asura.Editor/Graphics/Shader.h
@@ -3,16 +3,13 @@
namespace AsuraEditor
{
- namespace Graphics
- {
- struct ShaderProgram
- {
- const char* vert;
- const char* frag;
- };
+struct ShaderProgram
+{
+ const char* vert;
+ const char* frag;
+};
- }
}
#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/Graphics/shaders/image.shader.h b/Source/Asura.Editor/Graphics/Shaders/GUIClip.shader.h
index cbdd542..cbdd542 100644
--- a/Source/Asura.Editor/Graphics/shaders/image.shader.h
+++ b/Source/Asura.Editor/Graphics/Shaders/GUIClip.shader.h
diff --git a/Source/Asura.Editor/Graphics/shaders/polygon.shader.h b/Source/Asura.Editor/Graphics/Shaders/GUIText.shader.h
index a92e9a6..a92e9a6 100644
--- a/Source/Asura.Editor/Graphics/shaders/polygon.shader.h
+++ b/Source/Asura.Editor/Graphics/Shaders/GUIText.shader.h
diff --git a/Source/Asura.Editor/Graphics/Shaders/GUITexture.shader.h b/Source/Asura.Editor/Graphics/Shaders/GUITexture.shader.h
new file mode 100644
index 0000000..cbdd542
--- /dev/null
+++ b/Source/Asura.Editor/Graphics/Shaders/GUITexture.shader.h
@@ -0,0 +1,35 @@
+#ifndef _ASURA_EDITOR_SHADER_H_
+#include "../shader.h"
+#endif
+
+//
+static AsuraEditor::Graphics::ShaderProgram image_shader =
+{
+R"(
+in vec2 asura_position;
+in vec2 asura_texcoord0;
+
+uniform mat4 asura_model_matrix;
+uniform mat4 asura_view_matrix;
+uniform mat4 asura_projection_matrix;
+
+void main()
+{
+ gl_Position = asura_projection_matrix * asura_view_matrix * asura_model_matrix * vec4(asura_position, 0, 1);
+ uv = asura_texcoord0;
+}
+
+)",
+
+R"(
+in vec2 uv;
+
+uniform sampler2D asura_maintex;
+
+void main()
+{
+
+}
+
+)"
+}; \ No newline at end of file
diff --git a/Source/Asura.Editor/Graphics/Style.h b/Source/Asura.Editor/Graphics/Style.h
deleted file mode 100644
index 2676c68..0000000
--- a/Source/Asura.Editor/Graphics/Style.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _ASURA_EDITOR_GUI_STYLE_H_
-#define _ASURA_EDITOR_GUI_STYLE_H_
-
-#include <asura-base/Classes.h>
-
-namespace_begin(AsuraEditor)
-
-class GUIStyle
-{
-
-};
-
-namespace_end
-
-#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/System/ContainerFrame.cpp b/Source/Asura.Editor/System/ContainerFrame.cpp
new file mode 100644
index 0000000..9626317
--- /dev/null
+++ b/Source/Asura.Editor/System/ContainerFrame.cpp
@@ -0,0 +1,6 @@
+#include "ContainerFrame.h"
+
+namespace_begin(AsuraEditor)
+
+
+namespace_end
diff --git a/Source/Asura.Editor/System/ContainerFrame.h b/Source/Asura.Editor/System/ContainerFrame.h
new file mode 100644
index 0000000..51a08d4
--- /dev/null
+++ b/Source/Asura.Editor/System/ContainerFrame.h
@@ -0,0 +1,63 @@
+#ifndef _ASURA_CONTAINER_FRAME_H_
+#define _ASURA_CONTAINER_FRAME_H_
+
+#include <windows.h>
+#include <string.h>
+
+#include <asura-base/Scripting/Scripting.h>
+#include <asura-base/Classes.h>
+
+#include "../Type.h"
+
+namespace_begin(AsuraEditor)
+
+/// ༭ڵnativeڣΪmenuûmenuģGUIWindow
+class ContainerFrame : public AEScripting::Portable<ContainerFrame>
+{
+public:
+
+ enum WindowStyle
+ {
+ WINDOW_STYLE_MAIN, ///<
+ WINDOW_STYLE_NORMAL, ///<
+ WINDOW_STYLE_TOOL, ///<
+ WINDOW_STYLE_POPUP, ///<
+ };
+
+ struct WindowConfig
+ {
+ std::string title; ///<
+ uint x, y; ///<
+ uint width, height; ///< С
+ WindowStyle style; ///<
+ };
+
+ ContainerFrame();
+ ~ContainerFrame();
+
+ bool Init(WindowConfig& config);
+
+private:
+
+ WindowStyle m_Style;
+ HWND m_HWND;
+ HDC m_HDC;
+
+luaxport:
+
+ LUAX_DECL_FACTORY(ContainerFrame);
+
+ LUAX_DECL_ENUM(WindowStyle);
+
+ LUAX_DECL_METHOD(_New);
+ LUAX_DECL_METHOD(_Init);
+ LUAX_DECL_METHOD(_SetPosition);
+
+};
+
+// GUIWindowĿ
+using ContainerWindow = ContainerFrame;
+
+namespace_end
+
+#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/System/ContainerWindow.h b/Source/Asura.Editor/System/ContainerWindow.h
index 5893aff..06a7b82 100644
--- a/Source/Asura.Editor/System/ContainerWindow.h
+++ b/Source/Asura.Editor/System/ContainerWindow.h
@@ -11,9 +11,7 @@
namespace_begin(AsuraEditor)
-///
-/// ༭ڵnative
-///
+/// ༭ڵnativeڣΪmenuûmenuģGUIWindow
class ContainerWindow : public AEScripting::Portable<ContainerWindow>
{
public:
@@ -40,10 +38,9 @@ public:
private:
- ContainerWindow* mParent;
- WindowStyle mStyle;
- HWND mHWND;
- HDC mHDC;
+ WindowStyle m_Style;
+ HWND m_HWND;
+ HDC m_HDC;
luaxport:
@@ -57,6 +54,9 @@ luaxport:
};
+// GUIWindowĿ
+using ContainerFrame = ContainerWindow;
+
namespace_end
#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/Graphics/Pen.cpp b/Source/Asura.Editor/System/GUIWindow.cpp
index e69de29..e69de29 100644
--- a/Source/Asura.Editor/Graphics/Pen.cpp
+++ b/Source/Asura.Editor/System/GUIWindow.cpp
diff --git a/Source/Asura.Editor/System/GUIWindow.h b/Source/Asura.Editor/System/GUIWindow.h
new file mode 100644
index 0000000..228aa74
--- /dev/null
+++ b/Source/Asura.Editor/System/GUIWindow.h
@@ -0,0 +1,36 @@
+#ifndef _ASURA_GUI_WINDOW_H_
+#define _ASURA_GUI_WINDOW_H_
+
+#include <vector>
+
+#include <asura-base/Classes.h>
+
+#include "ContainerWindow.h"
+
+namespace_begin(AsuraEditor)
+
+typedef std::vector<GUIPanel*> GUIPanelVector;
+
+/// һGUIWindowGUI paneltabpanelлGUIԪصĴڡ
+class GUIWindow
+{
+public:
+
+ GUIWindow();
+ ~GUIWindow();
+
+ void DoRepint();
+
+private:
+
+ ContainerWindow* m_ParentWindow;
+ GUIPanelVector m_GUIPanels;
+
+ bool m_IsRepaint;
+
+};
+
+
+namespace_end
+
+#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/System/Input.cpp b/Source/Asura.Editor/System/Input.cpp
index c10eb3b..80086d3 100644
--- a/Source/Asura.Editor/System/Input.cpp
+++ b/Source/Asura.Editor/System/Input.cpp
@@ -49,7 +49,7 @@ LRESULT Input::OnDeviceChange(LPCWSTR name, bool add)
{
}
-bool Input::ConvertPositionToClientAreaCoord(HWND activeWindow, POINT position, AEMath::Vector2f& newPos)
+bool Input::ConvertPositionToClientAreaCoord(HWND activeWindow, POINT position, Vector2f& newPos)
{
}
diff --git a/Source/modules/asura-base/Classes.h b/Source/modules/asura-base/Classes.h
index b2700f0..515762b 100644
--- a/Source/modules/asura-base/Classes.h
+++ b/Source/modules/asura-base/Classes.h
@@ -1,7 +1,16 @@
#ifndef _ASURAENGINE_CLASSES_H_
#define _ASURAENGINE_CLASSES_H_
-#define GET_SET(TYPE,PROP_NAME,VAR_NAME) void Set##PROP_NAME (TYPE val) { VAR_NAME = val; } TYPE Get##PROP_NAME () {return VAR_NAME; }
+#define GET_SET(TYPE,PROP_NAME,VAR_NAME) \
+inline void Set##PROP_NAME (TYPE val) { VAR_NAME = val; } \
+inline TYPE Get##PROP_NAME () {return VAR_NAME; }
+
+#define PROPERTY(TYPE,PROP_NAME,VAR_NAME) \
+private: \
+ TYPE VAR_NAME; \
+public: \
+ inline void Set##PROP_NAME (TYPE val) { VAR_NAME = val; } \
+ inline TYPE Get##PROP_NAME () {return VAR_NAME; }
#define namespace_begin(NAMESPACE) namespace NAMESPACE {
#define namespace_end }
diff --git a/Source/modules/asura-base/Math/Matrix44.h b/Source/modules/asura-base/Math/Matrix44.h
index e987dd4..6babde1 100644
--- a/Source/modules/asura-base/Math/Matrix44.h
+++ b/Source/modules/asura-base/Math/Matrix44.h
@@ -6,7 +6,7 @@
#include "../Scripting/Scripting.h"
namespace_begin(AsuraEngine)
-namespace_begin(Math)
+//namespace_begin(Math)
/// ҪתõOpenGLglm::mat4
/// https://blog.csdn.net/candycat1992/article/details/8830894
@@ -71,9 +71,7 @@ public:
/////
//void transform(Graphics::Vertex* dst, const Graphics::Vertex * src, int size) const;
- ///
/// ʽ
- ///
float Calculate();
private:
@@ -88,9 +86,7 @@ private:
};
+//namespace_end
namespace_end
-namespace_end
-
-namespace AEMath = AsuraEngine::Math;
#endif \ No newline at end of file
diff --git a/Source/modules/asura-base/Math/Quaternion.h b/Source/modules/asura-base/Math/Quaternion.h
index c1e19be..53b63c9 100644
--- a/Source/modules/asura-base/Math/Quaternion.h
+++ b/Source/modules/asura-base/Math/Quaternion.h
@@ -4,7 +4,7 @@
#include <asura-base/Classes.h>
namespace_begin(AsruaEngine)
-namespace_begin(Math)
+//namespace_begin(Math)
class Quaternion
{
@@ -12,7 +12,7 @@ class Quaternion
};
-namespace_end
+//namespace_end
namespace_end
#endif \ No newline at end of file
diff --git a/Source/modules/asura-base/Math/Random.h b/Source/modules/asura-base/Math/Random.h
index 7d3b976..914a607 100644
--- a/Source/modules/asura-base/Math/Random.h
+++ b/Source/modules/asura-base/Math/Random.h
@@ -5,7 +5,7 @@
#include "../Classes.h"
namespace_begin(AsuraEngine)
-namespace_begin(Math)
+//namespace_begin(Math)
/*
Some random generator timings:
@@ -82,7 +82,7 @@ private:
uint32 x, y, z, w;
};
-namespace_end
+//namespace_end
namespace_end
#endif \ No newline at end of file
diff --git a/Source/modules/asura-base/Math/Rect.hpp b/Source/modules/asura-base/Math/Rect.hpp
index af4fa78..3b9039b 100644
--- a/Source/modules/asura-base/Math/Rect.hpp
+++ b/Source/modules/asura-base/Math/Rect.hpp
@@ -3,8 +3,8 @@
namespace AsuraEngine
{
-namespace Math
-{
+//namespace Math
+//{
template<typename T>
struct Rect
@@ -42,9 +42,7 @@ typedef Rect<unsigned int> Rectu;
typedef Rect<float> Rectf;
typedef Rect<long> Reftl;
+//}
}
-}
-
-namespace AEMath = AsuraEngine::Math;
#endif \ No newline at end of file
diff --git a/Source/modules/asura-base/Math/Transform.h b/Source/modules/asura-base/Math/Transform.h
index 5dcfdcf..02f3c1c 100644
--- a/Source/modules/asura-base/Math/Transform.h
+++ b/Source/modules/asura-base/Math/Transform.h
@@ -5,8 +5,8 @@
namespace AsuraEngine
{
- namespace Math
- {
+ //namespace Math
+ //{
class Transform
{
@@ -24,7 +24,7 @@ namespace AsuraEngine
};
- }
+// }
}
#endif \ No newline at end of file
diff --git a/Source/modules/asura-base/Math/Vector2.hpp b/Source/modules/asura-base/Math/Vector2.hpp
index e141017..09fd299 100644
--- a/Source/modules/asura-base/Math/Vector2.hpp
+++ b/Source/modules/asura-base/Math/Vector2.hpp
@@ -4,7 +4,7 @@
#include <asura-base/Classes.h>
namespace_begin(AsuraEngine)
-namespace_begin(Math)
+//namespace_begin(Math)
template <typename T>
class Vector2
@@ -64,9 +64,7 @@ typedef Vector2<int> Vector2i;
typedef Vector2<unsigned int> Vector2u;
typedef Vector2<float> Vector2f;
+//namespace_end
namespace_end
-namespace_end
-
-namespace AEMath = AsuraEngine::Math;
#endif \ No newline at end of file
diff --git a/Source/modules/asura-base/Math/Vector3.hpp b/Source/modules/asura-base/Math/Vector3.hpp
index c526ace..b50c363 100644
--- a/Source/modules/asura-base/Math/Vector3.hpp
+++ b/Source/modules/asura-base/Math/Vector3.hpp
@@ -3,8 +3,8 @@
namespace AsuraEngine
{
- namespace Math
- {
+ //namespace Math
+ //{
template <typename T>
class Vector3
{
@@ -227,9 +227,7 @@ namespace AsuraEngine
typedef Vector3<int> Vector3i;
typedef Vector3<float> Vector3f;
- }
+// }
}
-namespace AEMath = AsuraEngine::Math;
-
#endif \ No newline at end of file
diff --git a/Source/modules/asura-base/Math/Vector4.h b/Source/modules/asura-base/Math/Vector4.h
index a5bf549..c39d9a6 100644
--- a/Source/modules/asura-base/Math/Vector4.h
+++ b/Source/modules/asura-base/Math/Vector4.h
@@ -3,8 +3,8 @@
namespace AsuraEngine
{
- namespace Math
- {
+ //namespace Math
+ //{
template <typename T>
class Vector4
{
@@ -228,7 +228,9 @@ namespace AsuraEngine
typedef Vector4<int> Vector4i;
typedef Vector4<float> Vector4f;
- }
+// }
}
+
+
#endif \ No newline at end of file
diff --git a/Source/Asura.Editor/Graphics/Style.cpp b/Source/modules/asura-base/Misc/GUID.cpp
index e69de29..e69de29 100644
--- a/Source/Asura.Editor/Graphics/Style.cpp
+++ b/Source/modules/asura-base/Misc/GUID.cpp
diff --git a/Source/modules/asura-base/Utilities/LinkedList.cpp b/Source/modules/asura-base/Misc/GUID.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-base/Utilities/LinkedList.cpp
+++ b/Source/modules/asura-base/Misc/GUID.h
diff --git a/Source/modules/asura-base/Misc/UTF8.cpp b/Source/modules/asura-base/Misc/UTF8.cpp
new file mode 100644
index 0000000..8cfb3ab
--- /dev/null
+++ b/Source/modules/asura-base/Misc/UTF8.cpp
@@ -0,0 +1,395 @@
+#include "UTF8.h"
+
+namespace_begin(AsuraEngine)
+
+typedef unsigned long UTF32; /* at least 32 bits */
+typedef unsigned short UTF16; /* at least 16 bits */
+typedef unsigned char UTF8; /* typically 8 bits */
+typedef unsigned char Boolean; /* 0 or 1 */
+
+typedef enum {
+ strictConversion = 0,
+ lenientConversion
+} ConversionFlags;
+
+typedef enum {
+ conversionOK, /* conversion successful */
+ sourceExhausted, /* partial character in source, but hit end */
+ targetExhausted, /* insuff. room in target for conversion */
+ sourceIllegal /* source sequence is illegal/malformed */
+} ConversionResult;
+
+/* Some fundamental constants */
+#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
+#define UNI_MAX_BMP (UTF32)0x0000FFFF
+#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
+#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
+#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
+
+ConversionResult ConvertUTF8toUTF16(
+ const UTF8** sourceStart, const UTF8* sourceEnd,
+ UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags);
+
+
+/*
+* Copyright 2001-2004 Unicode, Inc.
+*
+* Disclaimer
+*
+* This source code is provided as is by Unicode, Inc. No claims are
+* made as to fitness for any particular purpose. No warranties of any
+* kind are expressed or implied. The recipient agrees to determine
+* applicability of information provided. If this file has been
+* purchased on magnetic or optical media from Unicode, Inc., the
+* sole remedy for any claim will be exchange of defective media
+* within 90 days of receipt.
+*
+* Limitations on Rights to Redistribute This Code
+*
+* Unicode, Inc. hereby grants the right to freely use the information
+* supplied in this file in the creation of products supporting the
+* Unicode Standard, and to make copies of this file in any form
+* for internal or external distribution as long as this notice
+* remains attached.
+*/
+
+/* ---------------------------------------------------------------------
+
+Conversions between UTF32, UTF-16, and UTF-8. Source code file.
+Author: Mark E. Davis, 1994.
+Rev History: Rick McGowan, fixes & updates May 2001.
+Sept 2001: fixed const & error conditions per
+mods suggested by S. Parent & A. Lillich.
+June 2002: Tim Dodd added detection and handling of incomplete
+source sequences, enhanced error detection, added casts
+to eliminate compiler warnings.
+July 2003: slight mods to back out aggressive FFFE detection.
+Jan 2004: updated switches in from-UTF8 conversions.
+Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions.
+
+See the header file "ConvertUTF.h" for complete documentation.
+
+------------------------------------------------------------------------ */
+
+
+#include "UTF8.h"
+#ifdef CVTUTF_DEBUG
+#include <stdio.h>
+#endif
+
+static const int halfShift = 10; /* used for shifting by 10 bits */
+
+static const UTF32 halfBase = 0x0010000UL;
+static const UTF32 halfMask = 0x3FFUL;
+
+#define UNI_SUR_HIGH_START (UTF32)0xD800
+#define UNI_SUR_HIGH_END (UTF32)0xDBFF
+#define UNI_SUR_LOW_START (UTF32)0xDC00
+#define UNI_SUR_LOW_END (UTF32)0xDFFF
+
+
+/* --------------------------------------------------------------------- */
+
+/*
+* Index into the table below with the first byte of a UTF-8 sequence to
+* get the number of trailing bytes that are supposed to follow it.
+* Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
+* left as-is for anyone who may want to do such conversion, which was
+* allowed in earlier algorithms.
+*/
+static const char trailingBytesForUTF8[256] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
+};
+
+/*
+* Magic values subtracted from a buffer value during UTF8 conversion.
+* This table contains as many values as there might be trailing bytes
+* in a UTF-8 sequence.
+*/
+static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
+0x03C82080UL, 0xFA082080UL, 0x82082080UL };
+
+/*
+* Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
+* into the first byte, depending on how many bytes follow. There are
+* as many entries in this table as there are UTF-8 sequence types.
+* (I.e., one byte sequence, two byte... etc.). Remember that sequencs
+* for *legal* UTF-8 will be 4 or fewer bytes total.
+*/
+static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
+
+
+/* --------------------------------------------------------------------- */
+
+/*
+* Utility routine to tell whether a sequence of bytes is legal UTF-8.
+* This must be called with the length pre-determined by the first byte.
+* If not calling this from ConvertUTF8to*, then the length can be set by:
+* length = trailingBytesForUTF8[*source]+1;
+* and the sequence is illegal right away if there aren't that many bytes
+* available.
+* If presented with a length > 4, this returns false. The Unicode
+* definition of UTF-8 goes up to 4-byte sequences.
+*/
+
+static Boolean isLegalUTF8(const UTF8 *source, int length) {
+ UTF8 a;
+ const UTF8 *srcptr = source + length;
+ switch (length) {
+ default: return false;
+ /* Everything else falls through when "true"... */
+ case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
+ case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
+ case 2: if ((a = (*--srcptr)) > 0xBF) return false;
+
+ switch (*source) {
+ /* no fall-through in this inner switch */
+ case 0xE0: if (a < 0xA0) return false; break;
+ case 0xED: if (a > 0x9F) return false; break;
+ case 0xF0: if (a < 0x90) return false; break;
+ case 0xF4: if (a > 0x8F) return false; break;
+ default: if (a < 0x80) return false;
+ }
+
+ case 1: if (*source >= 0x80 && *source < 0xC2) return false;
+ }
+ if (*source > 0xF4) return false;
+ return true;
+}
+
+
+/* --------------------------------------------------------------------- */
+
+ConversionResult ConvertUTF8toUTF16(
+ const UTF8** sourceStart, const UTF8* sourceEnd,
+ UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) {
+ ConversionResult result = conversionOK;
+ const UTF8* source = *sourceStart;
+ UTF16* target = *targetStart;
+ while (source < sourceEnd) {
+ UTF32 ch = 0;
+ unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
+ if (source + extraBytesToRead >= sourceEnd) {
+ result = sourceExhausted; break;
+ }
+ /* Do this check whether lenient or strict */
+ if (!isLegalUTF8(source, extraBytesToRead + 1)) {
+ result = sourceIllegal;
+ break;
+ }
+ /*
+ * The cases all fall through. See "Note A" below.
+ */
+ switch (extraBytesToRead) {
+ case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
+ case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
+ case 3: ch += *source++; ch <<= 6;
+ case 2: ch += *source++; ch <<= 6;
+ case 1: ch += *source++; ch <<= 6;
+ case 0: ch += *source++;
+ }
+ ch -= offsetsFromUTF8[extraBytesToRead];
+
+ //DebugAssertIf(target >= targetEnd);
+
+ if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */
+ /* UTF-16 surrogate values are illegal in UTF-32 */
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
+ if (flags == strictConversion) {
+ source -= (extraBytesToRead + 1); /* return to the illegal value itself */
+ result = sourceIllegal;
+ break;
+ }
+ else {
+ *target++ = UNI_REPLACEMENT_CHAR;
+ }
+ }
+ else {
+ *target++ = (UTF16)ch; /* normal case */
+ }
+ }
+ else if (ch > UNI_MAX_UTF16) {
+ if (flags == strictConversion) {
+ result = sourceIllegal;
+ source -= (extraBytesToRead + 1); /* return to the start */
+ break; /* Bail out; shouldn't continue */
+ }
+ else {
+ *target++ = UNI_REPLACEMENT_CHAR;
+ }
+ }
+ else {
+ /* target is a character in range 0xFFFF - 0x10FFFF. */
+ if (target + 1 >= targetEnd) {
+ source -= (extraBytesToRead + 1); /* Back up source pointer! */
+ result = targetExhausted; break;
+ }
+ ch -= halfBase;
+ *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START);
+ *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START);
+ }
+ }
+ *sourceStart = source;
+ *targetStart = target;
+ return result;
+}
+
+/* ---------------------------------------------------------------------
+
+Note A.
+The fall-through switches in UTF-8 reading code save a
+temp variable, some decrements & conditionals. The switches
+are equivalent to the following loop:
+{
+int tmpBytesToRead = extraBytesToRead+1;
+do {
+ch += *source++;
+--tmpBytesToRead;
+if (tmpBytesToRead) ch <<= 6;
+} while (tmpBytesToRead > 0);
+}
+In UTF-8 writing code, the switches on "bytesToWrite" are
+similarly unrolled loops.
+
+--------------------------------------------------------------------- */
+
+ConversionResult ConvertUTF16toUTF8(
+ const UTF16** sourceStart, const UTF16* sourceEnd,
+ UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) {
+ ConversionResult result = conversionOK;
+ const UTF16* source = *sourceStart;
+ UTF8* target = *targetStart;
+ while (source < sourceEnd) {
+ UTF32 ch;
+ unsigned short bytesToWrite = 0;
+ const UTF32 byteMask = 0xBF;
+ const UTF32 byteMark = 0x80;
+ const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */
+ ch = *source++;
+ /* If we have a surrogate pair, convert to UTF32 first. */
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END && source < sourceEnd) {
+ UTF32 ch2 = *source;
+ if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
+ ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
+ + (ch2 - UNI_SUR_LOW_START) + halfBase;
+ ++source;
+ }
+ else if (flags == strictConversion) { /* it's an unpaired high surrogate */
+ --source; /* return to the illegal value itself */
+ result = sourceIllegal;
+ break;
+ }
+ }
+ else if ((flags == strictConversion) && (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END)) {
+ --source; /* return to the illegal value itself */
+ result = sourceIllegal;
+ break;
+ }
+ /* Figure out how many bytes the result will require */
+ if (ch < (UTF32)0x80) {
+ bytesToWrite = 1;
+ }
+ else if (ch < (UTF32)0x800) {
+ bytesToWrite = 2;
+ }
+ else if (ch < (UTF32)0x10000) {
+ bytesToWrite = 3;
+ }
+ else if (ch < (UTF32)0x200000) {
+ bytesToWrite = 4;
+ }
+ else {
+ bytesToWrite = 2;
+ ch = UNI_REPLACEMENT_CHAR;
+ }
+
+ target += bytesToWrite;
+ if (target > targetEnd) {
+ source = oldSource; /* Back up source pointer! */
+ target -= bytesToWrite; result = targetExhausted; break;
+ }
+ switch (bytesToWrite) { /* note: everything falls through. */
+ case 4: *--target = (ch | byteMark) & byteMask; ch >>= 6;
+ case 3: *--target = (ch | byteMark) & byteMask; ch >>= 6;
+ case 2: *--target = (ch | byteMark) & byteMask; ch >>= 6;
+ case 1: *--target = ch | firstByteMark[bytesToWrite];
+ }
+ target += bytesToWrite;
+ }
+ *sourceStart = source;
+ *targetStart = target;
+ return result;
+}
+
+
+bool ConvertUTF8toUTF16(const char* source, int srcLength, uint16* output, int& outlength)
+{
+ uint16* newoutput = output;
+ const UTF8* src = (UTF8*)source;
+ if (ConvertUTF8toUTF16(&src, src + srcLength, &newoutput, newoutput + srcLength, lenientConversion) != sourceIllegal)
+ {
+ outlength = newoutput - output;
+ return true;
+ }
+ else
+ {
+ outlength = 0;
+ return false;
+ }
+}
+
+bool ConvertUTF8toUTF16(const std::string& source, dynamic_array<uint16>& utf16)
+{
+ utf16.resize_uninitialized(source.size());
+ int length = 0;
+ bool success = ConvertUTF8toUTF16(source.data(), (int)source.size(), utf16.begin(), length);
+ utf16.resize_uninitialized(length);
+ return success;
+}
+
+bool ConvertUTF16toUTF8(const uint16* source, int srcLength, char* output, int& outlength)
+{
+ UTF8* newoutput = (UTF8*)output;
+ const UTF16* src = (UTF16*)source;
+ if (ConvertUTF16toUTF8(&src, src + srcLength, &newoutput, newoutput + (srcLength * 4), lenientConversion) != sourceIllegal)
+ {
+ outlength = newoutput - (UTF8*)output;
+ return true;
+ }
+ else
+ {
+ outlength = 0;
+ return false;
+ }
+}
+
+
+bool ConvertUTF16toUTF8(const dynamic_array<UnicodeChar>& source, std::string& utf8)
+{
+ utf8.resize(source.size() * 4);
+ int length = 0;
+ bool success = ConvertUTF16toUTF8(source.data(), (int)source.size(), &utf8[0], length);
+ utf8.resize(length);
+ return success;
+}
+
+bool ConvertUTF16toUTF8(const uint16 utf16character, std::string& utf8)
+{
+ int len;
+ char character[5];
+ if (!ConvertUTF16toUTF8(&utf16character, 1, character, len))
+ return false;
+ character[len] = 0;
+ utf8 = std::string(character);
+ return true;
+}
+
+
+namespace_end \ No newline at end of file
diff --git a/Source/modules/asura-base/Misc/UTF8.h b/Source/modules/asura-base/Misc/UTF8.h
new file mode 100644
index 0000000..269ad36
--- /dev/null
+++ b/Source/modules/asura-base/Misc/UTF8.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include <string>
+
+#include "../Type.h"
+#include "../Classes.h"
+#include "../Utilities/dynamic_array.h"
+
+namespace_begin(AsuraEngine)
+
+typedef uint16 UnicodeChar;
+
+bool ConvertUTF8toUTF16(const char* source, int srcLength, UnicodeChar* output, int& outlength);
+bool ConvertUTF8toUTF16(const std::string& source, dynamic_array<UnicodeChar>& utf16);
+bool ConvertUTF16toUTF8(const uint16* source, int srcLength, char* output, int& outlength);
+bool ConvertUTF16toUTF8(const dynamic_array<UnicodeChar>& source, std::string& utf8);
+bool ConvertUTF16toUTF8(const uint16* source, int srcLength, char* output, int& outlength);
+bool ConvertUTF16toUTF8(const uint16 utf16character, std::string& utf8);
+
+namespace_end \ No newline at end of file
diff --git a/Source/modules/asura-base/Utilities/LinkedList.h b/Source/modules/asura-base/Utilities/LinkedList.h
index e69de29..5a7dc74 100644
--- a/Source/modules/asura-base/Utilities/LinkedList.h
+++ b/Source/modules/asura-base/Utilities/LinkedList.h
@@ -0,0 +1,388 @@
+#ifndef _ASURA_LINKED_LIST_H_
+#define _ASURA_LINKED_LIST_H_
+
+#include "../Type.h"
+#include <string.h>
+
+#if !ASURA_RELEASE
+#define LINKED_LIST_ASSERT(x) Assert(x)
+#else
+#define LINKED_LIST_ASSERT(x)
+#endif
+
+class ListElement
+{
+public:
+ inline ListElement();
+ inline ~ListElement() { RemoveFromList(); }
+
+ inline bool IsInList() const;
+ inline bool RemoveFromList();
+ inline void InsertInList(ListElement* pos);
+
+ // Check against List::end(), not NULL
+ ListElement* GetPrev() const { return m_Prev; }
+ ListElement* GetNext() const { return m_Next; }
+
+private:
+ // Non copyable
+ ListElement(const ListElement&);
+ ListElement& operator=(const ListElement&);
+
+ ListElement* m_Prev;
+ ListElement* m_Next;
+
+ template <class T> friend class List;
+ inline void ValidateLinks() const;
+
+#if !ASURA_RELEASE
+ // Iterator debugging only
+ template <class T> friend class ListIterator;
+ template <class T> friend class ListConstIterator;
+ void SetList(void* l) { m_List = l; }
+ void* m_List;
+#else
+ void SetList(void*) {}
+#endif
+};
+
+template <class T>
+class ListNode : public ListElement
+{
+public:
+ ListNode(T* data = NULL) : m_Data(data) {}
+ T& operator*() const { return *m_Data; }
+ T* operator->() const { return m_Data; }
+ T* GetData() const { return m_Data; }
+ void SetData(T* data) { m_Data = data; }
+
+ // We know the type of prev and next element
+ ListNode* GetPrev() const { return static_cast<ListNode*>(ListElement::GetPrev()); }
+ ListNode* GetNext() const { return static_cast<ListNode*>(ListElement::GetNext()); }
+
+private:
+ T * m_Data;
+};
+
+template <class T>
+class ListIterator
+{
+public:
+ ListIterator(T* node = NULL) : m_Node(node) {}
+
+ // Pre- and post-increment operator
+ ListIterator& operator++() { m_Node = m_Node->GetNext(); return *this; }
+ ListIterator operator++(int) { ListIterator ret(*this); ++(*this); return ret; }
+
+ // Pre- and post-decrement operator
+ ListIterator& operator--() { m_Node = m_Node->GetPrev(); return *this; }
+ ListIterator operator--(int) { ListIterator ret(*this); --(*this); return ret; }
+
+ T& operator*() const { return static_cast<T&>(*m_Node); }
+ T* operator->() const { return static_cast<T*>(m_Node); }
+
+ friend bool operator !=(const ListIterator& x, const ListIterator& y) { return x.m_Node != y.m_Node; }
+ friend bool operator ==(const ListIterator& x, const ListIterator& y) { return x.m_Node == y.m_Node; }
+
+private:
+ template <class S> friend class List;
+ ListIterator(ListElement* node) : m_Node(node) {}
+ ListElement* m_Node;
+};
+
+
+template <class T>
+class ListConstIterator
+{
+public:
+ ListConstIterator(const T* node = NULL) : m_Node(node) {}
+
+ // Pre- and post-increment operator
+ ListConstIterator& operator++() { m_Node = m_Node->GetNext(); return *this; }
+ ListConstIterator operator++(int) { ListConstIterator ret(*this); ++(*this); return ret; }
+
+ // Pre- and post-decrement operator
+ ListConstIterator& operator--() { m_Node = m_Node->GetPrev(); return *this; }
+ ListConstIterator operator--(int) { ListConstIterator ret(*this); --(*this); return ret; }
+
+ const T& operator*() const { return static_cast<const T&>(*m_Node); }
+ const T* operator->() const { return static_cast<const T*>(m_Node); }
+
+ friend bool operator !=(const ListConstIterator& x, const ListConstIterator& y) { return x.m_Node != y.m_Node; }
+ friend bool operator ==(const ListConstIterator& x, const ListConstIterator& y) { return x.m_Node == y.m_Node; }
+
+private:
+ template <class S> friend class List;
+ ListConstIterator(const ListElement* node) : m_Node(node) {}
+ const ListElement* m_Node;
+};
+
+template <class T>
+class List
+{
+public:
+ typedef ListConstIterator<T> const_iterator;
+ typedef ListIterator<T> iterator;
+ typedef T value_type;
+
+ inline List();
+ inline ~List();
+
+ void push_back(T& node) { node.InsertInList(&m_Root); }
+ void push_front(T& node) { node.InsertInList(m_Root.m_Next); }
+ void insert(iterator pos, T& node) { node.InsertInList(&(*pos)); }
+ void erase(iterator pos) { pos->RemoveFromList(); }
+
+ void pop_back() { if (m_Root.m_Prev != &m_Root) m_Root.m_Prev->RemoveFromList(); }
+ void pop_front() { if (m_Root.m_Next != &m_Root) m_Root.m_Next->RemoveFromList(); }
+
+ iterator begin() { return iterator(m_Root.m_Next); }
+ iterator end() { return iterator(&m_Root); }
+
+ const_iterator begin() const { return const_iterator(m_Root.m_Next); }
+ const_iterator end() const { return const_iterator(&m_Root); }
+
+ T& front() { LINKED_LIST_ASSERT(!empty()); return static_cast<T&>(*m_Root.m_Next); }
+ T& back() { LINKED_LIST_ASSERT(!empty()); return static_cast<T&>(*m_Root.m_Prev); }
+
+ const T& front() const { LINKED_LIST_ASSERT(!empty()); return static_cast<const T&>(*m_Root.m_Next); }
+ const T& back() const { LINKED_LIST_ASSERT(!empty()); return static_cast<const T&>(*m_Root.m_Prev); }
+
+ bool empty() const { return begin() == end(); }
+
+ size_t size_slow() const;
+ inline void clear();
+ inline void swap(List& other);
+
+ // Insert list into list (removes elements from source)
+ inline void insert(iterator pos, List& src);
+ inline void append(List& src);
+
+private:
+ ListElement m_Root;
+};
+
+
+template <class T>
+List<T>::List()
+{
+ m_Root.m_Prev = &m_Root;
+ m_Root.m_Next = &m_Root;
+ m_Root.SetList(this);
+}
+
+template <class T>
+List<T>::~List()
+{
+ clear();
+}
+
+template <class T>
+size_t List<T>::size_slow() const
+{
+ size_t size = 0;
+ ListElement* node = m_Root.m_Next;
+ while (node != &m_Root)
+ {
+ node = node->m_Next;
+ size++;
+ }
+ return size;
+}
+
+template <class T>
+void List<T>::clear()
+{
+ ListElement* node = m_Root.m_Next;
+ while (node != &m_Root)
+ {
+ ListElement* next = node->m_Next;
+ node->m_Prev = NULL;
+ node->m_Next = NULL;
+ node->SetList(NULL);
+ node = next;
+ }
+ m_Root.m_Next = &m_Root;
+ m_Root.m_Prev = &m_Root;
+}
+
+template <class T>
+void List<T>::swap(List<T>& other)
+{
+ LINKED_LIST_ASSERT(this != &other);
+
+ std::swap(other.m_Root.m_Prev, m_Root.m_Prev);
+ std::swap(other.m_Root.m_Next, m_Root.m_Next);
+
+ if (other.m_Root.m_Prev == &m_Root)
+ other.m_Root.m_Prev = &other.m_Root;
+ if (m_Root.m_Prev == &other.m_Root)
+ m_Root.m_Prev = &m_Root;
+ if (other.m_Root.m_Next == &m_Root)
+ other.m_Root.m_Next = &other.m_Root;
+ if (m_Root.m_Next == &other.m_Root)
+ m_Root.m_Next = &m_Root;
+
+ other.m_Root.m_Prev->m_Next = &other.m_Root;
+ other.m_Root.m_Next->m_Prev = &other.m_Root;
+
+ m_Root.m_Prev->m_Next = &m_Root;
+ m_Root.m_Next->m_Prev = &m_Root;
+
+#if !ASURA_RELEASE
+ iterator my_it, my_end = end();
+ for (my_it = begin(); my_it != my_end; ++my_it)
+ my_it->m_List = this;
+ iterator other_it, other_end = other.end();
+ for (other_it = other.begin(); other_it != other_end; ++other_it)
+ other_it->m_List = &other;
+#endif
+}
+
+template <class T>
+void List<T>::insert(iterator pos, List<T>& src)
+{
+ LINKED_LIST_ASSERT(this != &src);
+ if (src.empty())
+ return;
+
+#if !ASURA_RELEASE
+ iterator src_it, src_end = src.end();
+ for (src_it = src.begin(); src_it != src_end; ++src_it)
+ src_it->m_List = this;
+#endif
+ // Insert source before pos
+ ListElement* a = pos.m_Node->m_Prev;
+ ListElement* b = pos.m_Node;
+ a->m_Next = src.m_Root.m_Next;
+ b->m_Prev = src.m_Root.m_Prev;
+ a->m_Next->m_Prev = a;
+ b->m_Prev->m_Next = b;
+ // Clear source list
+ src.m_Root.m_Next = &src.m_Root;
+ src.m_Root.m_Prev = &src.m_Root;
+}
+
+template <class T>
+void List<T>::append(List& src)
+{
+ insert(end(), src);
+}
+
+ListElement::ListElement()
+{
+ m_Prev = NULL;
+ m_Next = NULL;
+ SetList(NULL);
+}
+
+bool ListElement::IsInList() const
+{
+ return m_Prev != NULL;
+}
+
+bool ListElement::RemoveFromList()
+{
+ if (!IsInList())
+ return false;
+
+#if !ASURA_RELEASE
+ ValidateLinks();
+#endif
+ m_Prev->m_Next = m_Next;
+ m_Next->m_Prev = m_Prev;
+ m_Prev = NULL;
+ m_Next = NULL;
+ return true;
+}
+
+void ListElement::InsertInList(ListElement* pos)
+{
+ if (this == pos)
+ return;
+
+ if (IsInList())
+ RemoveFromList();
+
+#if !ASURA_RELEASE
+ m_List = pos->m_List;
+ pos->m_Prev->ValidateLinks();
+ pos->ValidateLinks();
+#endif
+ m_Prev = pos->m_Prev;
+ m_Next = pos;
+ m_Prev->m_Next = this;
+ m_Next->m_Prev = this;
+#if !ASURA_RELEASE
+ ValidateLinks();
+#endif
+ return;
+}
+
+void ListElement::ValidateLinks() const
+{
+#if !ASURA_RELEASE
+ LINKED_LIST_ASSERT(m_Prev != NULL && m_Next != NULL);
+ LINKED_LIST_ASSERT(m_Prev->m_Next == this && m_Next->m_Prev == this);
+ LINKED_LIST_ASSERT(m_Prev->m_List == m_List && m_Next->m_List == m_List);
+#endif
+}
+
+/// Allows for iterating a linked list, even if you add / remove any node during traversal.
+template<class T>
+class SafeIterator
+{
+public:
+ SafeIterator(T& list)
+ : m_SourceList(list)
+ {
+ m_CurrentNode = NULL;
+ m_ExecuteList.swap(m_SourceList);
+ }
+
+ ~SafeIterator()
+ {
+ // Call Complete if you abort the iteration!
+ LINKED_LIST_ASSERT(m_ExecuteList.empty());
+ }
+
+ // You must call complete if you are in some way aborting list iteration.
+ // If you dont call Complete, the source list will lose nodes that have not yet been iterated permanently.
+ //
+ /// SafeIterator<Behaviour*> i(myList);
+ /// i =0;
+ /// while(i.GetNext() && ++i != 3)
+ /// (**i).Update();
+ /// i.Complete();
+ void Complete()
+ {
+ m_SourceList.append(m_ExecuteList);
+ }
+
+ typename T::value_type* Next()
+ {
+ if (!m_ExecuteList.empty())
+ {
+ typename T::iterator it = m_ExecuteList.begin();
+ m_CurrentNode = &*it;
+ m_ExecuteList.erase(it);
+ m_SourceList.push_back(*m_CurrentNode);
+ }
+ else
+ {
+ m_CurrentNode = NULL;
+ }
+ return m_CurrentNode;
+ }
+
+ typename T::value_type& operator *() const { return *m_CurrentNode; }
+ typename T::value_type* operator ->() const { return m_CurrentNode; }
+
+private:
+ T m_ExecuteList;
+ T& m_SourceList;
+ typename T::value_type* m_CurrentNode;
+};
+
+
+#endif
diff --git a/Source/modules/asura-base/Utilities/dynamic_array.h b/Source/modules/asura-base/Utilities/dynamic_array.h
new file mode 100644
index 0000000..36885f0
--- /dev/null
+++ b/Source/modules/asura-base/Utilities/dynamic_array.h
@@ -0,0 +1,337 @@
+#pragma once
+
+#include <memory> // std::uninitialized_fill
+
+// dynamic_array - simplified version of std::vector<T>
+//
+// features:
+// . always uses memcpy for copying elements. Your data structures must be simple and can't have internal pointers / rely on copy constructor.
+// . EASTL like push_back(void) implementation
+// Existing std STL implementations implement insertion operations by copying from an element.
+// For example, resize(size() + 1) creates a throw-away temporary object.
+// There is no way in existing std STL implementations to add an element to a container without implicitly or
+// explicitly providing one to copy from (aside from some existing POD optimizations).
+// For expensive-to-construct objects this creates a potentially serious performance problem.
+// . grows X2 on reallocation
+// . small code footprint
+// . clear actually deallocates memory
+// . resize does NOT initialize members!
+//
+// Changelog:
+// Added pop_back()
+// Added assign()
+// Added clear() - frees the data, use resize(0) to clear w/o freeing
+// zero allocation for empty array
+//
+//
+template<typename T>
+struct AlignOfType
+{
+ enum { align = ALIGN_OF(T) };
+};
+
+
+template <typename T, size_t align = AlignOfType<T>::align, MemLabelIdentifier defaultLabel = kMemDynamicArrayId>
+struct dynamic_array
+{
+public:
+ typedef T* iterator;
+ typedef const T* const_iterator;
+ typedef T value_type;
+ typedef size_t size_type;
+ typedef size_t difference_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+
+public:
+
+ dynamic_array() : m_data(NULL), m_label(defaultLabel, NULL), m_size(0), m_capacity(0)
+ {
+ m_label = MemLabelId(defaultLabel, GET_CURRENT_ALLOC_ROOT_HEADER());
+ }
+
+ dynamic_array(MemLabelRef label) : m_data(NULL), m_label(label), m_size(0), m_capacity(0)
+ {
+ }
+
+ explicit dynamic_array(size_t size, MemLabelRef label)
+ : m_label(label), m_size(size), m_capacity(size)
+ {
+ m_data = allocate(size);
+ }
+
+ dynamic_array(size_t size, T const& init_value, MemLabelRef label)
+ : m_label(label), m_size(size), m_capacity(size)
+ {
+ m_data = allocate(size);
+ std::uninitialized_fill(m_data, m_data + size, init_value);
+ }
+
+ ~dynamic_array()
+ {
+ if (owns_data())
+ m_data = deallocate(m_data);
+ }
+
+ dynamic_array(const dynamic_array& other) : m_capacity(0), m_size(0), m_label(other.m_label)
+ {
+ //m_label.SetRootHeader(GET_CURRENT_ALLOC_ROOT_HEADER());
+ m_data = NULL;
+ assign(other.begin(), other.end());
+ }
+
+ dynamic_array& operator=(const dynamic_array& other)
+ {
+ // should not allocate memory unless we have to
+ assign(other.begin(), other.end());
+ return *this;
+ }
+
+ void clear()
+ {
+ if (owns_data())
+ m_data = deallocate(m_data);
+ m_size = 0;
+ m_capacity = 0;
+ }
+
+ void assign(const_iterator begin, const_iterator end)
+ {
+ Assert(begin <= end);
+
+ resize_uninitialized(end - begin);
+ memcpy(m_data, begin, m_size * sizeof(T));
+ }
+
+ void erase(iterator input_begin, iterator input_end)
+ {
+ Assert(input_begin <= input_end);
+ Assert(input_begin >= begin());
+ Assert(input_end <= end());
+
+ size_t leftOverSize = end() - input_end;
+ memmove(input_begin, input_end, leftOverSize * sizeof(T));
+ m_size -= input_end - input_begin;
+ }
+
+ iterator erase(iterator position)
+ {
+ Assert(position >= begin());
+ Assert(position < end());
+
+ size_t leftOverSize = end() - position - 1;
+ memmove(position, position + 1, leftOverSize * sizeof(T));
+ m_size -= 1;
+
+ return position;
+ }
+
+ iterator insert(iterator insert_before, const_iterator input_begin, const_iterator input_end)
+ {
+ Assert(input_begin <= input_end);
+ Assert(insert_before >= begin());
+ Assert(insert_before <= end());
+
+ // resize (make sure that insertBefore does not get invalid in the meantime because of a reallocation)
+ size_t insert_before_index = insert_before - begin();
+ size_t elements_to_be_moved = size() - insert_before_index;
+ resize_uninitialized((input_end - input_begin) + size());
+ insert_before = begin() + insert_before_index;
+
+ size_t insertsize = input_end - input_begin;
+ // move to the end of where the inserted data will be
+ memmove(insert_before + insertsize, insert_before, elements_to_be_moved * sizeof(T));
+ // inject input data in the hole we just created
+ memcpy(insert_before, input_begin, insertsize * sizeof(T));
+
+ return insert_before;
+ }
+
+ iterator insert(iterator insertBefore, const T& t) { return insert(insertBefore, &t, &t + 1); }
+
+ void swap(dynamic_array& other) throw()
+ {
+ if (m_data) UNITY_TRANSFER_OWNERSHIP_TO_HEADER(m_data, m_label, other.m_label.GetRootHeader());
+ if (other.m_data) UNITY_TRANSFER_OWNERSHIP_TO_HEADER(other.m_data, other.m_label, m_label.GetRootHeader());
+ std::swap(m_data, other.m_data);
+ std::swap(m_size, other.m_size);
+ std::swap(m_capacity, other.m_capacity);
+ std::swap(m_label, other.m_label);
+ }
+
+ T& push_back()
+ {
+ if (++m_size > capacity())
+ reserve(std::max<size_t>(capacity() * 2, 1));
+ return back();
+ }
+
+ void push_back(const T& t)
+ {
+ push_back() = t;
+ }
+
+ void pop_back()
+ {
+ Assert(m_size >= 1);
+ m_size--;
+ }
+
+ void resize_uninitialized(size_t size, bool double_on_resize = false)
+ {
+ m_size = size;
+ if (m_size <= capacity())
+ return;
+
+ if (double_on_resize && size < capacity() * 2)
+ size = capacity() * 2;
+ reserve(size);
+ }
+
+ void resize_initialized(size_t size, const T& t = T(), bool double_on_resize = false)
+ {
+ if (size > capacity())
+ {
+ size_t requested_size = size;
+ if (double_on_resize && size < capacity() * 2)
+ requested_size = capacity() * 2;
+ reserve(requested_size);
+ }
+
+ if (size > m_size)
+ std::uninitialized_fill(m_data + m_size, m_data + size, t);
+ m_size = size;
+ }
+
+ void reserve(size_t inCapacity)
+ {
+ if (capacity() >= inCapacity)
+ return;
+
+ if (owns_data())
+ {
+ m_capacity = inCapacity;
+ m_data = reallocate(m_data, inCapacity);
+ }
+ else
+ {
+ T* newData = allocate(inCapacity);
+ memcpy(newData, m_data, m_size * sizeof(T));
+
+ // Invalidate old non-owned data, since using the data from two places is most likely a really really bad idea.
+#if DEBUGMODE
+ memset(m_data, 0xCD, capacity() * sizeof(T));
+#endif
+
+ m_capacity = inCapacity; // and clear reference bit
+ m_data = newData;
+ }
+ }
+
+ void assign_external(T* begin, T* end)
+ {
+ if (owns_data())
+ m_data = deallocate(m_data);
+ m_size = m_capacity = reinterpret_cast<value_type*> (end) - reinterpret_cast<value_type*> (begin);
+ Assert(m_size < k_reference_bit);
+ m_capacity |= k_reference_bit;
+ m_data = begin;
+ }
+
+ void set_owns_data(bool ownsData)
+ {
+ if (ownsData)
+ m_capacity &= ~k_reference_bit;
+ else
+ m_capacity |= k_reference_bit;
+ }
+
+ void shrink_to_fit()
+ {
+ if (owns_data())
+ {
+ m_capacity = m_size;
+ m_data = reallocate(m_data, m_size);
+ }
+ }
+
+ const T& back() const { Assert(m_size != 0); return m_data[m_size - 1]; }
+ const T& front() const { Assert(m_size != 0); return m_data[0]; }
+
+ T& back() { Assert(m_size != 0); return m_data[m_size - 1]; }
+ T& front() { Assert(m_size != 0); return m_data[0]; }
+
+ T* data() { return m_data; }
+ T const* data() const { return m_data; }
+
+ bool empty() const { return m_size == 0; }
+ size_t size() const { return m_size; }
+ size_t capacity() const { return m_capacity & ~k_reference_bit; }
+
+ T const& operator[] (size_t index) const { DebugAssert(index < m_size); return m_data[index]; }
+ T& operator[] (size_t index) { DebugAssert(index < m_size); return m_data[index]; }
+
+ T const* begin() const { return m_data; }
+ T* begin() { return m_data; }
+
+ T const* end() const { return m_data + m_size; }
+ T* end() { return m_data + m_size; }
+
+ bool owns_data() { return (m_capacity & k_reference_bit) == 0; }
+
+ bool equals(const dynamic_array& other)
+ {
+ if (m_size != other.m_size)
+ return false;
+
+ for (int i = 0; i < m_size; i++)
+ {
+ if (m_data[i] != other.m_data[i])
+ return false;
+ }
+
+ return true;
+ }
+
+ void set_memory_label(MemLabelRef label)
+ {
+ Assert(m_data == NULL);
+ m_label = label;
+ }
+
+private:
+
+ static const size_t k_reference_bit = (size_t)1 << (sizeof(size_t) * 8 - 1);
+
+ T* allocate(size_t size)
+ {
+ // If you are getting this error then you are trying to allocate memory for an incomplete type
+ CompileTimeAssert(sizeof(T) != 0, "incomplete type");
+ CompileTimeAssert(align != 0, "incomplete type");
+
+ return static_cast<T*> (UNITY_MALLOC_ALIGNED(m_label, size * sizeof(T), align));
+ }
+
+ T* deallocate(T* data)
+ {
+ Assert(owns_data());
+ UNITY_FREE(m_label, data);
+ return NULL;
+ }
+
+ T* reallocate(T* data, size_t size)
+ {
+ // If you are getting this error then you are trying to allocate memory for an incomplete type
+ CompileTimeAssert(sizeof(T) != 0, "incomplete type");
+ CompileTimeAssert(align != 0, "incomplete type");
+
+ Assert(owns_data());
+ int alignof = static_cast<int>(align);
+ return static_cast<T*> (UNITY_REALLOC_ALIGNED(m_label, data, size * sizeof(T), alignof));
+ }
+
+ T* m_data;
+ MemLabelId m_label;
+ size_t m_size;
+ size_t m_capacity;
+};
diff --git a/Source/modules/asura-box2d/Physics/Body.h b/Source/modules/asura-box2d/Physics2D/Body.h
index d7e79d5..d7e79d5 100644
--- a/Source/modules/asura-box2d/Physics/Body.h
+++ b/Source/modules/asura-box2d/Physics2D/Body.h
diff --git a/Source/modules/asura-box2d/Physics/ChainShape.h b/Source/modules/asura-box2d/Physics2D/ChainShape.h
index 2403587..2403587 100644
--- a/Source/modules/asura-box2d/Physics/ChainShape.h
+++ b/Source/modules/asura-box2d/Physics2D/ChainShape.h
diff --git a/Source/modules/asura-box2d/Physics/CircleShape.h b/Source/modules/asura-box2d/Physics2D/CircleShape.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/CircleShape.h
+++ b/Source/modules/asura-box2d/Physics2D/CircleShape.h
diff --git a/Source/modules/asura-box2d/Physics/Contact.h b/Source/modules/asura-box2d/Physics2D/Contact.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/Contact.h
+++ b/Source/modules/asura-box2d/Physics2D/Contact.h
diff --git a/Source/modules/asura-box2d/Physics/DebugDraw.h b/Source/modules/asura-box2d/Physics2D/DebugDraw.h
index a92be43..a92be43 100644
--- a/Source/modules/asura-box2d/Physics/DebugDraw.h
+++ b/Source/modules/asura-box2d/Physics2D/DebugDraw.h
diff --git a/Source/modules/asura-box2d/Physics/DistanceJoint.h b/Source/modules/asura-box2d/Physics2D/DistanceJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/DistanceJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/DistanceJoint.h
diff --git a/Source/modules/asura-box2d/Physics/EdgeShape.h b/Source/modules/asura-box2d/Physics2D/EdgeShape.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/EdgeShape.h
+++ b/Source/modules/asura-box2d/Physics2D/EdgeShape.h
diff --git a/Source/modules/asura-box2d/Physics/Fixture.h b/Source/modules/asura-box2d/Physics2D/Fixture.h
index 69f0153..69f0153 100644
--- a/Source/modules/asura-box2d/Physics/Fixture.h
+++ b/Source/modules/asura-box2d/Physics2D/Fixture.h
diff --git a/Source/modules/asura-box2d/Physics/FrictionJoint.h b/Source/modules/asura-box2d/Physics2D/FrictionJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/FrictionJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/FrictionJoint.h
diff --git a/Source/modules/asura-box2d/Physics/GearJoint.h b/Source/modules/asura-box2d/Physics2D/GearJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/GearJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/GearJoint.h
diff --git a/Source/modules/asura-box2d/Physics/Joint.h b/Source/modules/asura-box2d/Physics2D/Joint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/Joint.h
+++ b/Source/modules/asura-box2d/Physics2D/Joint.h
diff --git a/Source/modules/asura-box2d/Physics/MotorJoint.h b/Source/modules/asura-box2d/Physics2D/MotorJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/MotorJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/MotorJoint.h
diff --git a/Source/modules/asura-box2d/Physics/MouseJoint.h b/Source/modules/asura-box2d/Physics2D/MouseJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/MouseJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/MouseJoint.h
diff --git a/Source/modules/asura-box2d/Physics/PolygonShape.h b/Source/modules/asura-box2d/Physics2D/PolygonShape.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/PolygonShape.h
+++ b/Source/modules/asura-box2d/Physics2D/PolygonShape.h
diff --git a/Source/modules/asura-box2d/Physics/PrismaticJoint.h b/Source/modules/asura-box2d/Physics2D/PrismaticJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/PrismaticJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/PrismaticJoint.h
diff --git a/Source/modules/asura-box2d/Physics/PulleyJoint.h b/Source/modules/asura-box2d/Physics2D/PulleyJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/PulleyJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/PulleyJoint.h
diff --git a/Source/modules/asura-box2d/Physics/RevoluteJoint.h b/Source/modules/asura-box2d/Physics2D/RevoluteJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/RevoluteJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/RevoluteJoint.h
diff --git a/Source/modules/asura-box2d/Physics/RopeJoint.h b/Source/modules/asura-box2d/Physics2D/RopeJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/RopeJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/RopeJoint.h
diff --git a/Source/modules/asura-box2d/Physics/Shape.h b/Source/modules/asura-box2d/Physics2D/Shape.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/Shape.h
+++ b/Source/modules/asura-box2d/Physics2D/Shape.h
diff --git a/Source/modules/asura-box2d/Physics/WeldJoint.h b/Source/modules/asura-box2d/Physics2D/WeldJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/WeldJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/WeldJoint.h
diff --git a/Source/modules/asura-box2d/Physics/WheelJoint.h b/Source/modules/asura-box2d/Physics2D/WheelJoint.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-box2d/Physics/WheelJoint.h
+++ b/Source/modules/asura-box2d/Physics2D/WheelJoint.h
diff --git a/Source/modules/asura-box2d/Physics/World.h b/Source/modules/asura-box2d/Physics2D/World.h
index a156c79..a156c79 100644
--- a/Source/modules/asura-box2d/Physics/World.h
+++ b/Source/modules/asura-box2d/Physics2D/World.h
diff --git a/Source/modules/asura-box2d/Physics/binding/_body.cpp b/Source/modules/asura-box2d/Physics2D/binding/_body.cpp
index 0c9e3e8..0c9e3e8 100644
--- a/Source/modules/asura-box2d/Physics/binding/_body.cpp
+++ b/Source/modules/asura-box2d/Physics2D/binding/_body.cpp
diff --git a/Source/modules/asura-box2d/Physics/binding/_world.cpp b/Source/modules/asura-box2d/Physics2D/binding/_world.cpp
index 0940959..0940959 100644
--- a/Source/modules/asura-box2d/Physics/binding/_world.cpp
+++ b/Source/modules/asura-box2d/Physics2D/binding/_world.cpp
diff --git a/Source/modules/asura-core/Font/TTF.h b/Source/modules/asura-core/Font/TTF.h
deleted file mode 100644
index b83cf76..0000000
--- a/Source/modules/asura-core/Font/TTF.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _ASURA_TTF_H_
-#define _ASURA_TTF_H_
-
-namespace AsuraEngine
-{
- namespace Text
- {
-
- class TTF
- {
-
- };
-
- }
-}
-
-#endif \ No newline at end of file
diff --git a/Source/modules/asura-core/Font/TTF.cpp b/Source/modules/asura-core/Font/TTFImporter.cpp
index e69de29..e69de29 100644
--- a/Source/modules/asura-core/Font/TTF.cpp
+++ b/Source/modules/asura-core/Font/TTFImporter.cpp
diff --git a/Source/modules/asura-core/Graphics/Mesh2D.cpp b/Source/modules/asura-core/Font/TTFImporter.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-core/Graphics/Mesh2D.cpp
+++ b/Source/modules/asura-core/Font/TTFImporter.h
diff --git a/Source/modules/asura-core/Font/Utf.hpp b/Source/modules/asura-core/Font/Utf.hpp
deleted file mode 100644
index 59f62ed..0000000
--- a/Source/modules/asura-core/Font/Utf.hpp
+++ /dev/null
@@ -1,720 +0,0 @@
-#ifndef _ASURA_UTF_HPP_
-#define _ASURA_UTF_HPP_
-
-////////////////////////////////////////////////////////////
-// Headers
-////////////////////////////////////////////////////////////
-#include <algorithm>
-#include <locale>
-#include <string>
-#include <cstdlib>
-
-namespace AsuraEngine
-{
- namespace Text
- {
-
- template <unsigned int N>
- class Utf;
-
- ////////////////////////////////////////////////////////////
- /// \brief Specialization of the Utf template for UTF-8
- ///
- ////////////////////////////////////////////////////////////
- template <>
- class Utf<8>
- {
- public:
-
- ////////////////////////////////////////////////////////////
- /// \brief Decode a single UTF-8 character
- ///
- /// Decoding a character means finding its unique 32-bits
- /// code (called the codepoint) in the Unicode standard.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Codepoint of the decoded UTF-8 character
- /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static In Decode(In begin, In end, Uint32& output, Uint32 replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Encode a single UTF-8 character
- ///
- /// Encoding a character means converting a unique 32-bits
- /// code (called the codepoint) in the target encoding, UTF-8.
- ///
- /// \param input Codepoint to encode as UTF-8
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to UTF-8 (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename Out>
- static Out Encode(Uint32 input, Out output, Uint8 replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Advance to the next UTF-8 character
- ///
- /// This function is necessary for multi-elements encodings, as
- /// a single character may use more than 1 storage element.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static In Next(In begin, In end);
-
- ////////////////////////////////////////////////////////////
- /// \brief Count the number of characters of a UTF-8 sequence
- ///
- /// This function is necessary for multi-elements encodings, as
- /// a single character may use more than 1 storage element, thus the
- /// total size can be different from (begin - end).
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static std::size_t Count(In begin, In end);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an ANSI characters range to UTF-8
- ///
- /// The current global locale will be used by default, unless you
- /// pass a custom one in the \a locale parameter.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param locale Locale to use for conversion
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a wide characters range to UTF-8
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromWide(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-8
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromLatin1(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-8 characters range to ANSI characters
- ///
- /// The current global locale will be used by default, unless you
- /// pass a custom one in the \a locale parameter.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them)
- /// \param locale Locale to use for conversion
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-8 characters range to wide characters
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToWide(In begin, In end, Out output, wchar_t replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-8 characters range to latin-1 (ISO-5589-1) characters
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToLatin1(In begin, In end, Out output, char replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-8 characters range to UTF-8
- ///
- /// This functions does nothing more than a direct copy;
- /// it is defined only to provide the same interface as other
- /// specializations of the sf::Utf<> template, and allow
- /// generic code to be written on top of it.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf8(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-8 characters range to UTF-16
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf16(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-8 characters range to UTF-32
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf32(In begin, In end, Out output);
- };
-
- ////////////////////////////////////////////////////////////
- /// \brief Specialization of the Utf template for UTF-16
- ///
- ////////////////////////////////////////////////////////////
- template <>
- class Utf<16>
- {
- public:
-
- ////////////////////////////////////////////////////////////
- /// \brief Decode a single UTF-16 character
- ///
- /// Decoding a character means finding its unique 32-bits
- /// code (called the codepoint) in the Unicode standard.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Codepoint of the decoded UTF-16 character
- /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static In Decode(In begin, In end, Uint32& output, Uint32 replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Encode a single UTF-16 character
- ///
- /// Encoding a character means converting a unique 32-bits
- /// code (called the codepoint) in the target encoding, UTF-16.
- ///
- /// \param input Codepoint to encode as UTF-16
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to UTF-16 (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename Out>
- static Out Encode(Uint32 input, Out output, Uint16 replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Advance to the next UTF-16 character
- ///
- /// This function is necessary for multi-elements encodings, as
- /// a single character may use more than 1 storage element.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static In Next(In begin, In end);
-
- ////////////////////////////////////////////////////////////
- /// \brief Count the number of characters of a UTF-16 sequence
- ///
- /// This function is necessary for multi-elements encodings, as
- /// a single character may use more than 1 storage element, thus the
- /// total size can be different from (begin - end).
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static std::size_t Count(In begin, In end);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an ANSI characters range to UTF-16
- ///
- /// The current global locale will be used by default, unless you
- /// pass a custom one in the \a locale parameter.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param locale Locale to use for conversion
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a wide characters range to UTF-16
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromWide(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-16
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromLatin1(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-16 characters range to ANSI characters
- ///
- /// The current global locale will be used by default, unless you
- /// pass a custom one in the \a locale parameter.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them)
- /// \param locale Locale to use for conversion
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-16 characters range to wide characters
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToWide(In begin, In end, Out output, wchar_t replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToLatin1(In begin, In end, Out output, char replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-16 characters range to UTF-8
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf8(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-16 characters range to UTF-16
- ///
- /// This functions does nothing more than a direct copy;
- /// it is defined only to provide the same interface as other
- /// specializations of the sf::Utf<> template, and allow
- /// generic code to be written on top of it.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf16(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-16 characters range to UTF-32
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf32(In begin, In end, Out output);
- };
-
- ////////////////////////////////////////////////////////////
- /// \brief Specialization of the Utf template for UTF-32
- ///
- ////////////////////////////////////////////////////////////
- template <>
- class Utf<32>
- {
- public:
-
- ////////////////////////////////////////////////////////////
- /// \brief Decode a single UTF-32 character
- ///
- /// Decoding a character means finding its unique 32-bits
- /// code (called the codepoint) in the Unicode standard.
- /// For UTF-32, the character value is the same as the codepoint.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Codepoint of the decoded UTF-32 character
- /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static In Decode(In begin, In end, Uint32& output, Uint32 replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Encode a single UTF-32 character
- ///
- /// Encoding a character means converting a unique 32-bits
- /// code (called the codepoint) in the target encoding, UTF-32.
- /// For UTF-32, the codepoint is the same as the character value.
- ///
- /// \param input Codepoint to encode as UTF-32
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to UTF-32 (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename Out>
- static Out Encode(Uint32 input, Out output, Uint32 replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Advance to the next UTF-32 character
- ///
- /// This function is trivial for UTF-32, which can store
- /// every character in a single storage element.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static In Next(In begin, In end);
-
- ////////////////////////////////////////////////////////////
- /// \brief Count the number of characters of a UTF-32 sequence
- ///
- /// This function is trivial for UTF-32, which can store
- /// every character in a single storage element.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- ///
- /// \return Iterator pointing to one past the last read element of the input sequence
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static std::size_t Count(In begin, In end);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an ANSI characters range to UTF-32
- ///
- /// The current global locale will be used by default, unless you
- /// pass a custom one in the \a locale parameter.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param locale Locale to use for conversion
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a wide characters range to UTF-32
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromWide(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-32
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out FromLatin1(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-32 characters range to ANSI characters
- ///
- /// The current global locale will be used by default, unless you
- /// pass a custom one in the \a locale parameter.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them)
- /// \param locale Locale to use for conversion
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-32 characters range to wide characters
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToWide(In begin, In end, Out output, wchar_t replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToLatin1(In begin, In end, Out output, char replacement = 0);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-32 characters range to UTF-8
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf8(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-32 characters range to UTF-16
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf16(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Convert a UTF-32 characters range to UTF-32
- ///
- /// This functions does nothing more than a direct copy;
- /// it is defined only to provide the same interface as other
- /// specializations of the sf::Utf<> template, and allow
- /// generic code to be written on top of it.
- ///
- /// \param begin Iterator pointing to the beginning of the input sequence
- /// \param end Iterator pointing to the end of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename In, typename Out>
- static Out ToUtf32(In begin, In end, Out output);
-
- ////////////////////////////////////////////////////////////
- /// \brief Decode a single ANSI character to UTF-32
- ///
- /// This function does not exist in other specializations
- /// of sf::Utf<>, it is defined for convenience (it is used by
- /// several other conversion functions).
- ///
- /// \param input Input ANSI character
- /// \param locale Locale to use for conversion
- ///
- /// \return Converted character
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static Uint32 DecodeAnsi(In input, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Decode a single wide character to UTF-32
- ///
- /// This function does not exist in other specializations
- /// of sf::Utf<>, it is defined for convenience (it is used by
- /// several other conversion functions).
- ///
- /// \param input Input wide character
- ///
- /// \return Converted character
- ///
- ////////////////////////////////////////////////////////////
- template <typename In>
- static Uint32 DecodeWide(In input);
-
- ////////////////////////////////////////////////////////////
- /// \brief Encode a single UTF-32 character to ANSI
- ///
- /// This function does not exist in other specializations
- /// of sf::Utf<>, it is defined for convenience (it is used by
- /// several other conversion functions).
- ///
- /// \param codepoint Iterator pointing to the beginning of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement if the input character is not convertible to ANSI (use 0 to skip it)
- /// \param locale Locale to use for conversion
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename Out>
- static Out EncodeAnsi(Uint32 codepoint, Out output, char replacement = 0, const std::locale& locale = std::locale());
-
- ////////////////////////////////////////////////////////////
- /// \brief Encode a single UTF-32 character to wide
- ///
- /// This function does not exist in other specializations
- /// of sf::Utf<>, it is defined for convenience (it is used by
- /// several other conversion functions).
- ///
- /// \param codepoint Iterator pointing to the beginning of the input sequence
- /// \param output Iterator pointing to the beginning of the output sequence
- /// \param replacement Replacement if the input character is not convertible to wide (use 0 to skip it)
- ///
- /// \return Iterator to the end of the output sequence which has been written
- ///
- ////////////////////////////////////////////////////////////
- template <typename Out>
- static Out EncodeWide(Uint32 codepoint, Out output, wchar_t replacement = 0);
- };
-
-#include "Utf.inc"
-
- // Make typedefs to get rid of the template syntax
- typedef Utf<8> Utf8;
- typedef Utf<16> Utf16;
- typedef Utf<32> Utf32;
-
- } // namespace sf
-
-}
-
-
-#endif // SFML_UTF_HPP
diff --git a/Source/modules/asura-core/Font/Utf.inc b/Source/modules/asura-core/Font/Utf.inc
deleted file mode 100644
index 69a523b..0000000
--- a/Source/modules/asura-core/Font/Utf.inc
+++ /dev/null
@@ -1,752 +0,0 @@
-////////////////////////////////////////////////////////////
-//
-// SFML - Simple and Fast Multimedia Library
-// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org)
-//
-// This software is provided 'as-is', without any express or implied warranty.
-// In no event will the authors be held liable for any damages arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it freely,
-// subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented;
-// you must not claim that you wrote the original software.
-// If you use this software in a product, an acknowledgment
-// in the product documentation would be appreciated but is not required.
-//
-// 2. Altered source versions must be plainly marked as such,
-// and must not be misrepresented as being the original software.
-//
-// 3. This notice may not be removed or altered from any source distribution.
-//
-////////////////////////////////////////////////////////////
-
-
-////////////////////////////////////////////////////////////
-// References:
-//
-// https://www.unicode.org/
-// https://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c
-// https://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.h
-// https://people.w3.org/rishida/scripts/uniview/conversion
-//
-////////////////////////////////////////////////////////////
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-In Utf<8>::Decode(In begin, In end, Uint32& output, Uint32 replacement)
-{
- // Some useful precomputed data
- static const int trailing[256] =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5
- };
- static const Uint32 offsets[6] =
- {
- 0x00000000, 0x00003080, 0x000E2080, 0x03C82080, 0xFA082080, 0x82082080
- };
-
- // decode the character
- int trailingBytes = trailing[static_cast<Uint8>(*begin)];
- if (begin + trailingBytes < end)
- {
- output = 0;
- switch (trailingBytes)
- {
- case 5: output += static_cast<Uint8>(*begin++); output <<= 6;
- case 4: output += static_cast<Uint8>(*begin++); output <<= 6;
- case 3: output += static_cast<Uint8>(*begin++); output <<= 6;
- case 2: output += static_cast<Uint8>(*begin++); output <<= 6;
- case 1: output += static_cast<Uint8>(*begin++); output <<= 6;
- case 0: output += static_cast<Uint8>(*begin++);
- }
- output -= offsets[trailingBytes];
- }
- else
- {
- // Incomplete character
- begin = end;
- output = replacement;
- }
-
- return begin;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename Out>
-Out Utf<8>::Encode(Uint32 input, Out output, Uint8 replacement)
-{
- // Some useful precomputed data
- static const Uint8 firstBytes[7] =
- {
- 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC
- };
-
- // encode the character
- if ((input > 0x0010FFFF) || ((input >= 0xD800) && (input <= 0xDBFF)))
- {
- // Invalid character
- if (replacement)
- *output++ = replacement;
- }
- else
- {
- // Valid character
-
- // Get the number of bytes to write
- std::size_t bytestoWrite = 1;
- if (input < 0x80) bytestoWrite = 1;
- else if (input < 0x800) bytestoWrite = 2;
- else if (input < 0x10000) bytestoWrite = 3;
- else if (input <= 0x0010FFFF) bytestoWrite = 4;
-
- // Extract the bytes to write
- Uint8 bytes[4];
- switch (bytestoWrite)
- {
- case 4: bytes[3] = static_cast<Uint8>((input | 0x80) & 0xBF); input >>= 6;
- case 3: bytes[2] = static_cast<Uint8>((input | 0x80) & 0xBF); input >>= 6;
- case 2: bytes[1] = static_cast<Uint8>((input | 0x80) & 0xBF); input >>= 6;
- case 1: bytes[0] = static_cast<Uint8> (input | firstBytes[bytestoWrite]);
- }
-
- // Add them to the output
- output = std::copy(bytes, bytes + bytestoWrite, output);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-In Utf<8>::Next(In begin, In end)
-{
- Uint32 codepoint;
- return Decode(begin, end, codepoint);
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-std::size_t Utf<8>::Count(In begin, In end)
-{
- std::size_t length = 0;
- while (begin < end)
- {
- begin = Next(begin, end);
- ++length;
- }
-
- return length;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::FromAnsi(In begin, In end, Out output, const std::locale& locale)
-{
- while (begin < end)
- {
- Uint32 codepoint = Utf<32>::DecodeAnsi(*begin++, locale);
- output = Encode(codepoint, output);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::FromWide(In begin, In end, Out output)
-{
- while (begin < end)
- {
- Uint32 codepoint = Utf<32>::DecodeWide(*begin++);
- output = Encode(codepoint, output);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::FromLatin1(In begin, In end, Out output)
-{
- // Latin-1 is directly compatible with Unicode encodings,
- // and can thus be treated as (a sub-range of) UTF-32
- while (begin < end)
- output = Encode(*begin++, output);
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::ToAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- output = Utf<32>::EncodeAnsi(codepoint, output, replacement, locale);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::ToWide(In begin, In end, Out output, wchar_t replacement)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- output = Utf<32>::EncodeWide(codepoint, output, replacement);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::ToLatin1(In begin, In end, Out output, char replacement)
-{
- // Latin-1 is directly compatible with Unicode encodings,
- // and can thus be treated as (a sub-range of) UTF-32
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- *output++ = codepoint < 256 ? static_cast<char>(codepoint) : replacement;
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::ToUtf8(In begin, In end, Out output)
-{
- return std::copy(begin, end, output);
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::ToUtf16(In begin, In end, Out output)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- output = Utf<16>::Encode(codepoint, output);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<8>::ToUtf32(In begin, In end, Out output)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- *output++ = codepoint;
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-In Utf<16>::Decode(In begin, In end, Uint32& output, Uint32 replacement)
-{
- Uint16 first = *begin++;
-
- // If it's a surrogate pair, first convert to a single UTF-32 character
- if ((first >= 0xD800) && (first <= 0xDBFF))
- {
- if (begin < end)
- {
- Uint32 second = *begin++;
- if ((second >= 0xDC00) && (second <= 0xDFFF))
- {
- // The second element is valid: convert the two elements to a UTF-32 character
- output = ((first - 0xD800) << 10) + (second - 0xDC00) + 0x0010000;
- }
- else
- {
- // Invalid character
- output = replacement;
- }
- }
- else
- {
- // Invalid character
- begin = end;
- output = replacement;
- }
- }
- else
- {
- // We can make a direct copy
- output = first;
- }
-
- return begin;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename Out>
-Out Utf<16>::Encode(Uint32 input, Out output, Uint16 replacement)
-{
- if (input <= 0xFFFF)
- {
- // The character can be copied directly, we just need to check if it's in the valid range
- if ((input >= 0xD800) && (input <= 0xDFFF))
- {
- // Invalid character (this range is reserved)
- if (replacement)
- *output++ = replacement;
- }
- else
- {
- // Valid character directly convertible to a single UTF-16 character
- *output++ = static_cast<Uint16>(input);
- }
- }
- else if (input > 0x0010FFFF)
- {
- // Invalid character (greater than the maximum Unicode value)
- if (replacement)
- *output++ = replacement;
- }
- else
- {
- // The input character will be converted to two UTF-16 elements
- input -= 0x0010000;
- *output++ = static_cast<Uint16>((input >> 10) + 0xD800);
- *output++ = static_cast<Uint16>((input & 0x3FFUL) + 0xDC00);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-In Utf<16>::Next(In begin, In end)
-{
- Uint32 codepoint;
- return Decode(begin, end, codepoint);
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-std::size_t Utf<16>::Count(In begin, In end)
-{
- std::size_t length = 0;
- while (begin < end)
- {
- begin = Next(begin, end);
- ++length;
- }
-
- return length;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::FromAnsi(In begin, In end, Out output, const std::locale& locale)
-{
- while (begin < end)
- {
- Uint32 codepoint = Utf<32>::DecodeAnsi(*begin++, locale);
- output = Encode(codepoint, output);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::FromWide(In begin, In end, Out output)
-{
- while (begin < end)
- {
- Uint32 codepoint = Utf<32>::DecodeWide(*begin++);
- output = Encode(codepoint, output);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::FromLatin1(In begin, In end, Out output)
-{
- // Latin-1 is directly compatible with Unicode encodings,
- // and can thus be treated as (a sub-range of) UTF-32
- return std::copy(begin, end, output);
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::ToAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- output = Utf<32>::EncodeAnsi(codepoint, output, replacement, locale);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::ToWide(In begin, In end, Out output, wchar_t replacement)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- output = Utf<32>::EncodeWide(codepoint, output, replacement);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::ToLatin1(In begin, In end, Out output, char replacement)
-{
- // Latin-1 is directly compatible with Unicode encodings,
- // and can thus be treated as (a sub-range of) UTF-32
- while (begin < end)
- {
- *output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
- begin++;
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::ToUtf8(In begin, In end, Out output)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- output = Utf<8>::Encode(codepoint, output);
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::ToUtf16(In begin, In end, Out output)
-{
- return std::copy(begin, end, output);
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<16>::ToUtf32(In begin, In end, Out output)
-{
- while (begin < end)
- {
- Uint32 codepoint;
- begin = Decode(begin, end, codepoint);
- *output++ = codepoint;
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-In Utf<32>::Decode(In begin, In /*end*/, Uint32& output, Uint32 /*replacement*/)
-{
- output = *begin++;
- return begin;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename Out>
-Out Utf<32>::Encode(Uint32 input, Out output, Uint32 /*replacement*/)
-{
- *output++ = input;
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-In Utf<32>::Next(In begin, In /*end*/)
-{
- return ++begin;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-std::size_t Utf<32>::Count(In begin, In end)
-{
- return begin - end;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::FromAnsi(In begin, In end, Out output, const std::locale& locale)
-{
- while (begin < end)
- *output++ = DecodeAnsi(*begin++, locale);
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::FromWide(In begin, In end, Out output)
-{
- while (begin < end)
- *output++ = DecodeWide(*begin++);
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::FromLatin1(In begin, In end, Out output)
-{
- // Latin-1 is directly compatible with Unicode encodings,
- // and can thus be treated as (a sub-range of) UTF-32
- return std::copy(begin, end, output);
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::ToAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
-{
- while (begin < end)
- output = EncodeAnsi(*begin++, output, replacement, locale);
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::ToWide(In begin, In end, Out output, wchar_t replacement)
-{
- while (begin < end)
- output = EncodeWide(*begin++, output, replacement);
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::ToLatin1(In begin, In end, Out output, char replacement)
-{
- // Latin-1 is directly compatible with Unicode encodings,
- // and can thus be treated as (a sub-range of) UTF-32
- while (begin < end)
- {
- *output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
- begin++;
- }
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::ToUtf8(In begin, In end, Out output)
-{
- while (begin < end)
- output = Utf<8>::Encode(*begin++, output);
-
- return output;
-}
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::ToUtf16(In begin, In end, Out output)
-{
- while (begin < end)
- output = Utf<16>::Encode(*begin++, output);
-
- return output;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In, typename Out>
-Out Utf<32>::ToUtf32(In begin, In end, Out output)
-{
- return std::copy(begin, end, output);
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-Uint32 Utf<32>::DecodeAnsi(In input, const std::locale& locale)
-{
- // On Windows, GCC's standard library (glibc++) has almost
- // no support for Unicode stuff. As a consequence, in this
- // context we can only use the default locale and ignore
- // the one passed as parameter.
-
- #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \
- (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \
- !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */
-
- (void)locale; // to avoid warnings
-
- wchar_t character = 0;
- mbtowc(&character, &input, 1);
- return static_cast<Uint32>(character);
-
- #else
-
- // Get the facet of the locale which deals with character conversion
- const std::ctype<wchar_t>& facet = std::use_facet< std::ctype<wchar_t> >(locale);
-
- // Use the facet to convert each character of the input string
- return static_cast<Uint32>(facet.widen(input));
-
- #endif
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename In>
-Uint32 Utf<32>::DecodeWide(In input)
-{
- // The encoding of wide characters is not well defined and is left to the system;
- // however we can safely assume that it is UCS-2 on Windows and
- // UCS-4 on Unix systems.
- // In both cases, a simple copy is enough (UCS-2 is a subset of UCS-4,
- // and UCS-4 *is* UTF-32).
-
- return input;
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename Out>
-Out Utf<32>::EncodeAnsi(Uint32 codepoint, Out output, char replacement, const std::locale& locale)
-{
- // On Windows, gcc's standard library (glibc++) has almost
- // no support for Unicode stuff. As a consequence, in this
- // context we can only use the default locale and ignore
- // the one passed as parameter.
-
- #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \
- (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \
- !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */
-
- (void)locale; // to avoid warnings
-
- char character = 0;
- if (wctomb(&character, static_cast<wchar_t>(codepoint)) >= 0)
- *output++ = character;
- else if (replacement)
- *output++ = replacement;
-
- return output;
-
- #else
-
- // Get the facet of the locale which deals with character conversion
- const std::ctype<wchar_t>& facet = std::use_facet< std::ctype<wchar_t> >(locale);
-
- // Use the facet to convert each character of the input string
- *output++ = facet.narrow(static_cast<wchar_t>(codepoint), replacement);
-
- return output;
-
- #endif
-}
-
-
-////////////////////////////////////////////////////////////
-template <typename Out>
-Out Utf<32>::EncodeWide(Uint32 codepoint, Out output, wchar_t replacement)
-{
- // The encoding of wide characters is not well defined and is left to the system;
- // however we can safely assume that it is UCS-2 on Windows and
- // UCS-4 on Unix systems.
- // For UCS-2 we need to check if the source characters fits in (UCS-2 is a subset of UCS-4).
- // For UCS-4 we can do a direct copy (UCS-4 *is* UTF-32).
-
- switch (sizeof(wchar_t))
- {
- case 4:
- {
- *output++ = static_cast<wchar_t>(codepoint);
- break;
- }
-
- default:
- {
- if ((codepoint <= 0xFFFF) && ((codepoint < 0xD800) || (codepoint > 0xDFFF)))
- {
- *output++ = static_cast<wchar_t>(codepoint);
- }
- else if (replacement)
- {
- *output++ = replacement;
- }
- break;
- }
- }
-
- return output;
-}
diff --git a/Source/modules/asura-core/Graphics/DrawInfo.h b/Source/modules/asura-core/Graphics/DrawInfo.h
index 0082102..6167359 100644
--- a/Source/modules/asura-core/Graphics/DrawInfo.h
+++ b/Source/modules/asura-core/Graphics/DrawInfo.h
@@ -6,6 +6,14 @@
namespace_begin(AsuraEngine)
namespace_begin(Graphics)
+struct ShaderUniform;
+
+struct ShaderUniformSheet
+{
+
+
+};
+
///
struct DrawInfo
{
diff --git a/Source/modules/asura-core/Graphics/GPUBuffer.cpp b/Source/modules/asura-core/Graphics/GPUBuffer.cpp
index f28b914..ded4708 100644
--- a/Source/modules/asura-core/Graphics/GPUBuffer.cpp
+++ b/Source/modules/asura-core/Graphics/GPUBuffer.cpp
@@ -69,16 +69,16 @@ bool GPUBuffer::Fill(const void * data, size_t size, uint offset)
return false;
if (m_Buffer == 0)
{
- g_Device.WipeError();
+ g_GfxDevice.WipeError();
glGenBuffers(1, &m_Buffer);
if (m_Buffer == 0)
throw Exception("OpenGL glGenBuffers failed.");
glBindBuffer(m_Target, m_Buffer);
glBufferData(m_Target, m_Size, NULL, m_Usage);
- if (g_Device.HasError())
+ if (g_GfxDevice.HasError())
{
glBindBuffer(m_Target, 0);
- throw Exception("OpenGL glBufferData failed. Errorcode=%d.", g_Device.GetError());
+ throw Exception("OpenGL glBufferData failed. Errorcode=%d.", g_GfxDevice.GetError());
}
#if ASURA_DEBUG
m_Data = (byte*)malloc(size);
@@ -87,11 +87,12 @@ bool GPUBuffer::Fill(const void * data, size_t size, uint offset)
}
else
glBindBuffer(m_Target, m_Buffer);
- glBufferSubData(m_Target, offset, size, data);
- if (g_Device.HasError())
+ //glBufferSubData(m_Target, offset, size, data);
+ GL_CALL(glBufferSubData, m_Target, offset, size, data);
+ if (g_GfxDevice.HasError())
{
glBindBuffer(m_Target, 0);
- throw Exception("OpenGL glBufferSubData failed. Errorcode=%d.", g_Device.GetError());
+ throw Exception("OpenGL glBufferSubData failed. Errorcode=%d.", g_GfxDevice.GetError());
}
glBindBuffer(m_Target, 0);
#if ASURA_DEBUG
diff --git a/Source/modules/asura-core/Graphics/GfxDevice.cpp b/Source/modules/asura-core/Graphics/GfxDevice.cpp
index 529a76c..ab5e281 100644
--- a/Source/modules/asura-core/Graphics/GfxDevice.cpp
+++ b/Source/modules/asura-core/Graphics/GfxDevice.cpp
@@ -7,7 +7,7 @@
#include "MatrixStack.h"
#include "Color.h"
-using namespace AEMath;
+
namespace_begin(AsuraEngine)
namespace_begin(Graphics)
@@ -16,7 +16,13 @@ namespace_begin(Graphics)
static bool instantiated = false;
#endif
-GfxDevice g_Device;
+#if ASURA_GL_PROFILE
+#define Stats(f) m_Stats.f
+#else
+#define Stats(f)
+#endif
+
+GfxDevice g_GfxDevice;
GfxDevice::GfxDevice()
{
@@ -32,12 +38,12 @@ GfxDevice::~GfxDevice()
GfxDevice& GfxDevice::Get()
{
- return g_Device;
+ return g_GfxDevice;
}
static bool inited = false;
-bool GfxDevice::Init(const AEMath::Recti& view)
+bool GfxDevice::Init(const Recti& view)
{
bool loaded = false;
#if ASURA_OPENGL_LOADER & ASURA_OPENGL_GLAD
@@ -74,113 +80,101 @@ GLenum GfxDevice::GetError()
void GfxDevice::SetDrawColor(float r, float g, float b, float a)
{
- state.drawColor.Set(r, g, b, a);
+ m_State.drawColor.Set(r, g, b, a);
}
Color& GfxDevice::GetDrawColor()
{
- return state.drawColor;
+ return m_State.drawColor;
}
void GfxDevice::SetViewport(const Recti v)
{
- state.viewport = v;
+ m_State.viewport = v;
glViewport(v.x, v.y, v.w, v.h);
}
const Recti& GfxDevice::GetViewport()
{
- return state.viewport;
+ return m_State.viewport;
}
void GfxDevice::SetActiveShader(Shader* shader)
{
- if (state.shader == shader)
+ if (m_State.activeShader == shader)
return;
- if (state.shader)
- state.shader->OnDisable();
- state.shader = shader;
+ if (m_State.activeShader)
+ m_State.activeShader->OnDisable();
+ m_State.activeShader = shader;
if (shader)
{
GLint program = shader->GetGLProgram();
glUseProgram(program);
-#if ASURA_GL_PROFILE
- ++stats.shaderSwitch;
-#endif
shader->OnEnable();
+ Stats(AddShaderSwitch());
}
}
Shader* GfxDevice::GetActiveShader() const
{
- return state.shader;
-}
-
-void GfxDevice::DrawArrays(GLenum mode, GLint first, GLsizei count)
-{
- glDrawArrays(mode, first, count);
-#if ASURA_GL_PROFILE
- ++stats.drawCall;
-#endif
- if (state.shader)
- state.shader->OnUsed();
+ return m_State.activeShader;
}
void GfxDevice::PushMatrix ()
{
- state.matrix[state.matrixMode].Push ();
+ m_State.matrix[m_State.matrixMode].Push ();
}
void GfxDevice::PopMatrix ()
{
- state.matrix[state.matrixMode].Pop();
+ m_State.matrix[m_State.matrixMode].Pop();
}
void GfxDevice::LoadIdentity()
{
- state.matrix[state.matrixMode].LoadIdentity();
+ m_State.matrix[m_State.matrixMode].LoadIdentity();
}
void GfxDevice::Rotate (float angle)
{
- state.matrix[state.matrixMode].Rotate(angle);
+ m_State.matrix[m_State.matrixMode].Rotate(angle);
}
void GfxDevice::Translate (float x, float y)
{
- state.matrix[state.matrixMode].Translate(x, y);
+ m_State.matrix[m_State.matrixMode].Translate(x, y);
}
void GfxDevice::Scale (float x, float y)
{
- state.matrix[state.matrixMode].Scale(x, y);
+ m_State.matrix[m_State.matrixMode].Scale(x, y);
}
void GfxDevice::Ortho(float l, float r, float b, float t, float n, float f)
{
- state.matrix[state.matrixMode].Ortho(l, r, b, t, n, f);
+ m_State.matrix[m_State.matrixMode].Ortho(l, r, b, t, n, f);
}
-AEMath::Matrix44& GfxDevice::GetMatrix(MatrixMode mode)
+Matrix44& GfxDevice::GetMatrix(MatrixMode mode)
{
- return state.matrix[mode].GetTop();
+ return m_State.matrix[mode].GetTop();
}
-AEMath::Matrix44 GfxDevice::GetMVPMatrix()
+Matrix44 GfxDevice::GetMVPMatrix()
{
- return state.matrix[MATRIX_MODE_PROJECTION].GetTop()
- * state.matrix[MATRIX_MODE_VIEW].GetTop()
- * state.matrix[MATRIX_MODE_MODEL].GetTop();
+ return m_State.matrix[MATRIX_MODE_PROJECTION].GetTop()
+ * m_State.matrix[MATRIX_MODE_VIEW].GetTop()
+ * m_State.matrix[MATRIX_MODE_MODEL].GetTop();
}
uint GfxDevice::GetMatrixDepth()
{
- return state.matrix[state.matrixMode].GetCapacity();
+ return m_State.matrix[m_State.matrixMode].GetCapacity();
}
uint GfxDevice::GetMatrixIndex()
{
- return state.matrix[state.matrixMode].GetTopIndex();
+ return m_State.matrix[m_State.matrixMode].GetTopIndex();
}
diff --git a/Source/modules/asura-core/Graphics/GfxDevice.h b/Source/modules/asura-core/Graphics/GfxDevice.h
index 2b105df..7ef03a3 100644
--- a/Source/modules/asura-core/Graphics/GfxDevice.h
+++ b/Source/modules/asura-core/Graphics/GfxDevice.h
@@ -16,10 +16,40 @@
namespace_begin(AsuraEngine)
namespace_begin(Graphics)
+class Mesh;
class Profiler;
class Shader;
class GPUBuffer;
class Canvas;
+class DynamicVBO;
+class VBO;
+class VBOList;
+
+#define GFX_STATS_PROPERTY(TYPE,PROP_NAME,VAR_NAME) \
+private: \
+ TYPE VAR_NAME; \
+public: \
+ void Set##PROP_NAME (TYPE val) { VAR_NAME = val; } \
+ TYPE Get##PROP_NAME () {return VAR_NAME; } \
+ void Add##PROP_NAME (TYPE v=1) { VAR_NAME+=v;};
+
+struct GfxDeviceStats
+{
+ GFX_STATS_PROPERTY(uint, DrawCall, drawCall); ///< ͳdrawcall
+ GFX_STATS_PROPERTY(uint, CanvasSwitch, canvasSwitch); ///< лtextureĴ
+ GFX_STATS_PROPERTY(uint, ShaderSwitch, shaderSwitch); ///< лshaderĴ
+ GFX_STATS_PROPERTY(uint64, PrimsCount, primsCount); ///< ͼԪͳ
+
+ void Reset()
+ {
+ drawCall = 0;
+ canvasSwitch = 0;
+ shaderSwitch = 0;
+ primsCount = 0;
+ }
+};
+
+#undef GFX_STATS_PROPERTY
enum MatrixMode
{
@@ -28,6 +58,20 @@ enum MatrixMode
MATRIX_MODE_VIEW = 2,
};
+
+enum GfxPrimitiveType
+{
+ GFX_PRIMITIVE_TRIANGLES = 0,
+ GFX_PRIMITIVE_TRIANGLESTRIPDEPRECATED,
+ GFX_PRIMITIVE_QUADS,
+ GFX_PRIMITIVE_LINES,
+ GFX_PRIMITIVE_LINESTRIP,
+ GFX_PRIMITIVE_POINTS,
+
+ GFX_PRIMITIVE_TYPECOUNT, // KEEP THIS LAST!
+ GFX_PRIMITIVE_FORCE32BITINT = 0X7FFFFFFF // FORCE 32 BIT ENUM SIZE
+};
+
enum GLParams
{
GL_PARAM_MAX_TEXTURE_UNIT = 1,
@@ -44,12 +88,12 @@ public:
int GetParam(GLParams param);
- bool Init(const AEMath::Recti& viewport);
+ bool Init(const Recti& viewport);
bool Inited();
- void SetViewport(const AEMath::Recti viewport);
+ void SetViewport(const Recti viewport);
- const AEMath::Recti& GetViewport();
+ const Recti& GetViewport();
void PushMatrix();
void PopMatrix();
@@ -63,10 +107,8 @@ public:
uint GetMatrixDepth();
uint GetMatrixIndex();
- void DrawArrays(GLenum mode, GLint first, GLsizei count);
-
- AEMath::Matrix44& GetMatrix(MatrixMode mode);
- AEMath::Matrix44 GetMVPMatrix();
+ Matrix44& GetMatrix(MatrixMode mode);
+ Matrix44 GetMVPMatrix();
void SetDrawColor(float r, float g, float b, float a);
Color& GetDrawColor();
@@ -74,36 +116,47 @@ public:
void SetActiveShader(Shader* = NULL);
Shader* GetActiveShader() const;
+ VBO* CreateVBO();
+ void DeleteVBO();
+
+ void DrawMesh(Mesh* mesh);
+ void DrawVBO(VBO* vbo);
+ void DrawDynamicVBO();
+ void DrawTexture(Texture*);
+
void WipeError();
bool HasError();
GLenum GetError();
- GET_SET(MatrixMode, MatrixMode, state.matrixMode);
- GET_SET(Canvas*, ActiveCanvas, state.canvas);
+ GET_SET(MatrixMode, MatrixMode, m_State.matrixMode);
+ GET_SET(Canvas*, ActiveCanvas, m_State.activeCanvas);
private:
+ void BeforeDrawCall();
+
+ // Callbacks
+ void OnCreateVBO(VBO* vbo);
+ void OnDeleteVBO(VBO* vbo);
+
friend class Profiler;
- struct
- {
- AEMath::Recti viewport; ///< ǰлHDC߱ڴСı߲ˢʱ䶯
- MatrixStack matrix[3]; ///< model, view, projection
- MatrixMode matrixMode; ///< ǰľ
- Color drawColor; ///< Ƶɫ
- Canvas* canvas; ///< ǰcanvas
- Shader* shader; ///< ǰʹõshader
- } state;
+ struct {
+ Recti viewport; ///< ǰлHDC߱ڴСı߲ˢʱ䶯
+ MatrixStack matrix[3]; ///< model, view, projection
+ MatrixMode matrixMode; ///< ǰľ
+ Color drawColor; ///< Ƶɫ
+ Canvas* activeCanvas; ///< ǰcanvas
+ Shader* activeShader; ///< ǰʹõshader
+ } m_State;
#if ASURA_GL_PROFILE
- struct
- {
- uint drawCall; ///< ͳdrawcall
- uint canvasSwitch; ///< лtextureĴ
- uint shaderSwitch; ///< лshaderĴ
- } stats;
+ GfxDeviceStats m_Stats;
#endif
+ DynamicVBO* m_DynamicVBO;
+ VBOList* m_VBOList;
+
luaxport:
LUAX_DECL_SINGLETON(GfxDevice);
@@ -127,13 +180,12 @@ luaxport:
};
-extern GfxDevice g_Device;
-
-
-#define GL_CALL(x) do { x; /*GLAssert(); */} while(0)
-
+// ȫgfx devicerunnereditor
+extern GfxDevice g_GfxDevice;
+inline GfxDevice& GetGfxDevice() { return g_GfxDevice; };
+#define GL_CALL(f, ...) do { f(__VA_ARGS__); /*GLAssert(); */} while(0)
namespace_end
namespace_end
diff --git a/Source/modules/asura-core/Graphics/Image.cpp b/Source/modules/asura-core/Graphics/Image.cpp
deleted file mode 100644
index 36d2478..0000000
--- a/Source/modules/asura-core/Graphics/Image.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <asura-base/Exception.h>
-
-#include "../CoreConfig.h"
-
-#include "Shader.h"
-#include "Image.h"
-#include "GfxDevice.h"
-
-using namespace AEFileSystem;
-using namespace AEImage;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-Image::Image()
- : m_Width(0)
- , m_Height(0)
-{
-}
-
-Image::~Image()
-{
-}
-
-bool Image::Load(ImageData* imgData)
-{
- if (!imgData) return false;
-
- if (m_TexID == 0)
- {
- glGenTextures(1, &m_TexID);
- if (m_TexID == 0)
- throw Exception("OpenGL glGenTextures failed.");
- }
-
- glBindTexture(GL_TEXTURE_2D, m_TexID);
- imgData->Lock();
- int width = imgData->width;
- int height = imgData->height;
- TextureFormat tf = ConvertColorFormat(imgData->format);
- glTexImage2D(
- GL_TEXTURE_2D
- , 0
- , tf.internalformat
- , width, height
- , 0
- , tf.externalformat
- , tf.type
- , imgData->pixels
- );
-
- m_Width = imgData->width;
- m_Height = imgData->height;
- imgData->Unlock();
- GLenum err = glGetError();
- if (err != GL_NO_ERROR)
- throw Exception("OpenGL glTexImage2D cause error, error code=%d", err);
- glBindTexture(GL_TEXTURE_2D, 0);
-
- return true;
-}
-
-bool Image::Load(ImageData* imgData, const AEMath::Vector2i& pos)
-{
- if (!imgData) return false;
-
- glBindTexture(GL_TEXTURE_2D, m_TexID);
- imgData->Lock();
- int width = imgData->width;
- int height = imgData->height;
- TextureFormat tf = ConvertColorFormat(imgData->format);
- glTexSubImage2D(
- GL_TEXTURE_2D
- , 0
- , pos.x
- , pos.y
- , imgData->width
- , imgData->height
- , tf.externalformat
- , tf.type
- , imgData->pixels
- );
- imgData->Unlock();
- GLenum err = glGetError();
- if (err != GL_NO_ERROR)
- throw Exception("OpenGL glTexSubImage2D cause error, error code=%d", err);
- glBindTexture(GL_TEXTURE_2D, 0);
-
- return true;
-}
-
-uint32 Image::GetWidth()
-{
- return m_Width;
-}
-
-uint32 Image::GetHeight()
-{
- return m_Height;
-}
-
-namespace_end
-namespace_end \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/Image.h b/Source/modules/asura-core/Graphics/Image.h
deleted file mode 100644
index a76d06f..0000000
--- a/Source/modules/asura-core/Graphics/Image.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef _ASURA_ENGINE_IMAGE_H_
-#define _ASURA_ENGINE_IMAGE_H_
-
-// asura modules
-#include <asura-base/Math/Rect.hpp>
-#include <asura-base/Math/Vector2.hpp>
-#include <asura-base/Scripting/Scripting.h>
-#include <asura-base/FileSystem/Renewable.h>
-#include <asura-base/Utilities/Stringmap.hpp>
-#include <asura-base/Manager.hpp>
-
-// module
-#include "../Image/ImageData.h"
-
-// folder
-#include "Color.h"
-#include "Color32.h"
-#include "RenderState.h"
-#include "GPUBuffer.h"
-#include "Texture.h"
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-class Image ASURA_FINAL : public AEScripting::Portable<Image, Texture>
-{
-public:
-
- Image();
- ~Image();
-
- bool Load(AEImage::ImageData* decodeData);
- bool Load(AEImage::ImageData* decodeData, const AEMath::Vector2i& pos);
-
- uint GetWidth();
- uint GetHeight();
-
- GPUBuffer* GenGPUBuffer();
-
-private:
-
- uint32 m_Width, m_Height;
-
-luaxport:
-
- LUAX_DECL_FACTORY(Image, Texture);
-
- LUAX_DECL_METHOD(_New);
- LUAX_DECL_METHOD(_Load);
- LUAX_DECL_METHOD(_GetWidth);
- LUAX_DECL_METHOD(_GetHeight);
- LUAX_DECL_METHOD(_GetSize);
- LUAX_DECL_METHOD(_GetPixel);
- LUAX_DECL_METHOD(_Render);
-
-};
-
-namespace_end
-namespace_end
-
-namespace AEGraphics = AsuraEngine::Graphics;
-
-#endif \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/MatrixStack.cpp b/Source/modules/asura-core/Graphics/MatrixStack.cpp
index 987d29c..88b9b6b 100644
--- a/Source/modules/asura-core/Graphics/MatrixStack.cpp
+++ b/Source/modules/asura-core/Graphics/MatrixStack.cpp
@@ -36,7 +36,7 @@ bool MatrixStack::Pop()
return true;
}
-AEMath::Matrix44& MatrixStack::GetTop()
+Matrix44& MatrixStack::GetTop()
{
return m_Stack[top];
}
diff --git a/Source/modules/asura-core/Graphics/MatrixStack.h b/Source/modules/asura-core/Graphics/MatrixStack.h
index 8dd56bf..15ae7e5 100644
--- a/Source/modules/asura-core/Graphics/MatrixStack.h
+++ b/Source/modules/asura-core/Graphics/MatrixStack.h
@@ -8,17 +8,9 @@
namespace_begin(AsuraEngine)
namespace_begin(Graphics)
-///
-/// ջľȡ
-///
-#define ASURA_MAX_MATRIX_STACK_DEPTH 32 // 2KB
-
-///
-/// ջ״ָ̬֮ǰ״̬ջеһstack[i]ֵstack[0]*..*stack[i-1]
-/// ֵһϵtransform
-///
-/// TODO: template<uint _capacity> MatrixStack
-///
+// ջ״ָ̬֮ǰ״̬ջеһstack[i]ֵstack[0]*..*stack[i-1]ֵһϵtransform
+//
+// TODO: template<uint _capacity> MatrixStack
class MatrixStack
{
public:
@@ -30,11 +22,11 @@ public:
bool Push();
bool Pop();
- AEMath::Matrix44& GetTop();
- void GetTop(ASURA_OUT AEMath::Matrix44& mat44);
+ Matrix44& GetTop();
+ void GetTop(ASURA_OUT Matrix44& mat44);
- void LoadMatrix(const AEMath::Matrix44& mat44);
- void MultMatrix(const AEMath::Matrix44& mat44);
+ void LoadMatrix(const Matrix44& mat44);
+ void MultMatrix(const Matrix44& mat44);
void Rotate(float angle);
void Translate(float x, float y);
@@ -47,8 +39,8 @@ public:
private:
- AEMath::Matrix44 m_Stack[ASURA_MAX_MATRIX_STACK_DEPTH];
- uint8 top;
+ Matrix44 m_Stack[32]; // 2kB
+ uint8 m_Top;
};
diff --git a/Source/modules/asura-core/Graphics/RenderTarget.cpp b/Source/modules/asura-core/Graphics/Mesh.cpp
index e69de29..e69de29 100644
--- a/Source/modules/asura-core/Graphics/RenderTarget.cpp
+++ b/Source/modules/asura-core/Graphics/Mesh.cpp
diff --git a/Source/modules/asura-core/Graphics/VBO.cpp b/Source/modules/asura-core/Graphics/Mesh.h
index e69de29..e69de29 100644
--- a/Source/modules/asura-core/Graphics/VBO.cpp
+++ b/Source/modules/asura-core/Graphics/Mesh.h
diff --git a/Source/modules/asura-core/Graphics/Mesh2D.h b/Source/modules/asura-core/Graphics/Mesh2D.h
deleted file mode 100644
index 7a0f62e..0000000
--- a/Source/modules/asura-core/Graphics/Mesh2D.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef _ASURA_ENGINE_MESH2D_H__
-#define _ASURA_ENGINE_MESH2D_H__
-
-// cpp
-#include <vector>
-
-// asura modules
-#include <asura-base/Scripting/Scripting.h>
-#include <asura-base/Math/Vector2.hpp>
-
-// module
-#include "../Mesh/Mesh2dData.h"
-
-// folder
-#include "Color.h"
-#include "VertexBuffer.h"
-#include "IndexBuffer.h"
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-///
-/// 2D meshһЩ㶯
-/// https://en.wikipedia.org/wiki/Polygon_mesh
-///
-class Mesh2D ASURA_FINAL
- : public Scripting::Portable<Mesh2D>
-{
-public:
-
- Mesh2D();
- ~Mesh2D();
-
- bool Load(AEMesh::Mesh2DData* data);
-
-private:
-
- VertexBuffer* m_VBO; ///< vertex buffer
- IndexBuffer* m_IBO; ///< index buffer
-
-luaxport:
-
- LUAX_DECL_FACTORY(Mesh2D);
-
- LUAX_DECL_METHOD(_SetVertex);
-
-};
-
-namespace_end
-namespace_end
-
-#endif \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/RenderTarget.h b/Source/modules/asura-core/Graphics/RenderTarget.h
deleted file mode 100644
index ab09e35..0000000
--- a/Source/modules/asura-core/Graphics/RenderTarget.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef _ASURA_ENGINE_RENDERTARGET_H_
-#define _ASURA_ENGINE_RENDERTARGET_H_
-
-#include <asura-base/Math/Vector2.hpp>
-#include <asura-base/Math/Rect.hpp>
-#include <asura-base/Scripting/Scripting.h>
-
-#include "Texture.h"
-#include "Color.h"
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-///
-/// ɱΪȾĿ࣬
-/// Canvas(RenderTexture)
-/// Window(RenderWindow)
-///
-class RenderTarget : public AEScripting::Object
-{
-public:
-
- RenderTarget() {};
-
- virtual ~RenderTarget() {};
-
- ///
- /// ɫcolRT
- ///
- virtual void Clear(const Color& col = Color::Black) = 0;
-
- ///
- /// ɫcolղRT
- ///
- virtual void Clear(const Math::Recti& quad, const Color& col = Color::Black) = 0;
-
- ///
- /// textureRT
- ///
- virtual void Draw(const Drawable* texture, const RenderState& state) = 0;
-
- ///
- /// һtextureRT
- ///
- virtual void Draw(const Drawable* texture, const Math::Recti& quad, const RenderState& state) = 0;
-
-};
-
-namespace_end
-namespace_end
-
-#endif \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/RenderTexture.cpp b/Source/modules/asura-core/Graphics/RenderTexture.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Source/modules/asura-core/Graphics/RenderTexture.cpp
diff --git a/Source/modules/asura-core/Graphics/RenderTexture.h b/Source/modules/asura-core/Graphics/RenderTexture.h
new file mode 100644
index 0000000..08199bf
--- /dev/null
+++ b/Source/modules/asura-core/Graphics/RenderTexture.h
@@ -0,0 +1,22 @@
+#ifndef _ASURA_ENGINE_RENDERTARGET_H_
+#define _ASURA_ENGINE_RENDERTARGET_H_
+
+#include <asura-base/Math/Vector2.hpp>
+#include <asura-base/Math/Rect.hpp>
+#include <asura-base/Scripting/Scripting.h>
+
+#include "Texture.h"
+#include "Color.h"
+
+namespace_begin(AsuraEngine)
+namespace_begin(Graphics)
+
+class RenderTexture : public Texture
+{
+
+};
+
+namespace_end
+namespace_end
+
+#endif \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/Shader.cpp b/Source/modules/asura-core/Graphics/Shader.cpp
index 329b3f1..56d638d 100644
--- a/Source/modules/asura-core/Graphics/Shader.cpp
+++ b/Source/modules/asura-core/Graphics/Shader.cpp
@@ -24,12 +24,12 @@ Shader::~Shader()
void Shader::SetActive(Shader* shader)
{
- g_Device.SetActiveShader(shader);
+ g_GfxDevice.SetActiveShader(shader);
}
Shader* Shader::GetActive()
{
- return g_Device.GetActiveShader();
+ return g_GfxDevice.GetActiveShader();
}
bool Shader::Load(const string& vert, const string& frag)
@@ -157,56 +157,56 @@ GLuint Shader::GetGLProgram()
void Shader::SetUniformFloat(uint loc, float value)
{
- if(g_Device.GetActiveShader() == this)
+ if(g_GfxDevice.GetActiveShader() == this)
glUniform1f(loc, value);
}
bool Shader::SetUniformTexture(uint loc, const Texture& texture)
{
- if (g_Device.GetActiveShader() != this)
+ if (g_GfxDevice.GetActiveShader() != this)
return false;
- g_Device.WipeError();
+ g_GfxDevice.WipeError();
glActiveTexture(GL_TEXTURE0 + texUnit);
- if (g_Device.HasError())
+ if (g_GfxDevice.HasError())
return false;
GLint tex = texture.GetGLTexture();
glBindTexture(GL_TEXTURE_2D, tex);
- if (g_Device.HasError())
+ if (g_GfxDevice.HasError())
return false;
glUniform1i(loc, texUnit);
- if (g_Device.HasError())
+ if (g_GfxDevice.HasError())
return false;
++texUnit;
}
void Shader::SetUniformVector2(uint loc, const Math::Vector2f& vec2)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform2f(loc, vec2.x, vec2.y);
}
void Shader::SetUniformVector3(uint loc, const Math::Vector3f& vec3)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform3f(loc, vec3.x, vec3.y, vec3.z);
}
void Shader::SetUniformVector4(uint loc, const Math::Vector4f& vec4)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform4f(loc, vec4.x, vec4.y, vec4.z, vec4.w);
}
void Shader::SetUniformMatrix44(uint loc, const Math::Matrix44& mat)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniformMatrix4fv(loc, 1, GL_FALSE, mat.GetElements());
}
void Shader::SetUniformColor(uint loc, const Color& color)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform4f(loc, color.r, color.g, color.b, color.a);
}
diff --git a/Source/modules/asura-core/Graphics/Shader.h b/Source/modules/asura-core/Graphics/Shader.h
index 615b028..6d7ef90 100644
--- a/Source/modules/asura-core/Graphics/Shader.h
+++ b/Source/modules/asura-core/Graphics/Shader.h
@@ -3,6 +3,7 @@
#include <map>
#include <string>
+#include <vector>
#include <asura-base/Exception.h>
#include <asura-base/Scripting/Scripting.h>
@@ -23,10 +24,21 @@
namespace_begin(AsuraEngine)
namespace_begin(Graphics)
+enum ShaderChannel
+{
+ SHADER_CHANNEL_NONE = -1,
+ SHADER_CHANNEL_VERTEX = 0, // Vertex (vector3)
+ SHADER_CHANNEL_NORMAL, // Normal (vector3)
+ SHADER_CHANNEL_COLOR, // Vertex color
+ SHADER_CHANNEL_TEXCOORD0, // UV set 0 (vector2)
+ SHADER_CHANNEL_TEXCOORD1, // UV set 1 (vector2)
+ SHADER_CHANNEL_TANGENT, // Tangent (vector4)
+ SHADER_CHANNEL_COUNT, // Keep this last!
+};
+
///
-/// һshaderһڲʼ乲ijShaderuniformsͶݣֻṩ uniformsuseɫ
-/// ķ༭ÿshaderͨshaderҵuniforms¶frameworkmaterial
-/// á
+/// һshaderһڲʼ乲ijShaderuniformsͶݣֻṩ uniformsuseɫķ
+/// ༭ÿshaderͨshaderҵuniforms¶frameworkmaterialá
///
class Shader ASURA_FINAL
: public Scripting::Portable<Shader>
@@ -64,10 +76,10 @@ public:
bool SetUniformTexture(uint loc, const Texture& texture);
float GetUniformFloat(uint loc);
- AEMath::Vector2f GetUniformVector2(uint loc);
- AEMath::Vector3f GetUniformVector3(uint loc);
- AEMath::Vector4f GetUniformVector4s(uint loc);
- AEMath::Matrix44 GetUniformMatrix44(uint loc);
+ Vector2f GetUniformVector2(uint loc);
+ Vector3f GetUniformVector3(uint loc);
+ Vector4f GetUniformVector4s(uint loc);
+ Matrix44 GetUniformMatrix44(uint loc);
GLuint GetGLProgram();
@@ -109,6 +121,7 @@ luaxport:
};
+// GPU program
typedef Shader GpuProgram;
namespace_end
diff --git a/Source/modules/asura-core/Graphics/Texture.h b/Source/modules/asura-core/Graphics/Texture.h
index 76b9a8f..572fad4 100644
--- a/Source/modules/asura-core/Graphics/Texture.h
+++ b/Source/modules/asura-core/Graphics/Texture.h
@@ -3,6 +3,7 @@
#include <asura-base/Math/Vector2.hpp>
#include <asura-base/Math/Rect.hpp>
+#include <asura-base/Type.h>
#include "../CoreConfig.h"
@@ -14,6 +15,17 @@ namespace_begin(Graphics)
class RenderTarget;
+/// ͼƬ
+class ImageData
+{
+public:
+ uint8* GetData();
+private:
+ int m_Format;
+ uint8* m_ImageData;
+ Vector2i m_ImageSize;
+};
+
/// UVʽ
enum WrapMode
{
@@ -34,8 +46,8 @@ enum FilterMode
enum ColorFormat
{
COLOR_FORMAT_UNKNOWN,
- COLOR_FORMAT_RGBA8, ///< RGBA8bits int
- COLOR_FORMAT_RGBA32F, ///< RGBA32bits float
+ COLOR_FORMAT_RGBA8,
+ COLOR_FORMAT_RGBA32F,
};
/// ʽGPUڲCPUⲿʽ
@@ -50,11 +62,14 @@ struct TextureFormat
/// 2D࣬2d meshrender targetбʹáTextureȾԭϽǣϷϲԵѿ
/// ϵΪ׼EditorҲϽΪԭ㣬Ϊ˷㡣
///
-ASURA_ABSTRACT class Texture : public AEScripting::Object
+class Texture : public AEScripting::Object
{
public:
- LUAX_DECL_ABSTRACT_FACTORY(Texture);
+ LUAX_DECL_FACTORY(Texture);
+
+ // Texture generator
+ static Texture* GenerateTexture();
Texture();
virtual ~Texture();
@@ -67,9 +82,12 @@ public:
void GetFilterMode();
void GetWrapMode();
- /// UVfilterΪ
bool IsGenMipmap();
+ int GetWidth();
+ int GetHeight();
+ Vector2i GetSize();
+
protected:
/// תcolor formatΪtexture format
@@ -79,7 +97,12 @@ protected:
FilterMode m_MinFilter;
FilterMode m_MagFilter;
WrapMode m_WrapMode;
+ int m_UsageMode;
bool m_IsGenMipmap;
+ Vector2f m_TexelSize;
+ Vector2f m_UVScale;
+
+luaxport:
LUAX_DECL_ENUM(ColorFormat, 1);
LUAX_DECL_ENUM(FilterMode, 1);
@@ -90,11 +113,12 @@ protected:
LUAX_DECL_METHOD(_GetFilterMode);
LUAX_DECL_METHOD(_GetWrapMode);
LUAX_DECL_METHOD(_IsGenMipmap);
+ LUAX_DECL_METHOD(_GetWidth);
+ LUAX_DECL_METHOD(_GetHeight);
+ LUAX_DECL_METHOD(_GetSize);
};
-typedef Texture Drawable;
-
namespace_end
namespace_end
diff --git a/Source/modules/asura-core/Graphics/VBO.h b/Source/modules/asura-core/Graphics/VBO.h
deleted file mode 100644
index f80991e..0000000
--- a/Source/modules/asura-core/Graphics/VBO.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _ASURA_ENGINE_VBO_H_
-#define _ASURA_ENGINE_VBO_H_
-
-#include <asura-base/Classes.h>
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-struct VertexBufferData
-{
-
-};
-
-struct IndexBufferData
-{
-
-};
-
-class VBO
-{
-
-};
-
-namespace_end
-namespace_end
-
-#endif \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/VBOs.cpp b/Source/modules/asura-core/Graphics/VBOs.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Source/modules/asura-core/Graphics/VBOs.cpp
diff --git a/Source/modules/asura-core/Graphics/VBOs.h b/Source/modules/asura-core/Graphics/VBOs.h
new file mode 100644
index 0000000..0833534
--- /dev/null
+++ b/Source/modules/asura-core/Graphics/VBOs.h
@@ -0,0 +1,56 @@
+#ifndef _ASURA_ENGINE_VBO_H_
+#define _ASURA_ENGINE_VBO_H_
+
+#include <asura-base/Classes.h>
+#include <asura-base/Type.h>
+
+namespace_begin(AsuraEngine)
+namespace_begin(Graphics)
+
+struct VertexBufferData
+{
+
+};
+
+struct IndexBufferData
+{
+
+};
+
+class VBO
+{
+public:
+
+private:
+
+
+
+};
+
+class SharedVBO;
+
+class DynamicVBO
+{
+public:
+
+ void GetChunk(uint32 maxVertices, uint32 maxIndices, void** outVB, void** outIB);
+ void ReleaseChunk(uint32 actualVertices, uint32 actualIndices);
+
+private:
+
+ // vertex buffer
+ SharedVBO* m_VB;
+ SharedVBO* m_LargeVB;
+ SharedVBO* m_ActiveVB;
+
+ // index buffer
+ SharedVBO* m_IB;
+ SharedVBO* m_LargeIB;
+ SharedVBO* m_ActiveIB;
+
+};
+
+namespace_end
+namespace_end
+
+#endif \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/binding/Canvas.binding.cpp b/Source/modules/asura-core/Graphics/binding/Canvas.binding.cpp
new file mode 100644
index 0000000..a038e67
--- /dev/null
+++ b/Source/modules/asura-core/Graphics/binding/Canvas.binding.cpp
@@ -0,0 +1,48 @@
+#include "../Canvas.h"
+
+using namespace std;
+
+namespace_begin(AsuraEngine)
+namespace_begin(Graphics)
+
+
+LUAX_REGISTRY(Canvas)
+{
+ LUAX_REGISTER_METHODS(state,
+ { "SetSize", _SetSize },
+ { "Bind", _Bind },
+ { "Unbind", _Unbind }
+ );
+}
+
+LUAX_POSTPROCESS(Canvas)
+{
+
+}
+
+// canvas:SetSize()
+LUAX_IMPL_METHOD(Canvas, _SetSize)
+{
+ LUAX_PREPARE(L, Canvas);
+ return 0;
+
+}
+
+// canvas:Bind()
+LUAX_IMPL_METHOD(Canvas, _Bind)
+{
+ LUAX_PREPARE(L, Canvas);
+
+ return 0;
+}
+
+// canvas:Unbind()
+LUAX_IMPL_METHOD(Canvas, _Unbind)
+{
+ LUAX_PREPARE(L, Canvas);
+ return 0;
+
+}
+
+namespace_end
+namespace_end \ No newline at end of file
diff --git a/Source/modules/asura-core/Graphics/binding/_color.cpp b/Source/modules/asura-core/Graphics/binding/Color.binding.cpp
index 008d9c2..008d9c2 100644
--- a/Source/modules/asura-core/Graphics/binding/_color.cpp
+++ b/Source/modules/asura-core/Graphics/binding/Color.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_color32.cpp b/Source/modules/asura-core/Graphics/binding/Color32.binding.cpp
index 7613361..7613361 100644
--- a/Source/modules/asura-core/Graphics/binding/_color32.cpp
+++ b/Source/modules/asura-core/Graphics/binding/Color32.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_gpu_buffer.cpp b/Source/modules/asura-core/Graphics/binding/GPUBuffer.binding.cpp
index 8c39a59..8c39a59 100644
--- a/Source/modules/asura-core/Graphics/binding/_gpu_buffer.cpp
+++ b/Source/modules/asura-core/Graphics/binding/GPUBuffer.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_gfx_device.cpp b/Source/modules/asura-core/Graphics/binding/GfxDevice.binding.cpp
index f6c2004..f6c2004 100644
--- a/Source/modules/asura-core/Graphics/binding/_gfx_device.cpp
+++ b/Source/modules/asura-core/Graphics/binding/GfxDevice.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/Image.binding.cpp b/Source/modules/asura-core/Graphics/binding/Image.binding.cpp
new file mode 100644
index 0000000..94f88b8
--- /dev/null
+++ b/Source/modules/asura-core/Graphics/binding/Image.binding.cpp
@@ -0,0 +1,71 @@
+#include "../image.h"
+
+using namespace std;
+
+namespace_begin(AsuraEngine)
+namespace_begin(Graphics)
+
+
+LUAX_REGISTRY(Image)
+{
+ LUAX_INHERIT(state, Texture);
+
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New },
+ { "GetWidth", _GetWidth },
+ { "GetHeight", _GetHeight },
+ { "GetSize", _GetSize },
+ { "Render", _Render }
+ );
+}
+
+LUAX_POSTPROCESS(Image)
+{
+}
+
+// image = Image.New()
+LUAX_IMPL_METHOD(Image, _New)
+{
+ LUAX_STATE(L);
+ Image* img = new Image();
+ img->PushLuaxUserdata(state);
+ return 1;
+}
+
+// width = image:GetWidth()
+LUAX_IMPL_METHOD(Image, _GetWidth)
+{
+ LUAX_PREPARE(L, Image);
+ state.Push(self->GetWidth());
+ return 1;
+}
+
+// height = image:GetHeight()
+LUAX_IMPL_METHOD(Image, _GetHeight)
+{
+ LUAX_PREPARE(L, Image);
+ state.Push(self->GetHeight());
+ return 1;
+}
+
+// width, height = image:GetSize()
+LUAX_IMPL_METHOD(Image, _GetSize)
+{
+ LUAX_PREPARE(L, Image);
+ int width = self->GetWidth();
+ int height = self->GetHeight();
+ state.Push(width);
+ state.Push(height);
+ return 2;
+}
+
+// image:Render()
+LUAX_IMPL_METHOD(Image, _Render)
+{
+ LUAX_PREPARE(L, Image);
+
+ return 0;
+}
+
+}
+}
diff --git a/Source/modules/asura-core/Graphics/binding/_index_buffer.cpp b/Source/modules/asura-core/Graphics/binding/IndexBuffer.binding.cpp
index 151dc98..151dc98 100644
--- a/Source/modules/asura-core/Graphics/binding/_index_buffer.cpp
+++ b/Source/modules/asura-core/Graphics/binding/IndexBuffer.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_mesh2d.cpp b/Source/modules/asura-core/Graphics/binding/Mesh.binding.cpp
index 4e3f426..4e3f426 100644
--- a/Source/modules/asura-core/Graphics/binding/_mesh2d.cpp
+++ b/Source/modules/asura-core/Graphics/binding/Mesh.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_shader.cpp b/Source/modules/asura-core/Graphics/binding/Shader.binding.cpp
index 85fd388..85fd388 100644
--- a/Source/modules/asura-core/Graphics/binding/_shader.cpp
+++ b/Source/modules/asura-core/Graphics/binding/Shader.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_sprite_batch.cpp b/Source/modules/asura-core/Graphics/binding/SpriteBatch.binding.cpp
index 6b7d25c..6b7d25c 100644
--- a/Source/modules/asura-core/Graphics/binding/_sprite_batch.cpp
+++ b/Source/modules/asura-core/Graphics/binding/SpriteBatch.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_texture.cpp b/Source/modules/asura-core/Graphics/binding/Texture.binding.cpp
index f5e5f17..f5e5f17 100644
--- a/Source/modules/asura-core/Graphics/binding/_texture.cpp
+++ b/Source/modules/asura-core/Graphics/binding/Texture.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_vertex_buffer.cpp b/Source/modules/asura-core/Graphics/binding/VertexBuffer.binding.cpp
index 8ed487b..8ed487b 100644
--- a/Source/modules/asura-core/Graphics/binding/_vertex_buffer.cpp
+++ b/Source/modules/asura-core/Graphics/binding/VertexBuffer.binding.cpp
diff --git a/Source/modules/asura-core/Graphics/binding/_canvas.cpp b/Source/modules/asura-core/Graphics/binding/_canvas.cpp
deleted file mode 100644
index 44841f5..0000000
--- a/Source/modules/asura-core/Graphics/binding/_canvas.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "../Canvas.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Canvas)
- {
- LUAX_REGISTER_METHODS(state,
- { "SetSize", _SetSize },
- { "Bind", _Bind },
- { "Unbind", _Unbind }
- );
- }
-
- LUAX_POSTPROCESS(Canvas)
- {
-
- }
-
- // canvas:SetSize()
- LUAX_IMPL_METHOD(Canvas, _SetSize)
- {
- LUAX_PREPARE(L, Canvas);
- return 0;
-
- }
-
- // canvas:Bind()
- LUAX_IMPL_METHOD(Canvas, _Bind)
- {
- LUAX_PREPARE(L, Canvas);
-
- return 0;
- }
-
- // canvas:Unbind()
- LUAX_IMPL_METHOD(Canvas, _Unbind)
- {
- LUAX_PREPARE(L, Canvas);
- return 0;
-
- }
-
- }
-}
diff --git a/Source/modules/asura-core/Graphics/binding/_image.cpp b/Source/modules/asura-core/Graphics/binding/_image.cpp
deleted file mode 100644
index 0e4cb16..0000000
--- a/Source/modules/asura-core/Graphics/binding/_image.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-#include "../image.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Image)
- {
- LUAX_INHERIT(state, Texture);
-
- LUAX_REGISTER_METHODS(state,
- { "New", _New },
- { "GetWidth", _GetWidth },
- { "GetHeight", _GetHeight },
- { "GetSize", _GetSize },
- { "Render", _Render }
- );
- }
-
- LUAX_POSTPROCESS(Image)
- {
- }
-
- // image = Image.New()
- LUAX_IMPL_METHOD(Image, _New)
- {
- LUAX_STATE(L);
- Image* img = new Image();
- img->PushLuaxUserdata(state);
- return 1;
- }
-
- // width = image:GetWidth()
- LUAX_IMPL_METHOD(Image, _GetWidth)
- {
- LUAX_PREPARE(L, Image);
- state.Push(self->GetWidth());
- return 1;
- }
-
- // height = image:GetHeight()
- LUAX_IMPL_METHOD(Image, _GetHeight)
- {
- LUAX_PREPARE(L, Image);
- state.Push(self->GetHeight());
- return 1;
- }
-
- // width, height = image:GetSize()
- LUAX_IMPL_METHOD(Image, _GetSize)
- {
- LUAX_PREPARE(L, Image);
- int width = self->GetWidth();
- int height = self->GetHeight();
- state.Push(width);
- state.Push(height);
- return 2;
- }
-
- // image:Render()
- LUAX_IMPL_METHOD(Image, _Render)
- {
- LUAX_PREPARE(L, Image);
-
- return 0;
- }
-
- }
-}
diff --git a/Source/modules/asura-core/Input/InputDevice.h b/Source/modules/asura-core/Input/InputDevice.h
index 2b3ff9b..42dfe43 100644
--- a/Source/modules/asura-core/Input/InputDevice.h
+++ b/Source/modules/asura-core/Input/InputDevice.h
@@ -16,6 +16,7 @@
namespace_begin(AsuraEngine)
namespace_begin(Input)
+// Ӳϵͳ
class InputDevice ASURA_FINAL
{
public:
@@ -35,7 +36,7 @@ public:
LRESULT OnInput(HWND window, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT OnDeviceChange(LPCWSTR name, bool add);
- static bool ConvertPositionToClientAreaCoord(HWND activeWindow, POINT position, AEMath::Vector2f& newPos);
+ static bool ConvertPositionToClientAreaCoord(HWND activeWindow, POINT position, Vector2f& newPos);
#elif ASURA_RUNNER
@@ -52,7 +53,7 @@ protected:
bool UpdateState();
- MouseState m_Mouse;
+ MouseState m_Mouse;
KeyboardState m_Keyboard;
JoystickState m_Joysticks;
diff --git a/Source/modules/asura-core/Input/InputEvent.h b/Source/modules/asura-core/Input/InputEvent.h
index c643b75..fc7b9f6 100644
--- a/Source/modules/asura-core/Input/InputEvent.h
+++ b/Source/modules/asura-core/Input/InputEvent.h
@@ -32,7 +32,7 @@ struct InputEvent
LRESULT OnInput(HWND window, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT OnDeviceChange(LPCWSTR name, bool add);
- static bool ConvertPositionToClientAreaCoord(HWND activeWindow, POINT position, AEMath::Vector2f& newPos);
+ static bool ConvertPositionToClientAreaCoord(HWND activeWindow, POINT position, Vector2f& newPos);
#elif ASURA_RUNNER
diff --git a/Source/modules/asura-core/Input/InputManager.cpp b/Source/modules/asura-core/Input/InputManager.cpp
index cec1b36..03200f5 100644
--- a/Source/modules/asura-core/Input/InputManager.cpp
+++ b/Source/modules/asura-core/Input/InputManager.cpp
@@ -82,12 +82,12 @@ bool InputManager::GetKeyUp(int key)
}
-const AEMath::Vector2f& InputManager::GetMouseDelta()
+const Vector2f& InputManager::GetMouseDelta()
{
return m_MouseDelta;
}
-const AEMath::Vector2f& InputManager::GetMousePosition()
+const Vector2f& InputManager::GetMousePosition()
{
return m_MousePos;
}
@@ -114,11 +114,11 @@ void InputManager::SetKeyState(int key, bool state)
m_CurrentKeyState[key] = state;
}
-void InputManager::SetMouseDelta(const AEMath::Vector2f& delta)
+void InputManager::SetMouseDelta(const Vector2f& delta)
{
}
-void InputManager::SetMousePosition(const AEMath::Vector2f& pos)
+void InputManager::SetMousePosition(const Vector2f& pos)
{
}
diff --git a/Source/modules/asura-core/Input/InputManager.h b/Source/modules/asura-core/Input/InputManager.h
index 3c44745..4071b66 100644
--- a/Source/modules/asura-core/Input/InputManager.h
+++ b/Source/modules/asura-core/Input/InputManager.h
@@ -40,15 +40,15 @@ public:
bool GetKeyDown(int key);
bool GetKeyUp(int key);
- const AEMath::Vector2f& GetMouseDelta();
- const AEMath::Vector2f& GetMousePosition();
+ const Vector2f& GetMouseDelta();
+ const Vector2f& GetMousePosition();
float GetJoystickPosition();
void setJoystickPosition();
void SetKeyState(int key, bool state);
- void SetMouseDelta(const AEMath::Vector2f& delta);
- void SetMousePosition(const AEMath::Vector2f& pos);
+ void SetMouseDelta(const Vector2f& delta);
+ void SetMousePosition(const Vector2f& pos);
void SetMouseButton(int button, bool enabled);
void ProcessInput();
@@ -62,8 +62,8 @@ private:
std::vector<InputAxis> m_Axis;
- AEMath::Vector2f m_MouseDelta;
- AEMath::Vector2f m_MousePos;
+ Vector2f m_MouseDelta;
+ Vector2f m_MousePos;
bool m_MousePresent;
@@ -72,7 +72,7 @@ private:
std::string m_InputString;
std::string m_CompositionString;
- AEMath::Vector2f m_TextFieldCursorPos;
+ Vector2f m_TextFieldCursorPos;
bool m_TextFieldInput;
bool m_EatKeyPressOnTextFieldFocus;
diff --git a/Source/modules/asura-core/Mesh/Mesh2DData.h b/Source/modules/asura-core/Mesh/Mesh2DData.h
index 3e30a06..f041e05 100644
--- a/Source/modules/asura-core/Mesh/Mesh2DData.h
+++ b/Source/modules/asura-core/Mesh/Mesh2DData.h
@@ -21,9 +21,9 @@ namespace_begin(Mesh)
///
struct Vertex
{
- AEMath::Vector2f position; ///<
+ Vector2f position; ///<
AEGraphics::Color color; ///< ɫ
- AEMath::Vector2f texCoord[4]; ///< UVs
+ Vector2f texCoord[4]; ///< UVs
};
///
diff --git a/Source/modules/asura-json/Json/JsonData.cpp b/Source/modules/asura-json/Json/JsonData.cpp
new file mode 100644
index 0000000..57ba705
--- /dev/null
+++ b/Source/modules/asura-json/Json/JsonData.cpp
@@ -0,0 +1,9 @@
+#include "JsonData.h"
+
+
+namespace_begin(AsuraEngine)
+namespace_begin(Json)
+
+
+namespace_end
+namespace_end
diff --git a/Source/modules/asura-json/Json/JsonData.h b/Source/modules/asura-json/Json/JsonData.h
new file mode 100644
index 0000000..2ae2798
--- /dev/null
+++ b/Source/modules/asura-json/Json/JsonData.h
@@ -0,0 +1,17 @@
+#ifndef _ASURA_JSON_H_
+#define _ASURA_JSON_H_
+
+#include <asura-base/Classes.h>
+
+namespace_begin(AsuraEngine)
+namespace_begin(Json)
+
+class JsonData
+{
+
+};
+
+namespace_end
+namespace_end
+
+#endif \ No newline at end of file
diff --git a/Source/tests/win32/01-window/03_sub_menu.cpp b/Source/tests/win32/01-window/03_sub_menu.cpp
index fed841d..9c4ee85 100644
--- a/Source/tests/win32/01-window/03_sub_menu.cpp
+++ b/Source/tests/win32/01-window/03_sub_menu.cpp
@@ -28,7 +28,7 @@ void AddMenus(HWND);
HWND wnd;
HWND wnd2;
-AEMath::Recti viewport;
+Recti viewport;
string vert = R"(
@@ -172,16 +172,16 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
case WM_SIZE:
{
- if (g_Device.Inited())
+ if (g_GfxDevice.Inited())
{
RECT rect;
GetClientRect(hwnd, &rect);
viewport.Set(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
- g_Device.SetViewport(viewport);
+ g_GfxDevice.SetViewport(viewport);
}
}
case WM_PAINT:
- if (!g_Device.Inited())
+ if (!g_GfxDevice.Inited())
break;
glEnable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
@@ -206,28 +206,28 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
{
int imgLoc = shader->GetUniformLocation("img");
- int code = g_Device.GetError();
- g_Device.SetActiveShader(shader);
+ int code = g_GfxDevice.GetError();
+ g_GfxDevice.SetActiveShader(shader);
shader->SetUniformTexture(imgLoc, *img);
- g_Device.SetMatrixMode(MATRIX_MODE_PROJECTION);
- g_Device.LoadIdentity();
- g_Device.Ortho(0, viewport.w, viewport.h, 0, -1, 1);
- g_Device.SetMatrixMode(MATRIX_MODE_MODEL);
- g_Device.LoadIdentity();
- g_Device.Translate(100, 100);
- shader->SetUniformMatrix44(locs.m, g_Device.GetMatrix(MATRIX_MODE_MODEL));
- shader->SetUniformMatrix44(locs.v, g_Device.GetMatrix(MATRIX_MODE_VIEW));
- shader->SetUniformMatrix44(locs.p, g_Device.GetMatrix(MATRIX_MODE_PROJECTION));
+ g_GfxDevice.SetMatrixMode(MATRIX_MODE_PROJECTION);
+ g_GfxDevice.LoadIdentity();
+ g_GfxDevice.Ortho(0, viewport.w, viewport.h, 0, -1, 1);
+ g_GfxDevice.SetMatrixMode(MATRIX_MODE_MODEL);
+ g_GfxDevice.LoadIdentity();
+ g_GfxDevice.Translate(100, 100);
+ shader->SetUniformMatrix44(locs.m, g_GfxDevice.GetMatrix(MATRIX_MODE_MODEL));
+ shader->SetUniformMatrix44(locs.v, g_GfxDevice.GetMatrix(MATRIX_MODE_VIEW));
+ shader->SetUniformMatrix44(locs.p, g_GfxDevice.GetMatrix(MATRIX_MODE_PROJECTION));
shader->SetAttribute(locs.pos, vb, 0, 4);
shader->SetAttribute(locs.tex, vb, 2, 4);
- g_Device.SetDrawColor(1, 1, 0, 1);
- shader->SetUniformColor(locs.color, g_Device.GetDrawColor());
+ g_GfxDevice.SetDrawColor(1, 1, 0, 1);
+ shader->SetUniformColor(locs.color, g_GfxDevice.GetDrawColor());
//glLineWidth(1);
- g_Device.DrawArrays(GL_LINE_STRIP, 0, 5);
- //g_Device.DrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ g_GfxDevice.DrawArrays(GL_LINE_STRIP, 0, 5);
+ //g_GfxDevice.DrawArrays(GL_TRIANGLE_STRIP, 0, 4);
shader->DisableAttribute(locs.pos);
shader->DisableAttribute(locs.tex);
- g_Device.SetActiveShader(NULL);
+ g_GfxDevice.SetActiveShader(NULL);
}
glFlush();
BeginPaint(hwnd, &ps); EndPaint(hwnd, &ps);
@@ -263,7 +263,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
RECT rect;
GetWindowRect(hwnd, &rect);
viewport.Set(0, 0, rect.right - rect.left, rect.bottom - rect.top);
- if (!g_Device.Init(viewport))
+ if (!g_GfxDevice.Init(viewport))
return 0;
imgdata->Decode(db);