#ifndef ASW_GRAPHICS_D3D_H #define ASW_GRAPHICS_D3D_H #include "d3d9.h" #include "d3dx9.h" #include #ifdef WIN32 #pragma comment( lib, "d3d9.lib" ) #pragma comment( lib, "d3dx9.lib" ) #pragma comment( lib, "dxguid.lib" ) #pragma comment( lib, "cgD3D9.lib" ) #endif #include "ASW_Window_W32.h" #define D3D_CHECK(result) if (FAILED(result)) throw Direct3D::Exception(__FILE__, __LINE__, __FUNCTION__, NULL, result); else do {} while (0) #define D3D_CALL(func) do {HRESULT result = m_ptrDevice->func; D3D_CHECK(result);} while (0) #ifdef ASW_DEBUG #define D3D_RUN(func) D3D_CALL(func) #define D3D_RUN_CHECK(result) D3D_CHECK(result) #else #define D3D_RUN(func) m_ptrDevice->func #define D3D_RUN_CHECK(result) do {} while (0) #endif class Direct3D : public ASW::GraphicsApi { friend class ASW::GraphicsApi; private: float m_fltClearDepth; DWORD m_dwdClearColor; IDirect3D9 * m_ptrDirect3D; IDirect3DDevice9 * m_ptrDevice; D3DCAPS9 m_stuCaps; D3DBLEND m_enmBlend[2]; const ASW::Texture * m_ptrActiveTexture; static const D3DPRIMITIVETYPE m_enmPrimitiveTypes[ASW::Type::PRIMITIVE_COUNT]; static const D3DTRANSFORMSTATETYPE m_enmMatrixTypes[ASW::Type::MATRIX_COUNT]; static const D3DSTENCILOP m_enmStencilOps[ASW::GraphicsApi::STENCILOP_COUNT]; static const D3DCMPFUNC m_enmTests[ASW::GraphicsApi::TEST_COUNT]; D3DFORMAT FindFormat(const ASW::Window::Settings &); protected: virtual void PrivateDestroy(); public: struct Exception : public ASW::Exception { const HRESULT m_hndError; Exception(const char * File, const unsigned int Line, const char * Function, const char * Detail, const HRESULT Error); virtual void Print(UTIL::Output &); virtual const char * Type(); }; Direct3D(WindowW32 &, const ASW::GraphicsApi::Settings &); virtual ~Direct3D() {Destroy();} virtual void Bind(const ASW::Material &); virtual void Bind(const ASW::Texture *, const unsigned int); virtual void Bind(const ASW::BufferIndex *); virtual void Bind(const ASW::BufferVertex *); virtual void Bind(const ASW::Shader *, const ASW::Type::Shader); virtual void Blend(const ASW::GraphicsApi::BlendType, const ASW::GraphicsApi::BlendType); virtual void BufferClear(const unsigned int); virtual void BufferEnable(const unsigned int, const bool); virtual void BufferInfo(const ASW::BufferVertex &); virtual bool CheckEnable(const ASW::GraphicsApi::PropertyType); virtual void ClearDepth(const float); virtual void ClearColor(const unsigned char, const unsigned char, const unsigned char, const unsigned char); virtual void CullMode(const ASW::GraphicsApi::CullType); virtual void Draw(const ASW::Type::Primitive, const ASW::BufferVertex::Index &); virtual void Draw(const ASW::Type::Primitive, const ASW::BufferIndex::Index &); virtual void DrawIndices(const ASW::Type::Primitive, const ASW::CompositeIndex **, const unsigned int); virtual void DrawVertices(const ASW::Type::Primitive, const ASW::CompositeIndex **, const unsigned int); virtual void DrawEnd(); virtual void DrawStart(); virtual void Enable(const ASW::GraphicsApi::PropertyType, const bool); virtual void EnableLight(const unsigned int, const bool); virtual void FillMode(const ASW::GraphicsApi::FillType); virtual ASW::Colorf GetAmbience(); virtual void GetDeviceInfo(std::string & Device, std::string & Api); virtual ASW::Point4i GetViewport(ASW::Point2f *); virtual void Load(ASW::Buffer &); virtual bool Load(ASW::Font &); virtual bool Load(ASW::Texture &); virtual bool Load(ASW::Shader &, const char *, const char *); virtual void * Lock(ASW::Buffer &, const unsigned int, const unsigned int, const ASW::Type::HintAccess); virtual UTIL::D3::Matrix MatrixBuild(const unsigned int, const unsigned int, const float, const float, const float); virtual UTIL::D3::Matrix MatrixGet(const ASW::Type::Matrix); virtual void MatrixSet(const ASW::Type::Matrix, const UTIL::D3::Matrix &); virtual void Print(const ASW::GraphicsApi::DrawTextInfo &); virtual void Resize(const unsigned int, const unsigned int); virtual void Set(ASW::Buffer &, const void *, const unsigned int, const unsigned int); virtual void SetAmbience(const ASW::Colorf &); virtual void SetDepthTest(const ASW::GraphicsApi::Test); virtual void SetLight(const unsigned int, const ASW::Instance::Light &); virtual void SetScissorRectangle(const int, const int, const unsigned int, const unsigned int); virtual void SetStencilWriteMask(const unsigned int, const bool); virtual void SetStencilOp(const ASW::GraphicsApi::StencilOp, const ASW::GraphicsApi::StencilOp, const ASW::GraphicsApi::StencilOp, const bool); virtual void SetStencilTest(const ASW::GraphicsApi::Test, const int, const unsigned int, const bool); virtual void SetStencilParams(const unsigned int, const ASW::GraphicsApi::Test, const ASW::GraphicsApi::StencilOp, const ASW::GraphicsApi::StencilOp, const ASW::GraphicsApi::StencilOp, const int, const unsigned int, const bool); virtual void SetViewport(const ASW::Point4i &, const ASW::Point2f &); virtual ASW::Point2f Size(const ASW::Font &, const char *); virtual void Unload(ASW::Font &); virtual void Unload(ASW::Texture &); virtual void Unload(ASW::Buffer &, const bool); virtual void Unlock(ASW::Buffer &); }; #endif