Files
libsst/Include/ZRenderer/ZFrameBufferRenderTargetBase.hpp
2026-04-03 00:22:39 -05:00

151 lines
3.5 KiB
C++

/*
ZFramebufferRenderTargetBase.hpp
Author: James Russell <jcrussell@762studios.com>
Created: 08/07/2011
Purpose:
Base class implementation of the ZFramebufferRenderTarget interface.
License:
TODO
*/
#pragma once
#ifndef _ZFRAMEBUFFERRENDERTARGETBASE_HPP
#define _ZFRAMEBUFFERRENDERTARGETBASE_HPP
#include <ZRenderer/ZFramebufferRenderTarget.hpp>
#include <ZRenderer/ZTexture.hpp>
#include <ZRenderer/ZRenderBuffer.hpp>
//Buffer Data Struct, used to indicate buffer state
struct ZFramebufferRenderTargetBufferState
{
//Our set of attached Color Buffers
ZPtr<ZTexture> ColorBuffers[ZFBRT_MAX_COLOR_BUFFERS];
//Our attached depth texture
ZPtr<ZTexture> DepthTexture;
//Our attached depth buffer
ZPtr<ZRenderBuffer> DepthBuffer;
//Our attached stencil buffer
ZPtr<ZRenderBuffer> StencilBuffer;
//Indicates we are in a usable state
bool bIsComplete;
ZFramebufferRenderTargetBufferState()
: bIsComplete(false) { }
};
//Base class implementation of a frame buffer render target
class ZFramebufferRenderTargetBase : public ZFramebufferRenderTarget
{
private:
DISABLE_COPY_AND_ASSIGN(ZFramebufferRenderTargetBase);
protected:
//The 'clear' flags
ZRenderTargetClearFlags Flags;
//Width of the FBRT
size_t Width;
//Height of the FBRT
size_t Height;
//Flag indicating state has changed
bool bIsDirty;
//Buffer State for this frame buffer render target
ZFramebufferRenderTargetBufferState BufferState;
/*
Constructor.
@param _width - the width (in pixels / texels) of the FBRT
@param _height - the height (in pixels / texels) of the FBRT
*/
ZFramebufferRenderTargetBase(size_t _width, size_t _height);
public:
//Virtual Destructor
virtual ~ZFramebufferRenderTargetBase() { }
/*
public ZFramebufferRenderTargetBase::GetBufferState
Gets the buffer state for this frame buffer render target.
@return (ZFramebufferRenderTargetBufferState*) - the buffer state
@context (all)
*/
ZFramebufferRenderTargetBufferState* GetBufferState();
/*
public ZFramebufferRenderTargetBase::GetBufferStateResetDirty
Gets the backing buffer state for this render target. This will return
NULL if the buffer state has not been modified since the last call to
this function, and in the case it has been modified, a call to this
resets the 'dirty' flag for the render target.
@return (ZFramebufferRenderTargetBufferState*) - buffer state, NULL if not modified
@context (all)
*/
ZFramebufferRenderTargetBufferState* GetBufferStateResetDirty();
/*************************/
/* ZRenderTarget Methods */
/*************************/
//Subclass Implementation
virtual const ZRenderTargetClearFlags& GetClearFlags();
//Subclass Implementation
virtual size_t GetHeight();
//Subclass Implementation
virtual ZRenderTargetType GetType();
//Subclass Implementation
virtual size_t GetWidth();
//Subclass Implementation
virtual bool SetClearFlags(const ZRenderTargetClearFlags& _flags);
/************************************/
/* ZFramebufferRenderTarget Methods */
/************************************/
//Subclass Implementation
virtual bool AttachColorTexture(ZPtr<ZTexture> _texture, size_t _index);
//Subclass Implementation
virtual bool AttachDepthTexture(ZPtr<ZTexture> _texture);
//Subclass Implementation
virtual bool AttachRenderBuffer(ZPtr<ZRenderBuffer> _buffer);
//Subclass Implementation
virtual bool IsComplete();
//Subclass Implementation
virtual bool RemoveColorBuffers();
//Subclass Implementation
virtual bool RemoveDepthBuffer();
//Subclass Implementation
virtual bool RemoveStencilBuffer();
};
#endif