Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Renderer::InitiateFirstPass()
- {
- glGenFramebuffers(1, &s_GBufferData->GeometryBuffer);
- glBindFramebuffer(GL_FRAMEBUFFER, s_GBufferData->GeometryBuffer);
- // - position color buffer
- glGenTextures(1, &s_GBufferData->Position);
- glBindTexture(GL_TEXTURE_2D, s_GBufferData->Position);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, s_Width, s_Height, 0, GL_RGB, GL_FLOAT, NULL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, s_GBufferData->Position, 0);
- // - normal color buffer
- glGenTextures(1, &s_GBufferData->Normal);
- glBindTexture(GL_TEXTURE_2D, s_GBufferData->Normal);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, s_Width, s_Height, 0, GL_RGB, GL_FLOAT, NULL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, s_GBufferData->Normal, 0);
- // - color(albedo) buffer
- glGenTextures(1, &s_GBufferData->Albedo);
- glBindTexture(GL_TEXTURE_2D, s_GBufferData->Albedo);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, s_Width, s_Height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, s_GBufferData->Albedo, 0);
- // - specular color buffer
- glGenTextures(1, &s_GBufferData->Specular);
- glBindTexture(GL_TEXTURE_2D, s_GBufferData->Specular);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, s_Width, s_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_2D, s_GBufferData->Specular, 0);
- unsigned int attachments[4] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
- glDrawBuffers(4, attachments);
- // create and attach depth buffer (renderbuffer)
- //unsigned int rboDepth;
- glGenRenderbuffers(1, &s_GBufferData->rboDepth);
- //glBindRenderbuffer(GL_RENDERBUFFER, s_GBufferData->rboDepth);
- //glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, s_Width, s_Height);
- //glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, s_GBufferData->rboDepth);
- glBindTexture(GL_TEXTURE_2D, s_GBufferData->rboDepth);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, s_Width, s_Height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, s_GBufferData->rboDepth, 0);
- // finally check if framebuffer is complete
- if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
- std::cout << "Framebuffer not complete!" << std::endl;
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- // shader configuration
- s_GBufferData->GeometryShader->Bind();
- s_GBufferData->GeometryShader->UploadUniformInt("u_DiffuseTexture", 0);
- s_GBufferData->GeometryShader->UploadUniformInt("u_NormalTexture", 1);
- s_GBufferData->GeometryShader->UploadUniformInt("u_SpecularTexture", 2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement