PS2GL
OpenGL*-like API for the PS2
Loading...
Searching...
No Matches
renderermanager.h
1/* Copyright (C) 2000,2001,2002 Sony Computer Entertainment America
2
3 This file is subject to the terms and conditions of the GNU Lesser
4 General Public License Version 2.1. See the file "COPYING" in the
5 main directory of this archive for more details. */
6
7#ifndef ps2gl_renderermanager_h
8#define ps2gl_renderermanager_h
9
10// PLIN
11// #include "eestruct.h"
12
13#include "ps2s/vif.h"
14
15#include "GL/gl.h"
16#include "GL/ps2gl.h"
17
18#include "ps2gl/base_renderer.h"
19#include "ps2gl/renderer.h"
20
21/********************************************
22 * CRendererManager
23 */
24
25class CGLContext;
26class CImmGeomManager;
27class CVifSCDmaPacket;
28class CGeometryBlock;
29class CRenderer;
30
31typedef enum { kDirectional,
32 kPoint,
33 kSpot } tLightType;
34
35typedef struct {
36 tU64 capabilities;
37 tU64 requirements;
38 CRenderer* renderer;
39} tRenderer;
40
42 CGLContext& GLContext;
43
44 CRendererProps RendererRequirements;
45 bool RendererReqsHaveChanged;
46 tU64 CurUserPrimReqs, CurUserPrimReqMask;
47
48 static const int kMaxDefaultRenderers = 64;
49 static const int kMaxUserRenderers = PGL_MAX_CUSTOM_RENDERERS;
50 tRenderer DefaultRenderers[kMaxDefaultRenderers];
51 tRenderer UserRenderers[kMaxUserRenderers];
52 int NumDefaultRenderers, NumUserRenderers;
53 const tRenderer *CurrentRenderer, *NewRenderer;
54
55 void RegisterDefaultRenderer(CRenderer* renderer);
56
57public:
59
60 void RegisterUserRenderer(CRenderer* renderer);
61
62 bool UpdateNewRenderer();
63 void MakeNewRendererCurrent();
64 void LoadRenderer(CVifSCDmaPacket& packet);
65
66 CRenderer& GetCurRenderer() { return *(CurrentRenderer->renderer); }
67 CRendererProps GetRendererReqs() const { return RendererRequirements; }
68
69 bool IsCurRendererCustom() const { return ((tU32)CurrentRenderer >= (tU32)UserRenderers); }
70
71 // state updates
72
73 void EnableCustom(tU64 flag);
74 void DisableCustom(tU64 flag);
75
76 void NumLightsChanged(tLightType type, int num);
77 void PrimChanged(unsigned int prim);
78 void TexEnabledChanged(bool enabled);
79 void LightingEnabledChanged(bool enabled);
80 void SpecularEnabledChanged(bool enabled);
81 void PerVtxMaterialChanged(RendererProps::tPerVtxMaterial matType);
82 void ClippingEnabledChanged(bool enabled);
83 void CullFaceEnabledChanged(bool enabled);
84 void ArrayAccessChanged(RendererProps::tArrayAccess accessType);
85};
86
87#endif // ps2gl_renderermanager_h