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