File: Wm5Dx9RendererData.h

package info (click to toggle)
libwildmagic 5.17%2Bcleaned1-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 90,124 kB
  • sloc: cpp: 215,940; csh: 637; sh: 91; makefile: 40
file content (129 lines) | stat: -rw-r--r-- 3,400 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// Geometric Tools, LLC
// Copyright (c) 1998-2014
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
//
// File Version: 5.0.0 (2010/01/01)

#ifndef WM5DX9RENDERERDATA_H
#define WM5DX9RENDERERDATA_H

#include "Wm5Dx9RendererLIB.h"
#include "Wm5Dx9RendererInput.h"
#include "Wm5AlphaState.h"
#include "Wm5CullState.h"
#include "Wm5DepthState.h"
#include "Wm5OffsetState.h"
#include "Wm5StencilState.h"
#include "Wm5WireState.h"
#include "Wm5Texture.h"

namespace Wm5
{

class RendererData
{
public:
    // Construction and destruction.
    RendererData (RendererInput& input, int width, int height,
        Texture::Format colorFormat, Texture::Format depthStencilFormat,
        int numMultisamples);

    ~RendererData ();

    // Support for construction, destruction, and device resetting.
    void CreateUniqueFont ();
    void DestroyUniqueFont ();
    void SetDefaultStates (const AlphaState* astate, const CullState* cstate,
        const DepthState* dstate, const OffsetState* ostate,
        const StencilState* sstate, const WireState* wstate);

    // Maintain current render states to avoid redundant state changes.
    class RenderState
    {
    public:
        RenderState ();

        void Initialize (IDirect3DDevice9* device, const AlphaState* astate,
            const CullState* cstate, const DepthState* dstate,
            const OffsetState* ostate, const StencilState* sstate,
            const WireState* wstate);

        // AlphaState
        DWORD mAlphaBlendEnable;
        DWORD mAlphaSrcBlend;
        DWORD mAlphaDstBlend;
        DWORD mAlphaTestEnable;
        DWORD mAlphaFunc;
        DWORD mAlphaRef;
        D3DCOLOR mBlendFactor;

        // CullState
        DWORD mCullMode;

        // DepthState
        DWORD mZEnable;
        DWORD mZFunc;
        DWORD mZWriteEnable;

        // OffsetState
        DWORD mSlopeScaleDepthBias;
        DWORD mDepthBias;

        // StencilState
        DWORD mStencilEnable;
        DWORD mStencilFunc;
        DWORD mStencilRef;
        DWORD mStencilMask;
        DWORD mStencilWriteMask;
        DWORD mStencilFail;
        DWORD mStencilZFail;
        DWORD mStencilPass;

        // WireState
        DWORD mFillMode;
    };

    // Maintain current sampler states to avoid redundant state changes.
    enum
    {
        MAX_NUM_VSAMPLERS = 4,  // VSModel 3 has 4, VSModel 2 has 0.
        MAX_NUM_PSAMPLERS = 16  // PSModel 2 and PSModel 3 have 16.
    };

    class SamplerState
    {
    public:
        SamplerState ();

        float mAnisotropy;
        float mLodBias;
        DWORD mMagFilter;
        DWORD mMinFilter;
        DWORD mMipFilter;
        D3DCOLOR mBorderColor;
        DWORD mWrap[3];
    };

    // Platform-dependent data.
    IDirect3DDevice9* mDevice;
    HWND mWindowHandle;
    D3DPRESENT_PARAMETERS mPresent;
    LPD3DXFONT mFont;
    bool mDeviceLost;

    // State data.
    RenderState mCurrentRS;
    SamplerState mCurrentVSState[MAX_NUM_VSAMPLERS];
    SamplerState mCurrentPSState[MAX_NUM_PSAMPLERS];

    // Capabilities (queried at run time).
    int mMaxVShaderImages;
    int mMaxPShaderImages;
    int mMaxTCoords;
};

}

#endif