Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

122 lines
4.0 KiB

///////////////////////////////////////////////////////////////////////////////
// Copyright (C) Microsoft Corporation, 1998.
//
// AttrFunc.hpp
//
// Direct3D Reference Rasterizer - Attribute Function Processing
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _ATTRFUNC_HPP
#define _ATTRFUNC_HPP
enum RRPrimType { RR_POINT, RR_LINE, RR_TRIANGLE };
//-----------------------------------------------------------------------------
//
// RRAttribFuncStatic - static data for attribute functions. This is
// per-primitive data (as opposed to per-attribute data which is in arrays of
// RRAttribFunc objects). This would be more elegantly done as static
// data in the RRAttribFunc class, but we need to be able to multiply instance
// the ReferenceRasterizer object and cannot have variable global state.
//
//-----------------------------------------------------------------------------
class RRAttribFuncStatic
{
private:
RRPrimType m_PrimType;
// per-primitive data
FLOAT m_fX0, m_fY0; // first vertex (for initial evaluation)
FLOAT m_fRHW0, m_fRHW1, m_fRHW2; // 1/W data for perspective correction
FLOAT m_fRHQW0[D3DHAL_TSS_MAXSTAGES]; // Q/W data for texture perspective correction
FLOAT m_fRHQW1[D3DHAL_TSS_MAXSTAGES];
FLOAT m_fRHQW2[D3DHAL_TSS_MAXSTAGES];
FLOAT m_fDelX10, m_fDelX02; // x,y deltas
FLOAT m_fDelY01, m_fDelY20; //
FLOAT m_fTriOODet; // 1/determinant for triangle function normalization
FLOAT m_fLineMajorLength; // major length for line function
BOOL m_bLineXMajor; // TRUE if X major for line function
FLOAT m_fRHWA, m_fRHWB, m_fRHWC; // linear function for 1/W
INT32 m_cTextureStages;
FLOAT m_fRHQWA[D3DHAL_TSS_MAXSTAGES]; // linear function for texture Q/W
FLOAT m_fRHQWB[D3DHAL_TSS_MAXSTAGES];
FLOAT m_fRHQWC[D3DHAL_TSS_MAXSTAGES];
// per-pixel data
INT16 m_iX, m_iY;
FLOAT m_fPixelW;
FLOAT m_fPixelQW[D3DHAL_TSS_MAXSTAGES];
friend class RRAttribFunc;
public:
// Set/Get Per-primitive Data
void SetPerTriangleData(
FLOAT fX0, FLOAT fY0, FLOAT fRHW0,
FLOAT fX1, FLOAT fY1, FLOAT fRHW1,
FLOAT fX2, FLOAT fY2, FLOAT fRHW2,
INT32 cTextureStages,
FLOAT* pfRHQW,
FLOAT fDet );
void SetPerLineData(
FLOAT fX0, FLOAT fY0, FLOAT fRHW0,
FLOAT fX1, FLOAT fY1, FLOAT fRHW1,
INT32 cTextureStages,
FLOAT* pfRHQW,
FLOAT fMajorExtent, BOOL bXMajor );
void SetPerPixelData( INT16 iX, INT16 iY );
FLOAT GetPixelW( void );
FLOAT GetPixelQW( INT32 iStage );
FLOAT GetRhqwXGradient( INT32 iStage );
FLOAT GetRhqwYGradient( INT32 iStage );
};
//-----------------------------------------------------------------------------
//
// Primitive attribute function - Stores linear function of form
// `F = A*x + B*y + C' computed during setup and used to compute primitive
// attributes at each pixel location. One of these is used per scalar vertex
// attribute (i.e. one per Red,Green,Blue,Alpha,Z, ...)
//
//-----------------------------------------------------------------------------
class RRAttribFunc
{
private:
// pointer to static data structure
RRAttribFuncStatic* m_pSD;
// attribute function
FLOAT m_fA;
FLOAT m_fB;
FLOAT m_fC;
// flags
BOOL m_bIsPerspective;
public:
void SetStaticDataPointer( RRAttribFuncStatic* pSD ) { m_pSD = pSD; }
// DEFINE
void SetConstant( FLOAT fVal );
void SetLinearFunc( FLOAT fVal0, FLOAT fVal1, FLOAT fVal2 );
void SetPerspFunc( FLOAT fVal0, FLOAT fVal1, FLOAT fVal2 );
void SetPerspFunc( FLOAT fVal0, FLOAT fVal1, FLOAT fVal2, BOOL bWrap, BOOL bIsShadowMap );
FLOAT GetXGradient( void ) { return m_fA; }
FLOAT GetYGradient( void ) { return m_fB; }
// EVALUATE
FLOAT Eval( void );
FLOAT Eval( INT32 iStage );
};
//////////////////////////////////////////////////////////////////////////////
#endif // _ATTRFUNC_HPP