#ifndef DX11ResourceManager_h_
#define DX11ResourceManager_h_
#include <maya/MViewportRenderer.h>
#include <maya/MDagPath.h>
#include <maya/MObjectHandle.h>
#include <maya/MMessage.h>
#include <maya/MStringArray.h>
#include <string>
#include <map>
#include "DX11GeometryItem.h"
#include "DX11TextureItem.h"
#if defined(DX11_SUPPORTED)
#define WIN32_LEAN_AND_MEAN
#include <d3d11.h>
#if _MSC_VER >= 1700
#include <dxgi.h>
#else
#include <d3dx11.h>
#endif
#include <d3dcompiler.h>
#include <xnamath.h>
struct CameraItem {
XMFLOAT3 m_vEyePt;
XMFLOAT3 m_vLookatPt;
XMFLOAT3 m_vUpVec;
float m_FieldOfView;
float m_nearClip;
float m_farClip;
bool m_isOrtho;
};
struct SurfaceEffectItem
{
ID3D11VertexShader* fVertexShader;
ID3D11PixelShader* fPixelShader;
ID3D11InputLayout* fInputLayout;
};
typedef std::map<std::string, SurfaceEffectItem*> SurfaceEffectItemList;
class DX11ResourceManager
{
public:
DX11ResourceManager();
virtual ~DX11ResourceManager();
D3DGeometry* getGeometry(
const MDagPath& dagPath, ID3D11Device* D3D);
D3DTexture* getTexture(
MObject& mayaTexture);
void clearResources(bool onlyInvalidItems, bool clearShaders);
bool translateCamera(
const MDagPath &cameraPath);
CameraItem* getCamera() { return &m_camera; }
bool initializeDefaultSurfaceEffect(
const MString &effectsLocation, ID3D11Device* D3D,
const D3D11_INPUT_ELEMENT_DESC* layout, int numLayoutElements );
const SurfaceEffectItemList & getSurfaceEffectItemList() const
{
return m_SurfaceEffectItemList;
}
protected:
void initializeDefaultCamera();
GeometryItemList m_geometryItemList;
TextureItemList m_textureItemList;
CameraItem m_camera;
SurfaceEffectItemList m_SurfaceEffectItemList;
};
#endif
#endif