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