77 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <assets/shader.hpp>
 | |
| #include <math/vec3.hpp>
 | |
| #include <memory/reference.hpp>
 | |
| 
 | |
| namespace lt::renderer::components {
 | |
| 
 | |
| enum class VertexFormat : uint8_t
 | |
| {
 | |
| 	r32_g32_b32_sfloat,
 | |
| 
 | |
| 	r32_g32_sfloat,
 | |
| };
 | |
| 
 | |
| enum class VertexInputRate : uint8_t
 | |
| {
 | |
| 	per_vertex,
 | |
| 
 | |
| 	per_instance,
 | |
| };
 | |
| 
 | |
| struct VertexInputAttributeDescriptipn
 | |
| {
 | |
| 	uint32_t location;
 | |
| 
 | |
| 	uint32_t binding;
 | |
| 
 | |
| 	uint32_t offset;
 | |
| 
 | |
| 	VertexFormat format;
 | |
| };
 | |
| 
 | |
| struct VertexInputBindingDescription
 | |
| {
 | |
| 	uint32_t binding;
 | |
| 
 | |
| 	uint32_t stride;
 | |
| };
 | |
| 
 | |
| /** Requires a math::components::Transform component on the same entity to be functional. */
 | |
| struct Sprite
 | |
| {
 | |
| 	struct Vertex
 | |
| 	{
 | |
| 		math::vec3 position;
 | |
| 
 | |
| 		math::vec3 color;
 | |
| 
 | |
| 		[[nodiscard]] constexpr static auto get_attributes()
 | |
| 		    -> std::array<VertexInputAttributeDescriptipn, 2>
 | |
| 		{
 | |
| 			return {
 | |
| 				VertexInputAttributeDescriptipn {
 | |
| 				    .location = 0u,
 | |
| 				    .binding = 0u,
 | |
| 				    .offset = offsetof(Sprite::Vertex, position),
 | |
| 				    .format = VertexFormat::r32_g32_b32_sfloat,
 | |
| 
 | |
| 				},
 | |
| 
 | |
| 				VertexInputAttributeDescriptipn {
 | |
| 				    .location = 1u,
 | |
| 				    .binding = 0u,
 | |
| 				    .offset = offsetof(Sprite::Vertex, color),
 | |
| 				    .format = VertexFormat::r32_g32_b32_sfloat,
 | |
| 				},
 | |
| 			};
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| 	memory::Ref<assets::ShaderAsset> vertex_shader;
 | |
| 
 | |
| 	memory::Ref<assets::ShaderAsset> fragment_shader;
 | |
| };
 | |
| 
 | |
| } // namespace lt::renderer::components
 |