1#include "Sky/CubeMap.h"
7#include <TextureCubemap.h>
8#include <stb/stb_image.h>
14#include "Base/Model.h"
15#include "Base/ModelImporter.h"
16#include "Utils/Utils.h"
17#include "Data/ApplicationState.h"
19static bool tmpb =
false;
20static std::string vertShader = ReadShaderSourceFile(GetExecutableDir() + PATH_SEPARATOR
"Data" PATH_SEPARATOR
"shaders" PATH_SEPARATOR
"skybox" PATH_SEPARATOR
"vert.glsl", &tmpb);
21static std::string fragShader = ReadShaderSourceFile(GetExecutableDir() + PATH_SEPARATOR
"Data" PATH_SEPARATOR
"shaders" PATH_SEPARATOR
"skybox" PATH_SEPARATOR
"frag.glsl", &tmpb);
22static std::string fragProShader = ReadShaderSourceFile(GetExecutableDir() + PATH_SEPARATOR
"Data" PATH_SEPARATOR
"shaders" PATH_SEPARATOR
"skybox" PATH_SEPARATOR
"procedural_clouds.glsl", &tmpb);
25static float skyboxVertices[] =
71CubeMapManager::~CubeMapManager()
97 static std::vector<std::string> faces =
99 appState->constants.skyboxDir + PATH_SEPARATOR
"px.jpg",
100 appState->constants.skyboxDir + PATH_SEPARATOR
"nx.jpg",
101 appState->constants.skyboxDir + PATH_SEPARATOR
"py.jpg",
102 appState->constants.skyboxDir + PATH_SEPARATOR
"ny.jpg",
103 appState->constants.skyboxDir + PATH_SEPARATOR
"pz.jpg",
104 appState->constants.skyboxDir + PATH_SEPARATOR
"nz.jpg"
107 cubemap->SetUpOnGPU();
108 cubemap->LoadFaces(faces);
109 cubemap->UploadDataToGPU();
110 skyboxShader =
new Shader(vertShader, fragShader);
111 skyproShader =
new Shader(vertShader, fragProShader);
112 glGenVertexArrays(1, &vao);
113 glBindVertexArray(vao);
115 glGenBuffers(1, &VBO);
116 glBindBuffer(GL_ARRAY_BUFFER, VBO);
117 glBufferData(GL_ARRAY_BUFFER,
sizeof(skyboxVertices), skyboxVertices, GL_STATIC_DRAW);
118 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 *
sizeof(
float), (
void *)0);
119 glEnableVertexAttribArray(0);
120 skySphere = LoadModel(GetExecutableDir() + PATH_SEPARATOR
"Data" PATH_SEPARATOR
"models" PATH_SEPARATOR
"icosphere.obj");
121 skySphere->SetupMeshOnGPU();
122 skySphere->UploadToGPU();
126void CubeMapManager::RenderSkybox(glm::mat4 view, glm::mat4 proj,
bool useBox,
bool useProcedural,
float cirrus,
float cumulus,
float time,
float *fsun,
float upf)
128 glDisable(GL_DEPTH_TEST);
129 glDepthMask(GL_FALSE);
130 glBindVertexArray(vao);
131 Shader *shd = skyboxShader;
140 view = glm::mat4(glm::mat3(view));
141 shd->SetUniformMat4(
"_P", proj);
142 shd->SetUniformMat4(
"_V", view);
143 shd->SetUniformf(
"time", time);
144 shd->SetUniformf(
"cirrus", cirrus);
145 shd->SetUniformf(
"upf", upf);
146 shd->SetUniformf(
"cumulus", cumulus);
147 shd->SetUniform3f(
"fsun", fsun);
148 glUniform1i(glGetUniformLocation(shd->m_Shader,
"skybox"), 0);
152 glDrawArrays(GL_TRIANGLES, 0, 36);
161 glDepthMask(GL_TRUE);
162 glEnable(GL_DEPTH_TEST);