prime/include/Kyoto/Graphics/CGraphics.hpp

209 lines
5.4 KiB
C++
Raw Normal View History

#ifndef _CGRAPHICS
#define _CGRAPHICS
#include "types.h"
#include "Kyoto/Graphics/CColor.hpp"
#include "Kyoto/Math/CTransform4f.hpp"
#include "Kyoto/Math/CVector3f.hpp"
#include "Kyoto/Graphics/CTevCombiners.hpp"
enum ERglFogMode {
kRFM_None = GX_FOG_NONE,
kRFM_PerspLin = GX_FOG_PERSP_LIN,
kRFM_PerspExp = GX_FOG_PERSP_EXP,
kRFM_PerspExp2 = GX_FOG_ORTHO_EXP2,
kRFM_PerspRevExp = GX_FOG_PERSP_REVEXP,
kRFM_PerspRevExp2 = GX_FOG_PERSP_REVEXP2,
kRFM_OrthoLin = GX_FOG_ORTHO_LIN,
kRFM_OrthoExp = GX_FOG_ORTHO_EXP,
kRFM_OrthoExp2 = GX_FOG_ORTHO_EXP2,
kRFM_OrthoRevExp = GX_FOG_ORTHO_REVEXP,
kRFM_OrthoRevExp2 = GX_FOG_ORTHO_REVEXP2,
};
enum ERglTevStage {
kTS_Stage0,
kTS_Stage1,
kTS_Stage2,
kTS_Stage3,
kTS_Stage4,
kTS_Stage5,
kTS_Stage6,
kTS_Stage7,
kTS_Stage8,
kTS_Stage9,
kTS_Stage10,
kTS_Stage11,
kTS_Stage12,
kTS_Stage13,
kTS_Stage14,
kTS_Stage15,
kTS_MaxStage,
};
enum ERglPrimitive {
kP_Quads = GX_QUADS,
kP_Triangles = GX_TRIANGLES,
kP_TriangleStrip = GX_TRIANGLESTRIP,
kP_TriangleFan = GX_TRIANGLEFAN,
kP_Lines = GX_LINES,
kP_LineStrip = GX_LINESTRIP,
kP_Points = GX_POINTS,
};
enum ERglBlendMode {
kBM_None = GX_BM_NONE,
kBM_Blend = GX_BM_BLEND,
kBM_Logic = GX_BM_LOGIC,
kBM_Subtract = GX_BM_SUBTRACT,
kBM_Max = GX_MAX_BLENDMODE,
};
enum ERglBlendFactor {
kBF_Zero = GX_BL_ZERO,
kBF_One = GX_BL_ONE,
kBF_SrcColor = GX_BL_SRCCLR,
kBF_InvSrcColor = GX_BL_INVSRCCLR,
kBF_SrcAlpha = GX_BL_SRCALPHA,
kBF_InvSrcAlpha = GX_BL_INVSRCALPHA,
kBF_DstAlpha = GX_BL_DSTALPHA,
kBF_InvDstAlpha = GX_BL_INVDSTALPHA,
kBF_DstColor = GX_BL_DSTCLR,
kBF_InvDstColor = GX_BL_INVDSTCLR,
};
enum ERglLogicOp {
kLO_Clear = GX_LO_CLEAR,
kLO_And = GX_LO_AND,
kLO_RevAnd = GX_LO_REVAND,
kLO_Copy = GX_LO_COPY,
kLO_InvAnd = GX_LO_INVAND,
kLO_NoOp = GX_LO_NOOP,
kLO_Xor = GX_LO_XOR,
kLO_Or = GX_LO_OR,
kLO_Nor = GX_LO_NOR,
kLO_Equiv = GX_LO_EQUIV,
kLO_Inv = GX_LO_INV,
kLO_RevOr = GX_LO_REVOR,
kLO_InvCopy = GX_LO_INVCOPY,
kLO_InvOr = GX_LO_INVOR,
kLO_NAnd = GX_LO_NAND,
kLO_Set = GX_LO_SET,
};
enum ERglAlphaFunc {
kAF_Never = GX_NEVER,
kAF_Less = GX_LESS,
kAF_Equal = GX_EQUAL,
kAF_LEqual = GX_LEQUAL,
kAF_Greater = GX_GREATER,
kAF_NEqual = GX_NEQUAL,
kAF_GEqual = GX_GEQUAL,
kAF_Always = GX_ALWAYS,
};
enum ERglAlphaOp {
kAO_And = GX_AOP_AND,
kAO_Or = GX_AOP_OR,
kAO_Xor = GX_AOP_XOR,
kAO_XNor = GX_AOP_XNOR,
kAO_Max = GX_MAX_ALPHAOP,
};
enum ERglEnum {
kE_Never = GX_NEVER,
kE_Less = GX_LESS,
kE_Equal = GX_EQUAL,
kE_LEqual = GX_LEQUAL,
kE_Greater = GX_GREATER,
kE_NEqual = GX_NEQUAL,
kE_GEqual = GX_GEQUAL,
kE_Always = GX_ALWAYS,
};
enum ERglCullMode {
kCM_None = GX_CULL_NONE,
kCM_Front = GX_CULL_FRONT,
kCM_Back = GX_CULL_BACK,
kCM_All = GX_CULL_ALL,
};
struct CViewport {
int mLeft;
int mTop;
int mWidth;
int mHeight;
float mHalfWidth;
float mHalfHeight;
};
class CTimeProvider;
class CGraphics {
public:
static bool IsBeginSceneClearFb();
static void SetIsBeginSceneClearFb(bool);
static void BeginScene();
static void EndScene();
static void SetTevOp(ERglTevStage stage, const CTevCombiners::CTevPass& pass);
static void StreamBegin(ERglPrimitive primitive);
static void StreamColor(uint color);
static void StreamColor(const CColor& color);
static void StreamTexcoord(float u, float v);
static void StreamVertex(float, float, float);
static void StreamVertex(const CVector3f& vtx);
static void StreamVertex(const float*);
static void StreamEnd();
static const CViewport& GetViewport() { return mViewport; }
static const CVector3f& GetViewpoint() { return mViewpoint; }
static const CTransform4f& GetViewMatrix() { return mViewMatrix; }
static const CTransform4f& GetModelMatrix() { return mModelMatrix; }
static void SetViewPointMatrix(const CTransform4f&);
static void SetBrightness(float b) { mBrightness = b; }
static void SetOrtho(float left, float right, float top, float bottom, float znear, float zfar);
static float GetSecondsMod900();
static void SetExternalTimeProvider(CTimeProvider* provider);
static void DisableAllLights();
static void SetAmbientColor(const CColor&);
static void SetFog(ERglFogMode mode, float startz, float endz, const CColor& color);
static void SetModelMatrix(const CTransform4f& xf);
static void SetAlphaCompare(ERglAlphaFunc comp0, u8 ref0, ERglAlphaOp op, ERglAlphaFunc comp1,
u8 ref1);
static void SetDepthWriteMode(bool test, ERglEnum comp, bool write);
static void SetBlendMode(ERglBlendMode, ERglBlendFactor, ERglBlendFactor, ERglLogicOp);
static void SetCullMode(ERglCullMode);
// Screen Position
static void sub_80309564(uint* stretch, uint* xOffset, uint* yOffset);
static void sub_803094b0(uint stretch, uint xOffset, uint yOffset);
static CTevCombiners::CTevPass& kEnvPassthru;
static CTevCombiners::CTevPass kEnvModulateConstColor;
static CTevCombiners::CTevPass kEnvConstColor;
static CTevCombiners::CTevPass kEnvModulate;
static CTevCombiners::CTevPass kEnvDecal;
static CTevCombiners::CTevPass kEnvBlend;
static CTevCombiners::CTevPass kEnvReplace;
static CTevCombiners::CTevPass kEnvModulateAlpha;
static CTevCombiners::CTevPass kEnvModulateColor;
static CTevCombiners::CTevPass kEnvModulateColorByalpha;
private:
static CTransform4f mViewMatrix;
static CTransform4f mModelMatrix;
static CViewport mViewport;
static CVector3f mViewpoint;
static float mBrightness;
};
#endif // _CGRAPHICS