17 #include "SkyBoxRenderer.h" 18 #include "ResourceManager.h" 19 #include "constants.h" 21 #include "CubeMapTexture.h" 22 #include "GameObject.h" 25 #define SKYBOX_SHADER_NAME "skybox_shader" 27 SkyBoxRenderer::SkyBoxRenderer(
Camera *camera,
Mesh* skyMesh,
GameObject* gameObject) : m_camera(camera), m_skyMesh(skyMesh), gameObject(gameObject) {
30 bool SkyBoxRenderer::init(
const std::string &posXFilename,
const std::string &negXFilename,
31 const std::string &posYFilename,
const std::string &negYFilename,
32 const std::string &posZFilename,
const std::string &negZFilename)
34 m_pCubemap =
new CubeMapTexture(posXFilename, negXFilename, posYFilename, negYFilename, posZFilename, negZFilename);
35 ResourceManager::loadShader(
"shaders/skybox.vert",
"shaders/skybox.frag", SKYBOX_SHADER_NAME);
36 shaderProgram = ResourceManager::getShader(SKYBOX_SHADER_NAME);
37 shaderProgram->setUniformBufferObjectBinding(UNIFORM_BUFFER_OBJECT_MATRICES_NAME, UNIFORM_BUFFER_OBJECT_MATRICES_INDEX);
42 void SkyBoxRenderer::update(
float dt) {
43 gameObject->move(chag::make_translation(chag::make_vector(0.0f, 2.0f, 0.0f)) * chag::make_translation(m_camera->getPosition()) *
44 chag::make_scale<chag::float4x4>(chag::make_vector(10000.0f, 10000.0f, 10000.0f)));
47 void SkyBoxRenderer::render() {
48 shaderProgram->backupCurrentShaderProgram();
51 GLint OldCullFaceMode;
52 glGetIntegerv(GL_CULL_FACE_MODE, &OldCullFaceMode);
53 GLint OldDepthFuncMode;
54 glGetIntegerv(GL_DEPTH_FUNC, &OldDepthFuncMode);
57 glDepthFunc(GL_LEQUAL);
59 m_pCubemap->bind(GL_TEXTURE0);
60 shaderProgram->setUniform1i(
"cubeMapSampler", 0);
62 chag::float4x4 modelMatrix = gameObject->getModelMatrix();
63 shaderProgram->setUniformMatrix4fv(
"modelMatrix", modelMatrix);
65 for (
size_t i = 0; i < m_skyMesh->getChunks()->size(); i++) {
66 renderChunk((*m_skyMesh->getChunks())[i]);
69 glCullFace(OldCullFaceMode);
70 glDepthFunc(OldDepthFuncMode);
71 shaderProgram->restorePreviousShaderProgram();
75 void SkyBoxRenderer::renderChunk(
Chunk& chunk) {
76 glBindVertexArray(chunk.m_vaob);
77 glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, chunk.m_ind_bo);
79 glDrawElements(GL_TRIANGLES, chunk.m_indices.size(), GL_UNSIGNED_INT, 0);
83 SkyBoxRenderer::~SkyBoxRenderer(){
A class for containing all information about a object in the game world.