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
|