mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-18 01:05:13 +00:00
83 lines
2.8 KiB
C
83 lines
2.8 KiB
C
|
#pragma once
|
||
|
|
||
|
#include "gfx/seadColor.h"
|
||
|
#include "math/seadBoundBox.h"
|
||
|
#include "math/seadVector.h"
|
||
|
#include "prim/seadRuntimeTypeInfo.h"
|
||
|
|
||
|
namespace sead
|
||
|
{
|
||
|
class DrawContext;
|
||
|
class DisplayBuffer;
|
||
|
|
||
|
class LogicalFrameBuffer
|
||
|
{
|
||
|
SEAD_RTTI_BASE(LogicalFrameBuffer)
|
||
|
|
||
|
public:
|
||
|
LogicalFrameBuffer(const Vector2f& virtual_size, const BoundBox2f& physical_area)
|
||
|
: mVirtualSize(virtual_size), mPhysicalArea(physical_area)
|
||
|
{
|
||
|
}
|
||
|
LogicalFrameBuffer(const Vector2f& virtual_size, f32 physical_x, f32 physical_y, f32 physical_w,
|
||
|
f32 physical_h)
|
||
|
: mVirtualSize(virtual_size),
|
||
|
mPhysicalArea(physical_x, physical_y, physical_x + physical_w, physical_y + physical_h)
|
||
|
{
|
||
|
}
|
||
|
LogicalFrameBuffer(const Vector2f& virtual_size, f32 physical_x, f32 physical_y, u32 physical_w,
|
||
|
u32 physical_h)
|
||
|
: mVirtualSize(virtual_size),
|
||
|
mPhysicalArea(physical_x, physical_y, physical_x + physical_w, physical_y + physical_h)
|
||
|
{
|
||
|
}
|
||
|
virtual ~LogicalFrameBuffer();
|
||
|
|
||
|
const Vector2f& getVirtualSize() const { return mVirtualSize; }
|
||
|
const BoundBox2f& getPhysicalArea() const { return mPhysicalArea; }
|
||
|
void setVirtualSize(const Vector2f& virtual_size) { mVirtualSize = virtual_size; }
|
||
|
void setPhysicalArea(const BoundBox2f& ph_size)
|
||
|
{
|
||
|
mPhysicalArea.set(ph_size.getMin(), ph_size.getMax());
|
||
|
}
|
||
|
void setPhysicalArea(f32 x, f32 y, f32 w, f32 h) { mPhysicalArea.set(x, y, x + w, y + h); }
|
||
|
void setPhysicalArea(f32 x, f32 y, u32 w, u32 h) { mPhysicalArea.set(x, y, x + w, y + h); }
|
||
|
|
||
|
private:
|
||
|
Vector2f mVirtualSize;
|
||
|
BoundBox2f mPhysicalArea;
|
||
|
};
|
||
|
|
||
|
class FrameBuffer : public LogicalFrameBuffer
|
||
|
{
|
||
|
SEAD_RTTI_OVERRIDE(FrameBuffer, LogicalFrameBuffer)
|
||
|
public:
|
||
|
FrameBuffer(const Vector2f& virtual_size, const BoundBox2f& physical_area)
|
||
|
: LogicalFrameBuffer(virtual_size, physical_area)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
FrameBuffer(const Vector2f& virtual_size, f32 physical_x, f32 physical_y, f32 physical_w,
|
||
|
f32 physical_h)
|
||
|
: LogicalFrameBuffer(virtual_size, physical_x, physical_y, physical_w, physical_h)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
FrameBuffer(const Vector2f& virtual_size, f32 physical_x, f32 physical_y, u32 physical_w,
|
||
|
u32 physical_h)
|
||
|
: LogicalFrameBuffer(virtual_size, physical_x, physical_y, physical_w, physical_h)
|
||
|
{
|
||
|
}
|
||
|
~FrameBuffer() override;
|
||
|
|
||
|
virtual void copyToDisplayBuffer(DrawContext* draw_context,
|
||
|
const DisplayBuffer* display_buffer) const;
|
||
|
virtual void clear(u32 clr_flag, const Color4f& color, f32 depth, u32 stencil) const = 0;
|
||
|
virtual void clearMRT(DrawContext* draw_context, u32 target, const Color4f& color) const;
|
||
|
virtual void bindImpl_() const = 0;
|
||
|
|
||
|
void bind(DrawContext* draw_context) const;
|
||
|
};
|
||
|
|
||
|
} // namespace sead
|