mgcsoftrenderer.h

来自「《3D游戏引擎设计》的源码」· C头文件 代码 · 共 118 行

H
118
字号
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement.  The various license agreements may be found at
// the Magic Software web site.  This file is subject to the license
//
// RESTRICTED USE SOURCE CODE
// http://www.magic-software.com/License/restricted.pdf

#ifndef MGCSOFTRENDERER_H
#define MGCSOFTRENDERER_H

#include <windows.h>
#include "MgcGPRenderer.h"
#include "MgcSoftColor.h"
#include "MgcSoftImage.h"


class MgcSoftRenderer : public MgcGPRenderer
{
    MgcDeclareRTTI;
    MgcDeclareStream;

public:
    MgcSoftRenderer (HWND hWnd, int iWidth, int iHeight);
    virtual ~MgcSoftRenderer ();

    virtual void SetBackgroundColor (const MgcColor& rkColor);
    virtual void ClearBackBuffer ();
    virtual void DisplayBackBuffer ();
    virtual void ClearZBuffer ();
    virtual void ClearBuffers ();

protected:
    MgcSoftRenderer ();

    // rasterizer selection
    int GetRasterizerIndex ();

    // edge rasterizing
    typedef void (MgcSoftRenderer::*ERasterizer)(unsigned int, unsigned int);
    ERasterizer m_oERasterizer;
    static ERasterizer ms_aoERasterizer[32];
    virtual void RasterizeEdges ();

    void DrawEdgeNULL (unsigned, unsigned);
    void DrawEdgeC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeT (unsigned uiV0, unsigned uiV1);
    void DrawEdgeTC (unsigned uiV0, unsigned uiV1);
    void DrawEdgePT (unsigned uiV0, unsigned uiV1);
    void DrawEdgePTC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeZC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeZT (unsigned uiV0, unsigned uiV1);
    void DrawEdgeZTC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeZPT (unsigned uiV0, unsigned uiV1);
    void DrawEdgeZPTC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAT (unsigned uiV0, unsigned uiV1);
    void DrawEdgeATC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAPT (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAPTC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAZC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAZT (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAZTC (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAZPT (unsigned uiV0, unsigned uiV1);
    void DrawEdgeAZPTC (unsigned uiV0, unsigned uiV1);

    // triangle rasterizers
    typedef void (MgcSoftRenderer::*TRasterizer)(unsigned int, unsigned int,
        unsigned int);
    TRasterizer m_oTRasterizer;
    static TRasterizer ms_aoTRasterizer[32];
    virtual void RasterizeTriangles ();

    void DrawTriNULL (unsigned, unsigned, unsigned);
    void DrawTriC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriTC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriPT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriPTC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriZC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriZT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriZTC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriZPT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriZPTC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriATC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAPT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAPTC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAZC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAZT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAZTC (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAZPT (unsigned uiV0, unsigned uiV1, unsigned uiV2);
    void DrawTriAZPTC (unsigned uiV0, unsigned uiV1, unsigned uiV2);

    // window parameters
    HWND m_hWnd;
    HDC m_hWindowDC, m_hMemoryDC;
    HBITMAP m_hBufferBitmap;
    MgcSoftColor* m_akBuffer;
    MgcSoftColor m_kBackgroundSoftColor;

    // current texture image
    MgcSoftImage m_kImage;

    // depth buffer
    unsigned short* m_ausZBuffer;
};

MgcSmartPointer(MgcSoftRenderer);
MgcRegisterStream(MgcSoftRenderer);

#endif

⌨️ 快捷键说明

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