Просмотр исходного кода

move SpriteAnimator from Device to Sprite

mikymod 12 лет назад
Родитель
Сommit
a02f86a6d8
2 измененных файлов с 42 добавлено и 64 удалено
  1. 17 41
      engine/Sprite.cpp
  2. 25 23
      engine/Sprite.h

+ 17 - 41
engine/Sprite.cpp

@@ -28,62 +28,38 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "Vector3.h"
 #include "Quaternion.h"
 #include "SpriteResource.h"
-#include "Device.h"
-#include "Renderer.h"
+#include "Allocator.h"
+#include "SpriteAnimator.h"
 
 namespace crown
 {
 
-//-----------------------------------------------------------------------------
-static const char* sprite_vs =
-	"uniform mat4      	u_model;"
-	"uniform mat4      	u_model_view_projection;"
-
-	"in vec4           	a_position;"
-	"in vec4           	a_normal;"
-	"in vec2           	a_tex_coord0;"
-	"in vec4           	a_color;"
-
-	"varying out vec2	tex_coord0;"
-	"varying out vec4	color;"
-
-	"void main(void)"
-	"{"
-	"	tex_coord0 = a_tex_coord0;"
-	"   color = a_color;"
-	"	gl_Position = u_model_view_projection * a_position;"
-	"}";
-
-//-----------------------------------------------------------------------------
-static const char* sprite_fs = 
-	"in vec2            tex_coord0;"
-	"in vec4            color;"
-
-	"uniform sampler2D  u_tex;"
-
-	"void main(void)"
-	"{"
-	"	gl_FragColor = texture(u_tex, tex_coord0);"
-	"}";
-
 //-----------------------------------------------------------------------------
 void Sprite::create(SpriteResource* sr, int32_t node, const Vector3& pos, const Quaternion& rot)
 {
-	Renderer* r = device()->renderer();
-
 	m_vb = sr->m_vb;
 	m_ib = sr->m_ib;
 	m_texture = sr->m_texture;
-
-	m_vertex = r->create_shader(ShaderType::VERTEX, sprite_vs);
-	m_fragment = r->create_shader(ShaderType::FRAGMENT, sprite_fs);
-	m_program = r->create_gpu_program(m_vertex, m_fragment);
-	m_uniform = r->create_uniform("u_tex", UniformType::INTEGER_1, 1);
+	m_vertex = sr->m_vertex;
+	m_fragment = sr->m_fragment;
+	m_program = sr->m_program;
+	m_uniform = sr->m_uniform;
 
 	set_local_position(pos);
 	set_local_rotation(rot);
 
 	m_node = node;
+
+	m_animator = CE_NEW(default_allocator(), SpriteAnimator)(sr);
+}
+
+//-----------------------------------------------------------------------------
+void Sprite::destroy()
+{
+	if (m_animator)
+	{
+		CE_DELETE(default_allocator(), m_animator);
+	}
 }
 
 //-----------------------------------------------------------------------------

+ 25 - 23
engine/Sprite.h

@@ -33,42 +33,44 @@ namespace crown
 {
 
 class SpriteResource;
+class SpriteAnimator;
 class Vector3;
 class Quaternion;
 
+//-----------------------------------------------------------------------------
 struct Sprite
 {
-	void			create(SpriteResource* sr, int32_t node, const Vector3& pos, const Quaternion& rot);
-	
-	Vector3			local_position() const;
-	Quaternion		local_rotation() const;
-	Matrix4x4		local_pose() const;
+	void				create(SpriteResource* sr, int32_t node, const Vector3& pos, const Quaternion& rot);
+	void				destroy();
+
+	Vector3				local_position() const;
+	Quaternion			local_rotation() const;
+	Matrix4x4			local_pose() const;
 
-	Vector3			world_position() const;
-	Quaternion		world_rotation() const;
-	Matrix4x4		world_pose() const;
+	Vector3				world_position() const;
+	Quaternion			world_rotation() const;
+	Matrix4x4			world_pose() const;
 
-	void			set_local_position(const Vector3& pos);
-	void			set_local_rotation(const Quaternion& rot);
-	void			set_local_pose(const Matrix4x4& pose);
+	void				set_local_position(const Vector3& pos);
+	void				set_local_rotation(const Quaternion& rot);
+	void				set_local_pose(const Matrix4x4& pose);
 
 public:
 	
-	int32_t 		m_node;
-
-	Matrix4x4 		m_local_pose;
-	Matrix4x4 		m_world_pose;
-
-	VertexBufferId	m_vb;
-	IndexBufferId	m_ib;
+	int32_t				m_node;
 
-	TextureId		m_texture;
+	Matrix4x4			m_local_pose;
+	Matrix4x4			m_world_pose;
 
-	ShaderId 		m_vertex;
-	ShaderId 		m_fragment;
-	GPUProgramId	m_program;
+	VertexBufferId		m_vb;
+	IndexBufferId		m_ib;
+	TextureId			m_texture;
+	ShaderId			m_vertex;
+	ShaderId			m_fragment;
+	GPUProgramId		m_program;
+	UniformId			m_uniform;
 
-	UniformId 		m_uniform;
+	SpriteAnimator*		m_animator;
 };
 
 } // namespace crown