///////////////////////////////////////////////////////////////////////////////////////////
// Direct3D.cpp
//
//  Implementation of the Direct3D class, which wraps a Direct3D 8 object.

#include "stdafx.h"
#include "Direct3D.h"

#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "d3dx.lib")
#pragma comment(lib, "ole32.lib")

namespace Sunlight
{
    namespace DirectX
    {
        namespace Graphics
        {
            Direct3D::Direct3D()
            {
                m_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
                if (m_pD3D == NULL)
                    throw new Sunlight::DirectX::DirectXException(S"::Direct3DCreate8", E_FAIL);

                // Get the default desktop display mode
                D3DDISPLAYMODE __pin *pd3ddm = &DefaultDisplayMode;

                HRESULT h = ((LPDIRECT3D8)m_pD3D)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, pd3ddm);
                if (FAILED(h))
                    throw new Sunlight::DirectX::DirectXException(S"IDirect3D8::GetAdapterDisplayMode", h);
            }

            Direct3D::~Direct3D()
            {
                if (m_pD3D != NULL)
                {
                    ((LPDIRECT3D8)m_pD3D)->Release();
                    m_pD3D = NULL;
                }
            }

            void *Direct3D::GetDirect3D()
            {
                return m_pD3D;
            }
        }
    }
}