Merge pull request #30 from devZoGok/bf-27-pbr-elements

bf-27-pbr-elements
This commit is contained in:
devZoGok
2024-01-06 13:35:49 +00:00
committed by GitHub
2 changed files with 39 additions and 38 deletions
+38 -36
View File
@@ -38,43 +38,8 @@ namespace vb01{
glDeleteBuffers(1, &VBO);
}
void Mesh::construct(){
string libPath = Root::getSingleton()->getLibPath();
environmentShader = new Shader(libPath + "environmentPreFilter");
irradianceShader = new Shader(libPath + "irradiance");
brdfIntegrationShader = new Shader(libPath + "brdfIntegration");
prefilterMap = new Texture(preFilterMapSize, false);
irradianceMap = new Texture(irradianceMapSize, false);
postfilterMap = new Texture(environmentMapSize, false, 5);
brdfIntegrationMap = new Texture(brdfMapSize, brdfMapSize, false);
initFramebuffer(preFilterFramebuffer, preFilterRenderbuffer, preFilterMapSize);
initFramebuffer(irrandianceFramebuffer, irradianceRenderbuffer, irradianceMapSize);
initFramebuffer(postFilterFramebuffer, postFilterRenderbuffer, environmentMapSize);
initFramebuffer(brdfFramebuffer, brdfRenderbuffer, brdfMapSize);
initMesh();
}
void Mesh::initFramebuffer(u32 &framebuffer, u32 &renderbuffer, int width){
glGenFramebuffers(1, &framebuffer);
glGenRenderbuffers(1, &renderbuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, width);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer);
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
cout << "Mesh framebuffer not complete\n";
glBindFramebuffer(GL_FRAMEBUFFER, *Root::getSingleton()->getFBO());
}
//TODO allow to init meshes to be drawn statically or dynamically
void Mesh::initMesh(){
void Mesh::construct(){
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
@@ -108,6 +73,22 @@ namespace vb01{
}
}
void Mesh::initFramebuffer(u32 &framebuffer, u32 &renderbuffer, int width){
glGenFramebuffers(1, &framebuffer);
glGenRenderbuffers(1, &renderbuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, width);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer);
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
cout << "Mesh framebuffer not complete\n";
glBindFramebuffer(GL_FRAMEBUFFER, *Root::getSingleton()->getFBO());
}
void Mesh::updateVerts(MeshData meshData){
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferSubData(GL_ARRAY_BUFFER, 0, 3 * sizeof(MeshData::Vertex) * meshBase.numTris, meshData.vertices);
@@ -417,4 +398,25 @@ namespace vb01{
glPolygonMode(GL_FRONT_AND_BACK, wireframe ? GL_LINE : GL_FILL);
glDrawElements(GL_TRIANGLES, 3 * meshBase.numTris, GL_UNSIGNED_INT, 0);
}
void Mesh::setReflect(bool reflect){
this->reflect = reflect;
if(reflect && !environmentShader){
string libPath = Root::getSingleton()->getLibPath();
environmentShader = new Shader(libPath + "environmentPreFilter");
irradianceShader = new Shader(libPath + "irradiance");
brdfIntegrationShader = new Shader(libPath + "brdfIntegration");
prefilterMap = new Texture(preFilterMapSize, false);
irradianceMap = new Texture(irradianceMapSize, false);
postfilterMap = new Texture(environmentMapSize, false, 5);
brdfIntegrationMap = new Texture(brdfMapSize, brdfMapSize, false);
initFramebuffer(preFilterFramebuffer, preFilterRenderbuffer, preFilterMapSize);
initFramebuffer(irrandianceFramebuffer, irradianceRenderbuffer, irradianceMapSize);
initFramebuffer(postFilterFramebuffer, postFilterRenderbuffer, environmentMapSize);
initFramebuffer(brdfFramebuffer, brdfRenderbuffer, brdfMapSize);
}
}
}
+1 -2
View File
@@ -24,9 +24,9 @@ namespace vb01{
void updateVerts(MeshData);
virtual void update();
void render();
void setReflect(bool);
inline void setMaterial(Material *mat){this->material = mat;}
inline void setCastShadow(bool castShadow){this->castShadow = castShadow;}
inline void setReflect(bool r){this->reflect = r;}
inline void setReflective(bool r){this->reflective = r;}
inline void setWireframe(bool w){this->wireframe = w;}
inline void setSkeleton(Skeleton *sk){this->skeleton = sk;}
@@ -41,7 +41,6 @@ namespace vb01{
inline Texture* getBrdfIntegrationMap(){return brdfIntegrationMap;}
inline MeshData getMeshBase(){return meshBase;}
private:
void initMesh();
void initFramebuffer(u32&, u32&, int);
void updateSkeleton(Shader*);
void updatePrefilterMap(Vector3, glm::mat4&, glm::vec3[6]);