Riyyi
11 months ago
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