22 changed files with 608 additions and 87 deletions
			
			
		| 
		 After Width: | Height: | Size: 77 KiB  | 
| 
		 After Width: | Height: | Size: 77 KiB  | 
| 
		 After Width: | Height: | Size: 69 KiB  | 
| 
		 After Width: | Height: | Size: 88 KiB  | 
| 
		 After Width: | Height: | Size: 87 KiB  | 
| 
		 After Width: | Height: | Size: 79 KiB  | 
@ -0,0 +1,49 @@ | 
				
			|||||||
 | 
					#version 450 core | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 0) out vec4 color; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					in vec4 v_color; | 
				
			||||||
 | 
					in vec3 v_textureCoordinates; | 
				
			||||||
 | 
					in flat float v_textureIndex; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform samplerCube u_textures[32]; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main() | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						vec4 textureColor = v_color; | 
				
			||||||
 | 
						switch(int(v_textureIndex)) { | 
				
			||||||
 | 
							case 0:  break; // Texture unit 0 is reserved for no texture | 
				
			||||||
 | 
							case 1:  textureColor *= texture(u_textures[1],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 2:  textureColor *= texture(u_textures[2],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 3:  textureColor *= texture(u_textures[3],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 4:  textureColor *= texture(u_textures[4],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 5:  textureColor *= texture(u_textures[5],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 6:  textureColor *= texture(u_textures[6],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 7:  textureColor *= texture(u_textures[7],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 8:  textureColor *= texture(u_textures[8],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 9:  textureColor *= texture(u_textures[9],  v_textureCoordinates); break; | 
				
			||||||
 | 
							case 10: textureColor *= texture(u_textures[10], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 11: textureColor *= texture(u_textures[11], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 12: textureColor *= texture(u_textures[12], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 13: textureColor *= texture(u_textures[13], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 14: textureColor *= texture(u_textures[14], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 15: textureColor *= texture(u_textures[15], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 16: textureColor *= texture(u_textures[16], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 17: textureColor *= texture(u_textures[17], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 18: textureColor *= texture(u_textures[18], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 19: textureColor *= texture(u_textures[19], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 20: textureColor *= texture(u_textures[20], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 21: textureColor *= texture(u_textures[21], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 22: textureColor *= texture(u_textures[22], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 23: textureColor *= texture(u_textures[23], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 24: textureColor *= texture(u_textures[24], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 25: textureColor *= texture(u_textures[25], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 26: textureColor *= texture(u_textures[26], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 27: textureColor *= texture(u_textures[27], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 28: textureColor *= texture(u_textures[28], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 29: textureColor *= texture(u_textures[29], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 30: textureColor *= texture(u_textures[30], v_textureCoordinates); break; | 
				
			||||||
 | 
							case 31: textureColor *= texture(u_textures[31], v_textureCoordinates); break; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						color = textureColor; | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,20 @@ | 
				
			|||||||
 | 
					#version 450 core | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 0) in vec3 a_position; | 
				
			||||||
 | 
					layout(location = 1) in vec4 a_color; | 
				
			||||||
 | 
					layout(location = 2) in float a_textureIndex; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out vec4 v_color; | 
				
			||||||
 | 
					out vec3 v_textureCoordinates; | 
				
			||||||
 | 
					out flat float v_textureIndex; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform mat4 u_projectionView; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main() | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						v_color = a_color; | 
				
			||||||
 | 
						v_textureCoordinates = a_position; | 
				
			||||||
 | 
						v_textureIndex = a_textureIndex; | 
				
			||||||
 | 
						// Vclip = Camera projection * Camera view * Model transform * Vlocal | 
				
			||||||
 | 
						gl_Position = u_projectionView * vec4(a_position, 1.0f); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,27 @@ | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (C) 2024 Riyyi | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * SPDX-License-Identifier: MIT | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "ruc/json/json.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "inferno/component/cubemap-component.h" | 
				
			||||||
 | 
					#include "inferno/component/spritecomponent.h" // TODO: Move glm::x toJson/fromJson to separate file | 
				
			||||||
 | 
					#include "inferno/render/texture.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Inferno { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void fromJson(const ruc::Json& json, CubemapComponent& value) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						VERIFY(json.type() == ruc::Json::Type::Object); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (json.exists("color")) { | 
				
			||||||
 | 
							json.at("color").getTo(value.color); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						if (json.exists("texture") && json.at("texture").type() == ruc::Json::Type::String) { | 
				
			||||||
 | 
							value.texture = TextureManager::the().load(json.at("texture").asString(), Texture::Type::Cubemap); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // namespace Inferno
 | 
				
			||||||
@ -0,0 +1,25 @@ | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (C) 2024 Riyyi | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * SPDX-License-Identifier: MIT | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <memory> // std::shared_ptr | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "glm/ext/vector_float4.hpp" // glm::vec4 | 
				
			||||||
 | 
					#include "ruc/json/json.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "inferno/render/texture.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Inferno { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct CubemapComponent { | 
				
			||||||
 | 
						glm::vec4 color { 1.0f }; | 
				
			||||||
 | 
						std::shared_ptr<Texture> texture; | 
				
			||||||
 | 
					}; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void fromJson(const ruc::Json& json, CubemapComponent& value); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // namespace Inferno
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue