⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 raster2d.h

📁 手机游戏绘图类
💻 H
字号:
//////////////////////////////////////////////////////////////////////////////
//
// PocketFrog - The Game Library for Pocket PC Devices
// Copyright 2002  Thierry Tremblay
//
// Permission to use, copy, modify, distribute and sell this software
// and its documentation for any purpose is hereby granted without fee,
// provided that the above copyright notice appear in all copies and
// that both that copyright notice and this permission notice appear
// in supporting documentation.  Thierry Tremblay makes no representations
// about the suitability of this software for any purpose.
// It is provided "as is" without express or implied warranty.
//
//////////////////////////////////////////////////////////////////////////////

#ifndef POCKETFROG_RASTER2D_H
#define POCKETFROG_RASTER2D_H

#include <PocketHAL/surface.h>
#include "../defs.h"

namespace Frog {

struct PixelShader;

namespace Internal {



//////////////////////////////////////////////////////////////////////////////
//
// 2D Rasterizer Interface
//
//////////////////////////////////////////////////////////////////////////////

struct I2DRasterizer
{
    virtual ~I2DRasterizer() {}
    virtual void Blit( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect ) = 0;
    virtual void BlitMask( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect, Pixel colorMask ) = 0;
    virtual void BlitTransform( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source ) = 0;
    virtual void BlitTransformMask( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source, Pixel colorMask ) = 0;
    virtual void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color ) = 0;
    virtual void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color, const Rect& clipper ) = 0;
    virtual void Clear( PHAL::Surface& buffer, Pixel color ) = 0;
    virtual void FillRect( PHAL::Surface& buffer, const Rect& rect, Pixel color ) = 0;
    virtual void HLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color ) = 0;
    virtual void Line( PHAL::Surface& buffer, const Point& P, const Point& Q, Pixel color ) = 0;
    virtual void SetPixel( PHAL::Surface& buffer, const Point& P, Pixel color ) = 0;
    virtual void VLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color ) = 0;
};



//////////////////////////////////////////////////////////////////////////////
//
// Raster2D: Normal 2D Rasterizer
//
//////////////////////////////////////////////////////////////////////////////

class Raster2D : public I2DRasterizer
{
public:

    Raster2D() {}

    // I2DRasterizer
    void Blit( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect );
    void BlitMask( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect, Pixel colorMask );
    void BlitTransform( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source );
    void BlitTransformMask( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source, Pixel colorMask );
    void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color );
    void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color, const Rect& clipper );
    void Clear( PHAL::Surface& buffer, Pixel color );
    void FillRect( PHAL::Surface& buffer, const Rect& rect, Pixel color );
    void HLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color );
    void Line( PHAL::Surface& buffer, const Point& A, const Point& B, Pixel color );
    void SetPixel( PHAL::Surface& buffer, const Point& P, Pixel color );
    void VLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color );
};



//////////////////////////////////////////////////////////////////////////////
//
// AlphaRaster2D: Alpha Blending Rasterizer
//
//////////////////////////////////////////////////////////////////////////////

class AlphaRaster2D : public I2DRasterizer
{
public:

    AlphaRaster2D( int alpha ) : m_alpha(alpha) {}

    // Set the alpha value
    void SetAlpha( int alpha )  { m_alpha = alpha; }

    // I2DRasterizer
    void Blit( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect );
    void BlitMask( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect, Pixel colorMask );
    void BlitTransform( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source );
    void BlitTransformMask( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source, Pixel colorMask );
    void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color );
    void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color, const Rect& clipper );
    void Clear( PHAL::Surface& buffer, Pixel color );
    void FillRect( PHAL::Surface& buffer, const Rect& rect, Pixel color );
    void HLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color );
    void Line( PHAL::Surface& buffer, const Point& A, const Point& B, Pixel color );
    void SetPixel( PHAL::Surface& buffer, const Point& P, Pixel color );
    void VLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color );


private:

    int m_alpha;
};



//////////////////////////////////////////////////////////////////////////////
//
// GenericRaster2D: Generic rasterizer that works with PixelShader objects
//
//////////////////////////////////////////////////////////////////////////////

class GenericRaster2D : public I2DRasterizer
{
public:

    GenericRaster2D( PixelShader* shader ) : m_shader(shader) {}

    // Set the pixel shader
    void SetPixelShader( PixelShader* shader ) { m_shader = shader; }
    
    // I2DRasterizer
    void Blit( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect );
    void BlitMask( PHAL::Surface& buffer, const Rect& destRect, const PHAL::Surface& source, const Rect& srcRect, Pixel colorMask );
    void BlitTransform( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source );
    void BlitTransformMask( PHAL::Surface& buffer, const Rect& destRect, const unsigned transform[3][2], const PHAL::Surface& source, Pixel colorMask );
    void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color );
    void Circle( PHAL::Surface& buffer, const Point& center, int radius, Pixel color, const Rect& clipper );
    void Clear( PHAL::Surface& buffer, Pixel color );
    void FillRect( PHAL::Surface& buffer, const Rect& rect, Pixel color );
    void HLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color );
    void Line( PHAL::Surface& buffer, const Point& A, const Point& B, Pixel color );
    void SetPixel( PHAL::Surface& buffer, const Point& P, Pixel color );
    void VLine( PHAL::Surface& buffer, const Point& P, int length, Pixel color );


private:

    PixelShader* m_shader;  // Pixel shader
};



} // end of namespace Internal
} // end of namespace Frog



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -