mirror of
https://github.com/ApfelTeeSaft/vb01.git
synced 2026-08-26 19:33:45 +00:00
Merge pull request #30 from devZoGok/bf-27-pbr-elements
bf-27-pbr-elements
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user