The Render2D Class

Superclasses

The VirtualDisplay Class

Subclasses: MonochromeDisplay& Canvas3D

Render2D

Subclasses: Kneeboard, RenderGMComposite & Render3D


public:
        Render2D()                      {};
        virtual ~Render2D()     {};

        virtual void Setup( ImageBuffer *imageBuffer );
        virtual void Cleanup( void );

        virtual void SetImageBuffer( ImageBuffer *imageBuffer );
        ImageBuffer* GetImageBuffer(void) {return image;};

        virtual void StartFrame( void );
        virtual void ClearFrame( void )         { context.ClearBuffers( MPR_CI_DRAW_BUFFER ); };
        virtual void FinishFrame( void );

        virtual void SetViewport( float leftSide, float topSide, float rightSide, float bottomSide );

        virtual DWORD Color( void )     {return context.CurrentForegroundColor(); };
        virtual void SetColor( DWORD packedRGBA )       {         context.RestoreState(STATE_SOLID); context.SelectForegroundColor( packedRGBA ); };
        virtual void SetBackground( DWORD packedRGBA )  { context.SetState( MPR_STA_BG_COLOR, packedRGBA ); };

        void Render2DPoint( float x1, float y1 );
        void Render2DLine( float x1, float y1, float x2, float y2 );
        void Render2DTri( float x1, float y1, float x2, float y2, float x3, float y3 );
        void Render2DBitmap( int srcX, int srcY, int dstX, int dstY, int w, int h, int sourceWidth, DWORD *source );
        void Render2DBitmap( int srcX, int srcY, int dstX, int dstY, int w, int h, char *filename );
        void ScreenText( float x, float y, char *string, int boxed = 0 );

        virtual void SetLineStyle (int) {};

        // Draw a fan with clipping (must set clip flags first)
        void SetClipFlags( TwoDVertex* vert );
        void ClipAndDraw2DFan( TwoDVertex** vertPointers, unsigned count );

  public:
        // Window and rendering context handles
        ContextMPR                      context;

  protected:
        ImageBuffer                     *image;

  private:
        void IntersectTop(    TwoDVertex *v1, TwoDVertex *v2, TwoDVertex *v );
        void IntersectBottom( TwoDVertex *v1, TwoDVertex *v2, TwoDVertex *v );
        void IntersectLeft(   TwoDVertex *v1, TwoDVertex *v2, TwoDVertex *v );
        void IntersectRight(  TwoDVertex *v1, TwoDVertex *v2, TwoDVertex *v );