6#include <brenta/renderer/skybox.hpp>
7#include <brenta/renderer/opengl/cubemap.hpp>
8#include <brenta/renderer/opengl/shader.hpp>
9#include <brenta/renderer/material.hpp>
10#include <brenta/renderer/mesh.hpp>
12#include "../src/renderer/shaders/c/skybox_vs.c"
13#include "../src/renderer/shaders/c/skybox_fs.c"
15using namespace brenta;
17Skybox::Skybox(
const tenno::vector<std::filesystem::path>& faces)
19 auto cubemap = tenno::make_shared<Cubemap>(faces);
20 auto maybe_skybox_shader = Shader::create({
21 { Shader::Type::Vertex, skybox_vs },
22 { Shader::Type::Fragment, skybox_fs }
24 if (!maybe_skybox_shader)
26 ERROR(
"Error creating shader");
30 tenno::make_shared<Material>(tenno::move(maybe_skybox_shader.value()));
31 this->material->set_texture(
"skybox", cubemap, 0);
32 auto skybox_mesh_builder =
35 { glm::vec3(-1.0f, -1.0f, -1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
36 { glm::vec3( 1.0f, -1.0f, -1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
37 { glm::vec3(-1.0f, 1.0f, -1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
38 { glm::vec3( 1.0f, 1.0f, -1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
39 { glm::vec3(-1.0f, -1.0f, 1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
40 { glm::vec3( 1.0f, -1.0f, 1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
41 { glm::vec3(-1.0f, 1.0f, 1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
42 { glm::vec3( 1.0f, 1.0f, 1.0f), glm::vec3(0.0f), glm::vec2(0.0f) },
59 this->mesh = tenno::make_shared<Mesh>(skybox_mesh_builder.build());
64 if (!this->material || !this->mesh)
67 glDepthFunc(GL_LEQUAL);
68 glDepthMask(GL_FALSE);
70 this->material->apply();