#pragma once // Helper class // // clipping is done in integer // class CSimpleTriangleRasterizer { public: class IRasterizeSink { public: //! is called once per triangel for the first possible visible line //! /param iniStartY virtual void Triangle( const int iniStartY ) { } //! callback function //! /param infXLeft included - not clipped against left and reight border //! /param infXRight excluded - not clipped against left and reight border //! /param iniXLeft included //! /param iniXRight excluded //! /param iniY virtual void Line( const float infXLeft, const float infXRight, const int iniXLeft, const int iniXRight, const int iniY )=0; }; typedef unsigned long DWORD; // ----------------------------------------------------- //! implementation sink sample class CDWORDFlatFill: public IRasterizeSink { public: //! constructor CDWORDFlatFill( DWORD *inpBuffer, const DWORD indwPitchInPixels, DWORD indwValue ) { m_dwValue=indwValue; m_pBuffer=inpBuffer; m_dwPitchInPixels=indwPitchInPixels; } virtual void Triangle( const int iniY ) { m_pBufferLine=&m_pBuffer[iniY*m_dwPitchInPixels]; } virtual void Line( const float infXLeft, const float infXRight, const int iniLeft, const int iniRight, const int iniY ) { DWORD *mem=&m_pBufferLine[iniLeft]; for(int x=iniLeft;x