00001
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 linear_renderer_h
00008 #define linear_renderer_h
00009
00010 #include "ps2s/packet.h"
00011
00012 #include "GL/gl.h"
00013 #include "ps2gl/immgmanager.h"
00014 #include "ps2gl/renderer.h"
00015 #include "ps2gl/base_renderer.h"
00016
00017 class CLinearRenderer : public CBaseRenderer {
00018 protected:
00019 int InputGeomBufSize;
00020
00021
00022 void DrawBlock( CVifSCDmaPacket &packet, CGeometryBlock &block, int maxVertsPerBuffer );
00023
00024
00025 void FindNumBuffers( int numToAdd, int numVertsToRestart,
00026 int numVertsAlreadyInFirstBuffer, int maxVertsPerBuffer,
00027 int &numVertsFirstBuffer, int &numVertsLastBuffer,
00028 int &numBuffers );
00029
00030
00031 void FinishBuffer( CVifSCDmaPacket &packet, int numVertsToBreakStrip,
00032 int numVertsInBuffer, int vu1QuadsPerVert,
00033 int numStripsInBuffer, unsigned short *stripOffsets );
00034
00035
00036 void XferBufferHeader( CVifSCDmaPacket& packet, int numVertsToBreakStrip,
00037 int numVerts,
00038 int numStripsInBuffer, unsigned short *stripOffsets );
00039
00040 public:
00041 CLinearRenderer( void *packet, CRendererProps caps, CRendererProps reqs,
00042 int inQuadsPerVert, int outQuadsPerVert,
00043 int inGeomOffset, int inGeomBufSize,
00044 const char *name)
00045 : CBaseRenderer(packet, caps, reqs,
00046 inQuadsPerVert, outQuadsPerVert, inGeomOffset, name),
00047 InputGeomBufSize(inGeomBufSize)
00048 {}
00049
00050 CLinearRenderer( void *packet,
00051 int inQuadsPerVert, int outQuadsPerVert,
00052 int inGeomOffset, int inGeomBufSize,
00053 const char *name)
00054 : CBaseRenderer(packet, inQuadsPerVert, outQuadsPerVert, inGeomOffset, name),
00055 InputGeomBufSize(inGeomBufSize)
00056 {}
00057
00058 virtual void InitContext( GLenum primType, tU32 rcChanges, bool userRcChanged );
00059 virtual void DrawLinearArrays( CGeometryBlock &block );
00060 virtual int GetPacketQwordSize( const CGeometryBlock &geometry );
00061 virtual CRendererProps GetRenderContextDeps();
00062 virtual bool GetCachePackets( const CGeometryBlock &geometry );
00063 };
00064
00065 #endif // linear_renderer_h