mirror of
https://github.com/jmarshall23/CnC_Remastered_Collection.git
synced 2026-08-12 08:00:55 +02:00
Added new rendertexture class for FBO's.
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
// RenderTexture.cpp
|
||||
//
|
||||
|
||||
#include "function.h"
|
||||
#include "image.h"
|
||||
#include "gl/glew.h"
|
||||
|
||||
/*
|
||||
========================
|
||||
RenderTexture::RenderTexture
|
||||
========================
|
||||
*/
|
||||
RenderTexture::RenderTexture(Image_t *colorImage, Image_t *depthImage) {
|
||||
deviceHandle = -1;
|
||||
if (colorImage != nullptr)
|
||||
{
|
||||
AddRenderImage(colorImage);
|
||||
}
|
||||
this->depthImage = depthImage;
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
RenderTexture::~RenderTexture
|
||||
========================
|
||||
*/
|
||||
RenderTexture::~RenderTexture() {
|
||||
if (deviceHandle != -1)
|
||||
{
|
||||
glDeleteFramebuffers(1, &deviceHandle);
|
||||
deviceHandle = -1;
|
||||
}
|
||||
}
|
||||
/*
|
||||
================
|
||||
RenderTexture::AddRenderImage
|
||||
================
|
||||
*/
|
||||
void RenderTexture::AddRenderImage(Image_t *image) {
|
||||
if (deviceHandle != -1) {
|
||||
assert(!"RenderTexture::AddRenderImage: Can't add render image after FBO has been created!");
|
||||
}
|
||||
|
||||
colorImages.push_back(image);
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
RenderTexture::InitRenderTexture
|
||||
================
|
||||
*/
|
||||
void RenderTexture::InitRenderTexture(void) {
|
||||
glGenFramebuffers(1, &deviceHandle);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, deviceHandle);
|
||||
|
||||
for (int i = 0; i < colorImages.size(); i++) {
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, colorImages[i]->HouseImages[0].image[0][0], 0);
|
||||
}
|
||||
|
||||
if (depthImage != nullptr) {
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthImage->HouseImages[0].image[0][0], 0);
|
||||
}
|
||||
|
||||
if (colorImages.size() > 0)
|
||||
{
|
||||
GLenum DrawBuffers[5] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4 };
|
||||
if (colorImages.size() >= 5) {
|
||||
assert(!"InitRenderTextures: Too many render targets!");
|
||||
}
|
||||
glDrawBuffers(colorImages.size(), &DrawBuffers[0]);
|
||||
}
|
||||
|
||||
|
||||
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||
assert(!"RenderTexture::InitRenderTexture: Failed to create rendertexture!");
|
||||
}
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
RenderTexture::MakeCurrent
|
||||
================
|
||||
*/
|
||||
void RenderTexture::MakeCurrent(void) {
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, deviceHandle);
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
RenderTexture::BindNull
|
||||
================
|
||||
*/
|
||||
void RenderTexture::BindNull(void) {
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
int RenderTexture::GetWidth() const { return (colorImages.size() > 0) ? colorImages[0]->renderwidth[0] : depthImage->renderwidth[0]; }
|
||||
int RenderTexture::GetHeight() const { return (colorImages.size() > 0) ? colorImages[0]->renderheight[0] : depthImage->renderheight[0]; }
|
||||
|
||||
/*
|
||||
================
|
||||
RenderTexture::Resize
|
||||
================
|
||||
*/
|
||||
void RenderTexture::Resize(int width, int height) {
|
||||
//Image_t *target = nullptr;
|
||||
//
|
||||
//if (colorImages.Num() > 0) {
|
||||
// target = colorImages[0];
|
||||
//}
|
||||
//else {
|
||||
// target = depthImage;
|
||||
//}
|
||||
//
|
||||
//if (target->GetOpts().width == width && target->GetOpts().height == height) {
|
||||
// return;
|
||||
//}
|
||||
//
|
||||
//for(int i = 0; i < colorImages.Num(); i++) {
|
||||
// colorImages[i]->Resize(width, height);
|
||||
//}
|
||||
//
|
||||
//if (depthImage != nullptr) {
|
||||
// depthImage->Resize(width, height);
|
||||
//}
|
||||
//
|
||||
//if (deviceHandle != -1)
|
||||
//{
|
||||
// glDeleteFramebuffers(1, &deviceHandle);
|
||||
// deviceHandle = -1;
|
||||
//}
|
||||
//
|
||||
//InitRenderTexture();
|
||||
}
|
||||
Reference in New Issue
Block a user