96 lines
2.5 KiB
C++
96 lines
2.5 KiB
C++
#include "SkyProgram.hpp"
|
|
|
|
#include "../Renderer.hpp"
|
|
|
|
using namespace pass;
|
|
|
|
const GLfloat g_cubemap_vertices[] = {
|
|
-1.0f, 1.0f, -1.0f,
|
|
-1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, 1.0f, -1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
|
|
-1.0f, -1.0f, 1.0f,
|
|
-1.0f, -1.0f, -1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
-1.0f, 1.0f, 1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
|
|
-1.0f, -1.0f, 1.0f,
|
|
-1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, -1.0f, 1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
|
|
-1.0f, 1.0f, -1.0f,
|
|
1.0f, 1.0f, -1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
-1.0f, 1.0f, 1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
|
|
-1.0f, -1.0f, -1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
1.0f, -1.0f, 1.0f
|
|
};
|
|
SkyProgram::SkyProgram(): Program(), CubeBuffer(GL_TRIANGLES, 36, sizeof(g_cubemap_vertices), g_cubemap_vertices) {
|
|
|
|
std::vector<std::string> flags;
|
|
std::vector<Shader*> shaders;
|
|
shaders.push_back(loadShader(GL_VERTEX_SHADER, flags));
|
|
shaders.push_back(loadShader(GL_FRAGMENT_SHADER, flags));
|
|
load(shaders);
|
|
|
|
ViewMatrixID = glGetUniformLocation(ProgramID, "View");
|
|
ProjectionMatrixID = glGetUniformLocation(ProgramID, "Projection");
|
|
TextureID = glGetUniformLocation(ProgramID, "Texture");
|
|
}
|
|
|
|
SkyProgram::~SkyProgram() { }
|
|
|
|
std::string SkyProgram::getName() const {
|
|
return "Sky";
|
|
}
|
|
void SkyProgram::start(render::gl::Renderer *renderer) {
|
|
const auto fixedView = glm::mat4(glm::mat3(renderer->getViewMatrix()));
|
|
setView(&fixedView[0][0]);
|
|
setProjection(&renderer->getProjectionMatrix()[0][0]);
|
|
|
|
bindTexture(renderer->getSkyTexture());
|
|
}
|
|
buffer::params SkyProgram::setup() {
|
|
return buffer::params{.vertexOnly = true};
|
|
}
|
|
void SkyProgram::draw(render::gl::Renderer *renderer) {
|
|
useIt();
|
|
start(renderer);
|
|
CubeBuffer.draw(setup());
|
|
}
|
|
|
|
void SkyProgram::setView(const GLfloat *matrix) {
|
|
glUniformMatrix4fv(ViewMatrixID, 1, GL_FALSE, matrix);
|
|
}
|
|
void SkyProgram::setProjection(const GLfloat *matrix) {
|
|
glUniformMatrix4fv(ProjectionMatrixID, 1, GL_FALSE, matrix);
|
|
}
|
|
|
|
void SkyProgram::bindTexture(GLuint textureID) {
|
|
glActiveTexture(GL_TEXTURE0);
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);
|
|
glUniform1i(TextureID, 0);
|
|
}
|