Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

renderermanager.h

Go to the documentation of this file.
00001 /*        Copyright (C) 2000,2001,2002  Sony Computer Entertainment America
00002           
00003           This file is subject to the terms and conditions of the GNU Lesser
00004           General Public License Version 2.1. See the file "COPYING" in the
00005           main directory of this archive for more details.                             */
00006 
00007 #ifndef ps2gl_renderermanager_h
00008 #define ps2gl_renderermanager_h
00009 
00010 // PLIN
00011 // #include "eestruct.h"
00012 
00013 #include "ps2s/vif.h"
00014 
00015 #include "GL/gl.h"
00016 #include "GL/ps2gl.h"
00017 
00018 #include "ps2gl/renderer.h"
00019 #include "ps2gl/base_renderer.h"
00020 
00021 /********************************************
00022  * CRendererManager
00023  */
00024 
00025 class CGLContext;
00026 class CImmGeomManager;
00027 class CVifSCDmaPacket;
00028 class CGeometryBlock;
00029 class CRenderer;
00030 
00031 typedef enum { kDirectional, kPoint, kSpot } tLightType;
00032 
00033 typedef struct {
00034       tU64      capabilities;
00035       tU64      requirements;
00036       CRenderer *renderer;
00037 } tRenderer __attribute__ (( aligned(8) ));
00038 
00039 class CRendererManager {
00040       CGLContext        &GLContext;
00041 
00042       CRendererProps    RendererRequirements;
00043       bool              RendererReqsHaveChanged;
00044       tU64              CurUserPrimReqs, CurUserPrimReqMask;
00045 
00046       static const int  kMaxDefaultRenderers = 64;
00047       static const int  kMaxUserRenderers = PGL_MAX_CUSTOM_RENDERERS;
00048       tRenderer         DefaultRenderers[kMaxDefaultRenderers];
00049       tRenderer         UserRenderers[kMaxUserRenderers];
00050       int               NumDefaultRenderers, NumUserRenderers;
00051       const tRenderer   *CurrentRenderer, *NewRenderer;
00052 
00053       void RegisterDefaultRenderer( CRenderer *renderer );
00054 
00055    public:
00056       CRendererManager( CGLContext &context);
00057 
00058       void RegisterUserRenderer( CRenderer *renderer );
00059 
00060       bool UpdateNewRenderer();
00061       void MakeNewRendererCurrent();
00062       void LoadRenderer( CVifSCDmaPacket &packet );
00063 
00064       CRenderer& GetCurRenderer() { return *(CurrentRenderer->renderer); }
00065       CRendererProps GetRendererReqs() const { return RendererRequirements; }
00066 
00067       bool IsCurRendererCustom() const { return ((tU32)CurrentRenderer >= (tU32)UserRenderers); }
00068 
00069       // state updates
00070 
00071       void EnableCustom( tU64 flag );
00072       void DisableCustom( tU64 flag );
00073 
00074       void NumLightsChanged( tLightType type, int num );
00075       void PrimChanged( unsigned int prim );
00076       void TexEnabledChanged( bool enabled );
00077       void LightingEnabledChanged( bool enabled );
00078       void SpecularEnabledChanged( bool enabled );
00079       void PerVtxMaterialChanged( RendererProps::tPerVtxMaterial matType );
00080       void ClippingEnabledChanged( bool enabled );
00081       void CullFaceEnabledChanged( bool enabled );
00082       void ArrayAccessChanged( RendererProps::tArrayAccess accessType );
00083 };
00084 
00085 #endif // ps2gl_renderermanager_h

ps2gl version cvs