mikymod 11 سال پیش
والد
کامیت
ef125949d4
3فایلهای تغییر یافته به همراه29 افزوده شده و 18 حذف شده
  1. 20 6
      engine/renderers/Material.cpp
  2. 5 2
      engine/renderers/Material.h
  3. 4 10
      engine/renderers/Sprite.cpp

+ 20 - 6
engine/renderers/Material.cpp

@@ -36,6 +36,17 @@ namespace crown
 Material::Material(const MaterialResource* mr)
 	: m_resource(mr)
 {
+	Blob vs_code = mr->get_vertex_shader();
+	Blob fs_code = mr->get_fragment_shader();
+
+	printf("vs: %d, %p\n", vs_code.m_size, (void*) vs_code.m_data);
+	printf("fs: %d, %p\n", fs_code.m_size, (void*) fs_code.m_data);
+
+	bgfx::ShaderHandle vs = bgfx::createShader(bgfx::makeRef((const void*) vs_code.m_data, vs_code.m_size));
+	bgfx::ShaderHandle fs = bgfx::createShader(bgfx::makeRef((const void*) fs_code.m_data, fs_code.m_size));
+
+	m_program = bgfx::createProgram(vs, fs);
+	m_uniform = bgfx::createUniform("u_albedo", bgfx::UniformType::Uniform1iv);
 }
 
 //-----------------------------------------------------------------------------
@@ -50,12 +61,15 @@ const MaterialResource* Material::resource()
 }
 
 //-----------------------------------------------------------------------------
-// void Material::bind(Renderer& r, UniformId uniform)
-// {
-// 	const ResourceId tr_id = m_resource->get_texture_layer(0);
-// 	const TextureResource* tr = (TextureResource*) device()->resource_manager()->get(tr_id);
+void Material::bind()
+{
+	const void* tr = device()->resource_manager()->get("texture", "spaceship");
+
+	bgfx::TextureHandle th;
+	th.idx = (uintptr_t) tr;
 
-// 	r.set_texture(0, uniform, tr->texture(), TEXTURE_FILTER_LINEAR | TEXTURE_WRAP_U_CLAMP_REPEAT | TEXTURE_WRAP_V_CLAMP_REPEAT);
-// }
+	bgfx::setTexture(0, m_uniform, th);
+	bgfx::setProgram(m_program);
+}
 
 } // namespace crown

+ 5 - 2
engine/renderers/Material.h

@@ -26,10 +26,11 @@ OTHER DEALINGS IN THE SOFTWARE.
 
 #pragma once
 
+#include <bgfx.h>
+
 namespace crown
 {
 
-class Renderer;
 struct MaterialResource;
 
 struct Material
@@ -39,11 +40,13 @@ struct Material
 
 	const MaterialResource* resource();
 
-	// void bind(Renderer& r, UniformId uniform);
+	void bind();
 
 private:
 
 	const MaterialResource* m_resource;
+	bgfx::ProgramHandle m_program;
+	bgfx::UniformHandle m_uniform;
 };
 
 } // namespace crown

+ 4 - 10
engine/renderers/Sprite.cpp

@@ -180,8 +180,8 @@ void Sprite::update(float dt)
 //-----------------------------------------------------------------------------
 void Sprite::render()
 {
-	// Material* material = m_render_world.get_material(m_material);
-	// material->bind(r, uniform);
+	Material* material = m_render_world.get_material(m_material);
+	material->bind();
 
 	///
 	/// @param _state State flags. Default state for primitive type is
@@ -206,14 +206,8 @@ void Sprite::render()
 	///   2. BGFX_STATE_BLEND_EQUATION_ADD is set when no other blend
 	///      equation is specified.
 	///
-	bgfx::setState(BGFX_STATE_DEFAULT);
-
-	// r.set_state(STATE_DEPTH_WRITE 
-	// 	| STATE_COLOR_WRITE 
-	// 	| STATE_ALPHA_WRITE 
-	// 	| STATE_CULL_CW 
-	// 	| STATE_BLEND_EQUATION_ADD 
-	// 	| STATE_BLEND_FUNC(STATE_BLEND_FUNC_SRC_ALPHA, STATE_BLEND_FUNC_ONE_MINUS_SRC_ALPHA));
+	bgfx::setState(BGFX_STATE_DEFAULT
+		| BGFX_STATE_BLEND_ALPHA);
 
 	bgfx::setVertexBuffer(m_vb);
 	bgfx::setIndexBuffer(m_ib, m_frame * 6, 6);