12 #include "utils/ColorUtils.h"    13 #include "utils/Geometry.h"    17 #include <DirectXMath.h>    18 #include <d3dx11effect.h>    19 #include <wrl/client.h>    21 #define KODI_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT 4    23 typedef enum SHADER_METHOD {
    24   SHADER_METHOD_RENDER_DEFAULT,
    25   SHADER_METHOD_RENDER_TEXTURE_NOBLEND,
    26   SHADER_METHOD_RENDER_FONT,
    27   SHADER_METHOD_RENDER_TEXTURE_BLEND,
    28   SHADER_METHOD_RENDER_MULTI_TEXTURE_BLEND,
    29   SHADER_METHOD_RENDER_STEREO_INTERLACED_LEFT,
    30   SHADER_METHOD_RENDER_STEREO_INTERLACED_RIGHT,
    31   SHADER_METHOD_RENDER_STEREO_CHECKERBOARD_LEFT,
    32   SHADER_METHOD_RENDER_STEREO_CHECKERBOARD_RIGHT,
    33   SHADER_METHOD_RENDER_COUNT
    41   virtual void OnDestroyDevice(
bool fatal)=0;
    42   virtual void OnCreateDevice()=0;
    48   bool m_bRegistered = 
false;
    54   static inline void XMStoreColor(
float* floats, DWORD dword)
    56     floats[0] = float((dword >> 16) & 0xFF) * (1.0f / 255.0f); 
    57     floats[1] = float((dword >>  8) & 0xFF) * (1.0f / 255.0f); 
    58     floats[2] = float((dword >>  0) & 0xFF) * (1.0f / 255.0f); 
    59     floats[3] = float((dword >> 24) & 0xFF) * (1.0f / 255.0f); 
    62   static inline void XMStoreColor(DirectX::XMFLOAT4* floats, DWORD dword)
    64     XMStoreColor(reinterpret_cast<float*>(floats), dword);
    67   static inline void XMStoreColor(
float* floats, 
unsigned char a, 
unsigned char r, 
unsigned char g, 
unsigned char b)
    69     floats[0] = r * (1.0f / 255.0f);
    70     floats[1] = g * (1.0f / 255.0f);
    71     floats[2] = b * (1.0f / 255.0f);
    72     floats[3] = a * (1.0f / 255.0f);
    75   static inline void XMStoreColor(DirectX::XMFLOAT4* floats, 
unsigned char a, 
unsigned char r, 
unsigned char g, 
unsigned char b)
    77     XMStoreColor(reinterpret_cast<float*>(floats), a, r, g, b);
    81   static inline void PSClearShaderResources(ID3D11DeviceContext* pContext)
    83     ID3D11ShaderResourceView* shader_resource_views[KODI_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT] = {};
    84     pContext->PSSetShaderResources(0, ARRAYSIZE(shader_resource_views), shader_resource_views);
    87   static size_t BitsPerPixel(DXGI_FORMAT 
fmt);
    96   bool Create(UINT width, UINT height, UINT mipLevels, D3D11_USAGE usage, DXGI_FORMAT format, 
const void* pInitData = 
nullptr, 
unsigned int srcPitch = 0);
    99   bool GetDesc(D3D11_TEXTURE2D_DESC *desc) 
const;
   100   bool LockRect(UINT subresource, D3D11_MAPPED_SUBRESOURCE *res, D3D11_MAP mapType) 
const;
   101   bool UnlockRect(UINT subresource) 
const;
   104   ID3D11Texture2D* Get()
 const { 
return m_texture.Get(); }
   105   ID3D11ShaderResourceView* GetShaderResource(DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN);
   106   ID3D11ShaderResourceView** GetAddressOfSRV(DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN);
   107   ID3D11RenderTargetView* GetRenderTarget();
   108   ID3D11RenderTargetView** GetAddressOfRTV();
   109   UINT GetWidth()
  const { 
return m_width; }
   110   UINT GetHeight()
 const { 
return m_height; }
   111   DXGI_FORMAT GetFormat()
 const { 
return m_format; }
   112   void GenerateMipmaps();
   115   static void DrawQuad(
const CPoint points[4],
   116                        UTILS::COLOR::Color color,
   118                        const CRect* texCoords,
   119                        SHADER_METHOD options = SHADER_METHOD_RENDER_TEXTURE_BLEND);
   121   static void DrawQuad(
const CPoint points[4],
   122                        UTILS::COLOR::Color color,
   124                        ID3D11ShaderResourceView** view,
   125                        const CRect* texCoords,
   126                        SHADER_METHOD options = SHADER_METHOD_RENDER_TEXTURE_BLEND);
   128   static void DrawQuad(
const CRect& coords,
   129                        UTILS::COLOR::Color color,
   131                        const CRect* texCoords,
   132                        SHADER_METHOD options = SHADER_METHOD_RENDER_TEXTURE_BLEND);
   134   static void DrawQuad(
const CRect& coords,
   135                        UTILS::COLOR::Color color,
   137                        ID3D11ShaderResourceView** view,
   138                        const CRect* texCoords,
   139                        SHADER_METHOD options = SHADER_METHOD_RENDER_TEXTURE_BLEND);
   141   void OnDestroyDevice(
bool fatal) 
override;
   142   void OnCreateDevice() 
override;
   145   ID3D11RenderTargetView* GetRenderTargetInternal(
unsigned idx = 0);
   146   unsigned int GetMemoryUsage(
unsigned int pitch) 
const;
   147   bool CreateInternal(
const void* pInitData = 
nullptr, 
unsigned int srcPitch = 0);
   150   void RestoreTexture();
   163   DXGI_FORMAT m_format;
   166   Microsoft::WRL::ComPtr<ID3D11Texture2D> m_texture;
   167   Microsoft::WRL::ComPtr<ID3D11RenderTargetView> m_renderTargets[2];
   169   std::map<DXGI_FORMAT, Microsoft::WRL::ComPtr<ID3D11ShaderResourceView>> m_views;
   172 typedef std::map<std::string, std::string> DefinesMap;
   179   bool Create(
const std::string &effectString, DefinesMap* defines);
   181   bool SetFloatArray(LPCSTR handle, 
const float* val, 
unsigned int count);
   182   bool SetMatrix(LPCSTR handle, 
const float* mat);
   183   bool SetTechnique(LPCSTR handle);
   184   bool SetTexture(LPCSTR handle, 
CD3DTexture &texture);
   185   bool SetResources(LPCSTR handle, ID3D11ShaderResourceView** ppSRViews, 
size_t count);
   186   bool SetConstantBuffer(LPCSTR handle, ID3D11Buffer *buffer);
   187   bool SetScalar(LPCSTR handle, 
float value);
   188   bool Begin(UINT *passes, DWORD flags);
   189   bool BeginPass(UINT pass);
   193   ID3DX11Effect* Get()
 const { 
return m_effect.Get(); }
   195   void OnDestroyDevice(
bool fatal) 
override;
   196   void OnCreateDevice() 
override;
   199   __declspec(nothrow) HRESULT __stdcall Open(D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) 
override;
   200   __declspec(nothrow) HRESULT __stdcall Close(LPCVOID pData) 
override;
   205   std::string m_effectString;
   206   DefinesMap m_defines;
   207   Microsoft::WRL::ComPtr<ID3DX11Effect> m_effect;
   208   Microsoft::WRL::ComPtr<ID3DX11EffectTechnique> m_techniquie;
   209   Microsoft::WRL::ComPtr<ID3DX11EffectPass> m_currentPass;
   217   bool Create(D3D11_BIND_FLAG type, UINT count, UINT stride, DXGI_FORMAT format, D3D11_USAGE usage, 
const void* initData = 
nullptr);
   218   bool Map(
void** resource);
   221   unsigned int GetStride() { 
return m_stride; }
   222   DXGI_FORMAT GetFormat() { 
return m_format; }
   223   ID3D11Buffer* Get()
 const { 
return m_buffer.Get(); }
   225   void OnDestroyDevice(
bool fatal) 
override;
   226   void OnCreateDevice() 
override;
   229   bool CreateBuffer(
const void *pData);
   236   DXGI_FORMAT m_format;
   238   D3D11_BIND_FLAG m_type;
   239   Microsoft::WRL::ComPtr<ID3D11Buffer> m_buffer;
   248   bool Create(
const std::wstring& vertexFile, D3D11_INPUT_ELEMENT_DESC* vertexLayout, 
unsigned int vertexLayoutSize);
   249   bool Create(
const void* 
code, 
size_t codeLength, D3D11_INPUT_ELEMENT_DESC* vertexLayout, 
unsigned int vertexLayoutSize);
   250   void ReleaseShader();
   254   bool IsInited() { 
return m_inited; }
   256   void OnDestroyDevice(
bool fatal) 
override;
   257   void OnCreateDevice() 
override;
   260   bool CreateInternal();
   263   unsigned int m_vertexLayoutSize;
   264   D3D11_INPUT_ELEMENT_DESC* m_vertexLayout;
   265   Microsoft::WRL::ComPtr<ID3DBlob> m_VSBuffer;
   266   Microsoft::WRL::ComPtr<ID3D11VertexShader> m_VS;
   267   Microsoft::WRL::ComPtr<ID3D11InputLayout> m_inputLayout;
   276   bool Create(
const std::wstring& wstrFile);
   277   bool Create(
const void* 
code, 
size_t codeLength);
   278   void ReleaseShader();
   282   bool IsInited() { 
return m_inited; }
   284   void OnDestroyDevice(
bool fatal) 
override;
   285   void OnCreateDevice() 
override;
   288   bool CreateInternal();
   291   Microsoft::WRL::ComPtr<ID3DBlob> m_PSBuffer;
   292   Microsoft::WRL::ComPtr<ID3D11PixelShader> m_PS;
 Definition: D3DResource.h:90
Definition: D3DResource.h:174
Definition: D3DResource.h:270
Definition: D3DResource.h:36
Definition: inftrees.h:24
Definition: D3DResource.h:51
Definition: D3DResource.h:242
Definition: D3DResource.h:212