summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/Asura/Asura.vcxproj10
-rw-r--r--Build/Asura/Asura.vcxproj.filters30
-rw-r--r--Source/Asura/Component.h13
-rw-r--r--Source/Asura/Containers/Map.h9
-rw-r--r--Source/Asura/Containers/StringMap.hpp13
-rw-r--r--Source/Asura/GameObject.h1
-rw-r--r--Source/Asura/Graphics/Animation.cpp (renamed from Source/Asura/Graphics/Animations/Animation.cpp)0
-rw-r--r--Source/Asura/Graphics/Animation.h (renamed from Source/Asura/Graphics/Animations/Animation.h)0
-rw-r--r--Source/Asura/Graphics/Material.h81
-rw-r--r--Source/Asura/Graphics/ParticleSystem.cpp (renamed from Source/Asura/Graphics/Effects/ParticleSystem.cpp)0
-rw-r--r--Source/Asura/Graphics/ParticleSystem.h19
-rw-r--r--Source/Asura/Graphics/Renderer.h6
-rw-r--r--Source/Asura/Graphics/Shader.h37
-rw-r--r--Source/Asura/Graphics/SpriteBatch.cpp (renamed from Source/Asura/Graphics/Effects/ParticleSystem.h)0
-rw-r--r--Source/Asura/Graphics/SpriteBatch.h (renamed from Source/Asura/rename.bat)0
-rw-r--r--Source/Asura/Object.cpp23
-rw-r--r--Source/Asura/Object.h13
-rw-r--r--Source/Asura/Transform.h2
18 files changed, 224 insertions, 33 deletions
diff --git a/Build/Asura/Asura.vcxproj b/Build/Asura/Asura.vcxproj
index 6709692..794950a 100644
--- a/Build/Asura/Asura.vcxproj
+++ b/Build/Asura/Asura.vcxproj
@@ -122,9 +122,12 @@
<ClInclude Include="..\..\Source\Asura\Containers\UnorderedMap.hpp" />
<ClInclude Include="..\..\Source\Asura\Containers\Vector.hpp" />
<ClInclude Include="..\..\Source\Asura\GameObject.h" />
+ <ClInclude Include="..\..\Source\Asura\Graphics\Animation.h" />
<ClInclude Include="..\..\Source\Asura\Graphics\Color.h" />
<ClInclude Include="..\..\Source\Asura\Graphics\OpenGL.h" />
+ <ClInclude Include="..\..\Source\Asura\Graphics\ParticleSystem.h" />
<ClInclude Include="..\..\Source\Asura\Graphics\Renderer.h" />
+ <ClInclude Include="..\..\Source\Asura\Graphics\SpriteBatch.h" />
<ClInclude Include="..\..\Source\Asura\Graphics\Texture.h" />
<ClInclude Include="..\..\Source\Asura\Layer.h" />
<ClInclude Include="..\..\Source\Asura\Object.h" />
@@ -151,8 +154,6 @@
<ClInclude Include="..\..\Source\Asura\Graphics\Material.h" />
<ClInclude Include="..\..\Source\Asura\Graphics\Shader.h" />
<ClInclude Include="..\..\Source\Asura\Graphics\Sprite.h" />
- <ClInclude Include="..\..\Source\Asura\Graphics\Animations\Animation.h" />
- <ClInclude Include="..\..\Source\Asura\Graphics\Effects\ParticleSystem.h" />
<ClInclude Include="..\..\Source\Asura\Input\Keyboard.h" />
<ClInclude Include="..\..\Source\Asura\Math\Functions.h" />
<ClInclude Include="..\..\Source\Asura\Math\Matrix44.h" />
@@ -165,9 +166,12 @@
<ItemGroup>
<ClCompile Include="..\..\Source\Asura\Component.cpp" />
<ClCompile Include="..\..\Source\Asura\GameObject.cpp" />
+ <ClCompile Include="..\..\Source\Asura\Graphics\Animation.cpp" />
<ClCompile Include="..\..\Source\Asura\Graphics\Color.cpp" />
<ClCompile Include="..\..\Source\Asura\Graphics\OpenGL.cpp" />
+ <ClCompile Include="..\..\Source\Asura\Graphics\ParticleSystem.cpp" />
<ClCompile Include="..\..\Source\Asura\Graphics\Renderer.cpp" />
+ <ClCompile Include="..\..\Source\Asura\Graphics\SpriteBatch.cpp" />
<ClCompile Include="..\..\Source\Asura\Graphics\Texture.cpp" />
<ClCompile Include="..\..\Source\Asura\Layer.cpp" />
<ClCompile Include="..\..\Source\Asura\Object.cpp" />
@@ -192,8 +196,6 @@
<ClCompile Include="..\..\Source\Asura\Graphics\Material.cpp" />
<ClCompile Include="..\..\Source\Asura\Graphics\Shader.cpp" />
<ClCompile Include="..\..\Source\Asura\Graphics\Sprite.cpp" />
- <ClCompile Include="..\..\Source\Asura\Graphics\Animations\Animation.cpp" />
- <ClCompile Include="..\..\Source\Asura\Graphics\Effects\ParticleSystem.cpp" />
<ClCompile Include="..\..\Source\Asura\GUI\Button.cpp" />
<ClCompile Include="..\..\Source\Asura\Input\Keyboard.cpp" />
<ClCompile Include="..\..\Source\Asura\Math\Functions.cpp" />
diff --git a/Build/Asura/Asura.vcxproj.filters b/Build/Asura/Asura.vcxproj.filters
index 707d4fb..e12cf66 100644
--- a/Build/Asura/Asura.vcxproj.filters
+++ b/Build/Asura/Asura.vcxproj.filters
@@ -96,12 +96,6 @@
<ClInclude Include="..\..\Source\Asura\Graphics\Sprite.h">
<Filter>Graphics</Filter>
</ClInclude>
- <ClInclude Include="..\..\Source\Asura\Graphics\Effects\ParticleSystem.h">
- <Filter>Graphics\Effects</Filter>
- </ClInclude>
- <ClInclude Include="..\..\Source\Asura\Graphics\Animations\Animation.h">
- <Filter>Graphics\Animations</Filter>
- </ClInclude>
<ClInclude Include="..\..\Source\Asura\Input\Keyboard.h">
<Filter>Input</Filter>
</ClInclude>
@@ -160,6 +154,15 @@
<ClInclude Include="..\..\Source\Asura\Graphics\Renderer.h">
<Filter>Graphics</Filter>
</ClInclude>
+ <ClInclude Include="..\..\Source\Asura\Graphics\Animation.h">
+ <Filter>Graphics\Animations</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\Source\Asura\Graphics\ParticleSystem.h">
+ <Filter>Graphics\Effects</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\Source\Asura\Graphics\SpriteBatch.h">
+ <Filter>Graphics</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\Asura\AI\BehaviorTree.cpp">
@@ -213,12 +216,6 @@
<ClCompile Include="..\..\Source\Asura\Graphics\Sprite.cpp">
<Filter>Graphics</Filter>
</ClCompile>
- <ClCompile Include="..\..\Source\Asura\Graphics\Effects\ParticleSystem.cpp">
- <Filter>Graphics\Effects</Filter>
- </ClCompile>
- <ClCompile Include="..\..\Source\Asura\Graphics\Animations\Animation.cpp">
- <Filter>Graphics\Animations</Filter>
- </ClCompile>
<ClCompile Include="..\..\Source\Asura\GUI\Button.cpp">
<Filter>GUI</Filter>
</ClCompile>
@@ -266,6 +263,15 @@
<ClCompile Include="..\..\Source\Asura\Graphics\Renderer.cpp">
<Filter>Graphics</Filter>
</ClCompile>
+ <ClCompile Include="..\..\Source\Asura\Graphics\Animation.cpp">
+ <Filter>Graphics\Animations</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\Source\Asura\Graphics\ParticleSystem.cpp">
+ <Filter>Graphics\Effects</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\Source\Asura\Graphics\SpriteBatch.cpp">
+ <Filter>Graphics</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\Source\Asura\GUI\README.md">
diff --git a/Source/Asura/Component.h b/Source/Asura/Component.h
index 20f0685..a602d50 100644
--- a/Source/Asura/Component.h
+++ b/Source/Asura/Component.h
@@ -11,6 +11,7 @@ namespace AsuraEngine
class Component : public Object
{
public:
+
virtual void OnEnable();
virtual void OnEvent();
virtual void OnUpdate(uint32 milliseconds);
@@ -18,6 +19,18 @@ namespace AsuraEngine
virtual void OnDisable();
protected:
+
+ enum class EnableCallback
+ {
+ OnEnable = 1,
+ OnEvent = 1 << 1,
+ OnUpdate = 1 << 2,
+ OnRender = 1 << 3,
+ OnDisable = 1 << 4,
+ };
+
+ EnableCallback mEnabledCallbacks;
+
GameObject* mGameObject;
};
diff --git a/Source/Asura/Containers/Map.h b/Source/Asura/Containers/Map.h
index cc2358e..2caedef 100644
--- a/Source/Asura/Containers/Map.h
+++ b/Source/Asura/Containers/Map.h
@@ -7,13 +7,10 @@ namespace AsuraEngine
{
namespace Containers
{
-/*
- template<typename T>
- class Map : public std::map<
- {
- };
-*/
+ template<typename key_type, typename value_type>
+ using Map = std::map<key_type, value_type>;
+
}
}
diff --git a/Source/Asura/Containers/StringMap.hpp b/Source/Asura/Containers/StringMap.hpp
index af5b856..94858a7 100644
--- a/Source/Asura/Containers/StringMap.hpp
+++ b/Source/Asura/Containers/StringMap.hpp
@@ -1,15 +1,28 @@
#ifndef __AE_STRINGMAP_H__
#define __AE_STRINGMAP_H__
+#include "String.h"
+
namespace AsuraEngine
{
namespace Containers
{
+ ///
+ /// һ˫һһӦӳ䣬shader uniformsstatemathine state parameterID
+ ///
+ template<typename key_type>
class StringMap
{
public:
+ bool ContainsKey(const key_type& key);
+
+ bool ContainsString(const String& str);
+
+ String GetStringByKey(const key_type& key);
+
+ key_type GetKeyByString(const String& str);
};
diff --git a/Source/Asura/GameObject.h b/Source/Asura/GameObject.h
index 954ce6c..fcef864 100644
--- a/Source/Asura/GameObject.h
+++ b/Source/Asura/GameObject.h
@@ -38,6 +38,7 @@ namespace AsuraEngine
void SetRotation(const Math::Vector2& rotation);
private:
+
Transform mTransform;
Containers::Vector<Component*> mComponents;
diff --git a/Source/Asura/Graphics/Animations/Animation.cpp b/Source/Asura/Graphics/Animation.cpp
index e69de29..e69de29 100644
--- a/Source/Asura/Graphics/Animations/Animation.cpp
+++ b/Source/Asura/Graphics/Animation.cpp
diff --git a/Source/Asura/Graphics/Animations/Animation.h b/Source/Asura/Graphics/Animation.h
index e69de29..e69de29 100644
--- a/Source/Asura/Graphics/Animations/Animation.h
+++ b/Source/Asura/Graphics/Animation.h
diff --git a/Source/Asura/Graphics/Material.h b/Source/Asura/Graphics/Material.h
index 6093d18..2b74879 100644
--- a/Source/Asura/Graphics/Material.h
+++ b/Source/Asura/Graphics/Material.h
@@ -25,14 +25,51 @@ namespace AsuraEngine
class Material : public Object
{
public:
+
+ enum class UniformsType
+ {
+ None = 0,
+ Float,
+ Int,
+ Vector2,
+ Vector3,
+ Vector4,
+ Matrix44,
+ Texture,
+ Color,
+ };
+
+ struct UniformsInfo
+ {
+ int id; // uniformID
+ UniformsType type; // uniform
+ union
+ {
+ float f;
+ int i;
+ Math::Vector2 v2;
+ Math::Vector3 v3;
+ Math::Vector4 v4;
+ Math::Matrix44 m44;
+ Texture* tex;
+ Color col;
+ }value; // uniformֵ
+ };
+
Material();
Material(const Material& srcMat);
~Material();
Material* Clone();
- // Uniform
+ void SetShader(Shader* shader);
+
+ // UniformڲУȾʱϴGPU
+ ///
+ /// uniformIDIDnamemapshader乲uniformֵʱͨIDѯuniform
+ /// shaderҵuniform locationlocationֵ
+ ///
static int GetUniformID(const Containers::String& name);
void SetTexture(int ID, Texture* texture);
@@ -44,6 +81,16 @@ namespace AsuraEngine
void SetInteger(int ID, int value);
void SetColor(int ID, Color color);
+ UniformsInfo GetUniformInfo(int ID);
+ float GetUniformInfof(int ID);
+ int GetUniformInfoi(int ID);
+ Math::Vector2 GetUniformInfov2(int ID);
+ Math::Vector3 GetUniformInfov3(int ID);
+ Math::Vector4 GetUniformInfov4(int ID);
+ Math::Matrix44 GetUniformInfom44(int ID);
+ Texture* GetUniformInfotex(int ID);
+ Color GetUniformInfocol(int ID);
+
// ϴ
void SetVertexAttributes();
@@ -52,6 +99,8 @@ namespace AsuraEngine
LUAX_DECL_FACTORY( Material );
+ LUAX_DECL_METHOD( l_SetShader );
+
LUAX_DECL_METHOD( l_SetTexture );
LUAX_DECL_METHOD( l_SetVector2 );
LUAX_DECL_METHOD( l_SetVector3 );
@@ -62,10 +111,34 @@ namespace AsuraEngine
LUAX_DECL_METHOD( l_SetColor );
LUAX_DECL_METHOD( l_SetVertexAttributes );
+ LUAX_DECL_METHOD( l_GetUniformInfo );
+ LUAX_DECL_METHOD( l_GetUniformInfof );
+ LUAX_DECL_METHOD( l_GetUniformInfoi );
+ LUAX_DECL_METHOD( l_GetUniformInfov2 );
+ LUAX_DECL_METHOD( l_GetUniformInfov3 );
+ LUAX_DECL_METHOD( l_GetUniformInfov4 );
+ LUAX_DECL_METHOD( l_GetUniformInfom44 );
+ LUAX_DECL_METHOD( l_GetUniformInfotex );
+ LUAX_DECL_METHOD( l_GetUniformInfocol );
+
+ LUAX_DECL_METHOD( l_SetVertexAttributes );
+
private:
- //Color mColor;
- //Shader* mShader;
- //Texture* mMainTexture;
+
+ ///
+ ///
+ ///
+ Shader* mShader;
+
+ ///
+ /// UniformsֵӳIDֵ
+ ///
+ Containers::Map<int, UniformsInfo> mUniforms;
+
+ ///
+ /// ǷǹIJ
+ ///
+ bool mIsShared;
};
diff --git a/Source/Asura/Graphics/Effects/ParticleSystem.cpp b/Source/Asura/Graphics/ParticleSystem.cpp
index e69de29..e69de29 100644
--- a/Source/Asura/Graphics/Effects/ParticleSystem.cpp
+++ b/Source/Asura/Graphics/ParticleSystem.cpp
diff --git a/Source/Asura/Graphics/ParticleSystem.h b/Source/Asura/Graphics/ParticleSystem.h
new file mode 100644
index 0000000..98aba49
--- /dev/null
+++ b/Source/Asura/Graphics/ParticleSystem.h
@@ -0,0 +1,19 @@
+#ifndef __AE_PARTICLESYSTEM_H__
+#define __AE_PARTICLESYSTEM_H__
+
+#include "Component.h"
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ class ParticleSystem : public Component
+ {
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/Source/Asura/Graphics/Renderer.h b/Source/Asura/Graphics/Renderer.h
index 004bbe4..2efa391 100644
--- a/Source/Asura/Graphics/Renderer.h
+++ b/Source/Asura/Graphics/Renderer.h
@@ -1,6 +1,7 @@
#ifndef __AE_RENDERER_H__
#define __AE_RENDERER_H__
+#include "Component.h"
#include "Material.h"
namespace AsuraEngine
@@ -8,11 +9,12 @@ namespace AsuraEngine
namespace Graphics
{
- class Renderer
+ class Renderer : public Component
{
public:
///
- ///
+ /// һô˷ͻ´shared materialô˷ζҪmaterialý޸ģʱʹõIJ
+ /// shared materialҪһݣӰrenderer
///
Material* GetMaterial();
diff --git a/Source/Asura/Graphics/Shader.h b/Source/Asura/Graphics/Shader.h
index 0589c70..7c09139 100644
--- a/Source/Asura/Graphics/Shader.h
+++ b/Source/Asura/Graphics/Shader.h
@@ -1,10 +1,11 @@
#ifndef __AE_SHADER_H__
#define __AE_SHADER_H__
-#include "../Object.h"
-
#include "luax/luax.h"
+#include "Containers/Map.h"
+#include "Containers/StringMap.hpp"
+#include "Object.h"
#include "Color.h"
namespace AsuraEngine
@@ -12,17 +13,45 @@ namespace AsuraEngine
namespace Graphics
{
+ class Material;
+
+ ///
+ /// һshaderһڲʼ乲ijShaderuniformsͶݣֻuniforms location
+ ///
class Shader : public Object
{
public:
+ Shader();
+ ~Shader();
+
+ private:
+
+ friend class Material;
+
+ ///
+ /// shaderuniformsIDӳ䡣
+ ///
+ static Containers::StringMap<int> sUniformsID;
+
+ ///
+ /// uniformID
+ ///
+ static int GetUniformID(const Containers::String& name);
+
///
/// ñ
- /// vec2 Asura_Time xֵΪ뵱ǰʼʱ䣬yֵΪһ֡ʱ
- /// vec2 Asura_RenderTargetSize RTĴСΪλ
+ /// vec2 Asura_Time xֵΪ뵱ǰʼʱ䣬yֵΪһ֡ʱ
+ /// vec2 Asura_RenderTargetSize RTĴСΪλ
+ /// Texture Asura_MainTexture
///
void SetBuiltInUniforms();
+ ///
+ /// ӳuniforms IDlocation
+ ///
+ Containers::Map<int, int> mLocations;
+
};
}
diff --git a/Source/Asura/Graphics/Effects/ParticleSystem.h b/Source/Asura/Graphics/SpriteBatch.cpp
index e69de29..e69de29 100644
--- a/Source/Asura/Graphics/Effects/ParticleSystem.h
+++ b/Source/Asura/Graphics/SpriteBatch.cpp
diff --git a/Source/Asura/rename.bat b/Source/Asura/Graphics/SpriteBatch.h
index e69de29..e69de29 100644
--- a/Source/Asura/rename.bat
+++ b/Source/Asura/Graphics/SpriteBatch.h
diff --git a/Source/Asura/Object.cpp b/Source/Asura/Object.cpp
index e69de29..587dca7 100644
--- a/Source/Asura/Object.cpp
+++ b/Source/Asura/Object.cpp
@@ -0,0 +1,23 @@
+#include "Object.h"
+
+namespace AsuraEngine
+{
+
+ Object::Object()
+ : mRC(0)
+ {
+
+ }
+
+ void Object::Retain(Object* obj)
+ {
+ ++obj->mRC;
+ }
+
+ void Object::Release(Object* obj)
+ {
+ if (--obj->mRC == 0)
+ delete obj;
+ }
+
+} \ No newline at end of file
diff --git a/Source/Asura/Object.h b/Source/Asura/Object.h
index 4617a4a..2511500 100644
--- a/Source/Asura/Object.h
+++ b/Source/Asura/Object.h
@@ -8,6 +8,19 @@ namespace AsuraEngine
class Object
{
+ public:
+
+ Object();
+
+ virtual ~Object();
+
+ static void Retain(Object* obj);
+
+ static void Release(Object* obj);
+
+ private:
+
+ int mRC; //
};
diff --git a/Source/Asura/Transform.h b/Source/Asura/Transform.h
index 9666ec4..98a0c77 100644
--- a/Source/Asura/Transform.h
+++ b/Source/Asura/Transform.h
@@ -1,7 +1,7 @@
#ifndef __AE_TRANSFORM_H__
#define __AE_TRANSFORM_H__
-#include "./Math/AE_Vector2.h"
+#include "Math/Vector2.h"
namespace AsuraEngine
{