#ifdef USE_D3D9
class D3D9VertexShader : public GraphicsAsset
{
public:
D3D9VertexShader();
~D3D9VertexShader();
void FreeMemory();
void ReleaseMemory();
void Reset(GraphicsDevice &device);
void Init(GraphicsDevice &graphics, const String &Filename);
void Set();
void SetMatrix(const char *Name, const Matrix4 &M)
{
D3DXMATRIX DM = M;
D3DValidate( _constantTable->SetMatrix(_device, Name, &DM), "SetMatrix" );
}
void SetFloat(const char *Name, float Value)
{
D3DValidate( _constantTable->SetFloat(_device, Name, Value), "SetFloat" );
}
void SetVec2(const char *Name, const Vec2f &V)
{
const float V2[2] = {V.x, V.y};
D3DValidate( _constantTable->SetFloatArray(_device, Name, V2, 2), "SetFloatArray" );
}
void SetVec3(const char *Name, const Vec3f &V)
{
const float V3[3] = {V.x, V.y, V.z};
D3DValidate( _constantTable->SetFloatArray(_device, Name, V3, 3), "SetFloatArray" );
}
void SetVec4(const char *Name, const Vec4f &V)
{
const float V4[4] = {V.x, V.y, V.z, V.w};
D3DValidate( _constantTable->SetFloatArray(_device, Name, V4, 4), "SetFloatArray" );
}
LPDIRECT3DDEVICE9 Device()
{
return _device;
}
private:
String _shaderFile;
D3D9VertexDeclaration _declaration;
LPDIRECT3DVERTEXSHADER9 _Shader;
LPDIRECT3DDEVICE9 _device;
LPD3DXCONSTANTTABLE _constantTable;
};
#endif