Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void FrameBuffer::create() {
- if (dynamicSize) {
- width = WindowOpengl::getInstance()->getWidth();
- height = WindowOpengl::getInstance()->getHeight();
- }
- //Framebuffer generate
- glGenFramebuffers(1, &frameBuffer);
- glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
- //Texture generate
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
- glGenRenderbuffers(1, &depthBuffer);
- glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
- glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
- glGenTextures(1, &depthTexture);
- glBindTexture(GL_TEXTURE_2D, depthTexture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8_EXT, width, height, 0, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, NULL);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
- GLenum drawBuffers[2] = {GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT};
- glDrawBuffers(2, drawBuffers);
- checkStatus();
- created = true;
- }
- void FrameBuffer::bind() {
- if (!created) create();
- if (!dynamicSize) {
- glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
- glViewport(0, 0, width, height);
- } else {
- glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
- WindowOpengl *globalWindow = WindowOpengl::getInstance();
- glViewport(0, 0, globalWindow->getWidth(), globalWindow->getHeight());
- }
- }
- void FrameBuffer::unbind(int width, int height) {
- if (!main) {
- FrameBuffer::getMainBuffer()->bind();
- } else {
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- glViewport(0, 0, width, height);
- }
- }
- GLuint FrameBuffer::getTextureIndex() {
- return texture;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement