76 lines
1.8 KiB
C++
76 lines
1.8 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __GPUFBO__
|
|
#define __GPUFBO__
|
|
|
|
|
|
#include "ntypes.h"
|
|
#include "geometry/rect.h"
|
|
#include "alloc/ialloc.h"
|
|
|
|
|
|
namespace GS {
|
|
namespace Render { struct Texture; }
|
|
namespace GPU {
|
|
class Renderer;
|
|
|
|
/*!
|
|
@short GPU frame buffer object.
|
|
@author Emmanuel Julien (ejulien@nworks.fr)
|
|
*/
|
|
struct FBO
|
|
{
|
|
NPLACEMENT_NEW(Renderer)
|
|
|
|
Renderer &renderer;
|
|
|
|
uint color_texture_count;
|
|
|
|
Render::Texture *color_texture[8], *depth_texture;
|
|
|
|
/// Set output color texture.
|
|
virtual void SetColorTexture(Render::Texture *t)
|
|
{
|
|
color_texture[0] = t;
|
|
color_texture_count = 1;
|
|
}
|
|
/// Set output color texture.
|
|
virtual void SetColorTexture(Render::Texture *t[], uint n)
|
|
{
|
|
for (color_texture_count = 0; color_texture_count < n; ++color_texture_count)
|
|
color_texture[color_texture_count] = t[color_texture_count];
|
|
}
|
|
/// Set output depth texture.
|
|
virtual void SetDepthTexture(Render::Texture *t)
|
|
{ depth_texture = t; }
|
|
|
|
/// Blit attachment to another FBO attachment.
|
|
virtual void Blit(FBO *out, const iRect &src, const iRect &dst, bool color = true, bool depth = true) = 0;
|
|
/// Transfer color pixels into a CPU based buffer, this buffer is expected to be big enough to hold the required region in RGBA format.
|
|
virtual void ReadColorPixels(char *out, int x, int y, int w, int h) = 0;
|
|
|
|
/// Create FBO.
|
|
virtual bool Create() = 0;
|
|
/// Free FBO.
|
|
virtual void Free() = 0;
|
|
|
|
FBO(Renderer &r) : renderer(r)
|
|
{
|
|
for (uint n = 0; n < 8; ++n)
|
|
color_texture[n] = 0;
|
|
color_texture_count = 0;
|
|
depth_texture = 0;
|
|
}
|
|
virtual ~FBO() {}
|
|
};
|
|
|
|
} // GPU
|
|
} // GS
|
|
|
|
|
|
#endif // __GPUFBO__
|