diff options
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 { |