#ifndef DX11ViewportRenderer_h_
#define DX11ViewportRenderer_h_
#include <maya/MImage.h>
#include <maya/MViewportRenderer.h>
#include <maya/MDagPath.h>
#include <maya/MObjectHandle.h>
#include <maya/MMessage.h>
#include <maya/MStringArray.h>
#include <maya/MMatrix.h>
#include <list>
#include "DX11ResourceManager.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 <xnamath.h>
#endif
#if defined(DX11_SUPPORTED)
struct FixedFunctionVertex
{
XMFLOAT3 fPosition;
XMFLOAT3 fNormal;
XMFLOAT2 fUV;
};
struct FixedFunctionConstants
{
XMMATRIX wvIT;
XMMATRIX wvp;
XMMATRIX wv;
XMFLOAT4 lightDir;
XMFLOAT4 lightColor;
XMFLOAT4 ambientLight;
XMFLOAT4 diffuseMaterial;
XMFLOAT4 specularColor;
float diffuseCoeff;
float shininess;
float transparency;
};
#endif
#pragma warning (disable:4324)
#pragma warning (disable:4239)
#pragma warning (disable:4701)
{
public:
DX11ViewportRenderer();
virtual ~DX11ViewportRenderer();
float version );
protected:
RenderingAPI m_API;
float m_Version;
unsigned int m_renderWidth;
unsigned int m_renderHeight;
#if defined(DX11_SUPPORTED)
public:
bool buildRenderTargets(unsigned int width, unsigned int height);
bool drawSurface(
const MDagPath &dagPath,
bool active,
bool templated);
bool readFromTargetToSystemMemory();
const DX11ResourceManager& resourceManager() const { return m_resourceManager; }
void clearResources(bool onlyInvalidItems, bool clearShaders);
bool createBoundsBuffers();
bool createRasterizerStates();
protected:
HWND m_hWnd;
ID3D11Device* m_pD3DDevice;
ID3D11DeviceContext* m_pD3DDeviceCtx;
ID3D11RasterizerState* m_pNormalRS;
ID3D11RasterizerState* m_pWireframeRS;
bool m_wantFloatingPointTargets;
DXGI_FORMAT m_intermediateTargetFormat;
DXGI_FORMAT m_outputTargetFormat;
ID3D11Texture2D* m_pTextureInterm;
ID3D11RenderTargetView* m_pTextureIntermView;
ID3D11Texture2D* m_pTextureOutput;
ID3D11RenderTargetView* m_pTextureOutputView;
DXGI_FORMAT m_depthStencilFormat;
bool m_requireDepthStencilReadback;
ID3D11Texture2D* m_pDepthStencil;
ID3D11DepthStencilView* m_pDepthStencilView;
ID3D11Texture2D* m_pTextureReadBack;
XMMATRIX m_matWorld;
struct BoundsVertex
{
XMFLOAT3 fPosition;
};
struct BoundsConstants
{
XMMATRIX fWVP;
XMFLOAT3 fDiffuseMaterial;
};
ID3D11Buffer* m_pBoundsVertexBuffer;
ID3D11Buffer* m_pBoundsIndexBuffer;
ID3D11Buffer* m_pBoundsConstantBuffer;
ID3D11Buffer* m_pFixedFunctionConstantBuffer;
DX11ResourceManager m_resourceManager;
XMMATRIX m_currentViewMatrix;
XMMATRIX m_currentProjectionMatrix;
#endif
};
#endif