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

📄 mgcsoftrenderer.h

📁 3D Game Engine Design Source Code非常棒
💻 H
字号:
// 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -