]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/CD3D9ShaderMaterialRenderer.h
Fix some more problems with OSX build file.
[irrlicht.git] / source / Irrlicht / CD3D9ShaderMaterialRenderer.h
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt\r
2 // This file is part of the "Irrlicht Engine".\r
3 // For conditions of distribution and use, see copyright notice in irrlicht.h\r
4 \r
5 #ifndef __C_D3D9_SHADER_MATERIAL_RENDERER_H_INCLUDED__\r
6 #define __C_D3D9_SHADER_MATERIAL_RENDERER_H_INCLUDED__\r
7 \r
8 #include "IrrCompileConfig.h"\r
9 #ifdef _IRR_WINDOWS_\r
10 \r
11 #ifdef _IRR_COMPILE_WITH_DIRECT3D_9_\r
12 #if defined(__BORLANDC__) || defined (__BCPLUSPLUS__)\r
13 #include "irrMath.h"    // needed by borland for sqrtf define\r
14 #endif\r
15 #include <d3dx9shader.h>\r
16 \r
17 #include "IMaterialRenderer.h"\r
18 \r
19 namespace irr\r
20 {\r
21 namespace video\r
22 {\r
23 \r
24 class IVideoDriver;\r
25 class IShaderConstantSetCallBack;\r
26 class IMaterialRenderer;\r
27 \r
28 //! Class for using vertex and pixel shaders with D3D9\r
29 class CD3D9ShaderMaterialRenderer : public IMaterialRenderer\r
30 {\r
31 public:\r
32 \r
33         //! Public constructor\r
34         CD3D9ShaderMaterialRenderer(IDirect3DDevice9* d3ddev, video::IVideoDriver* driver,\r
35                 s32& outMaterialTypeNr, const c8* vertexShaderProgram, const c8* pixelShaderProgram,\r
36                 IShaderConstantSetCallBack* callback, IMaterialRenderer* baseMaterial, s32 userData);\r
37 \r
38         //! Destructor\r
39         ~CD3D9ShaderMaterialRenderer();\r
40 \r
41         virtual void OnSetMaterial(const video::SMaterial& material, const video::SMaterial& lastMaterial,\r
42                 bool resetAllRenderstates, video::IMaterialRendererServices* services) _IRR_OVERRIDE_;\r
43 \r
44         virtual void OnUnsetMaterial() _IRR_OVERRIDE_;\r
45 \r
46         virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) _IRR_OVERRIDE_;\r
47 \r
48         //! Returns if the material is transparent.\r
49         virtual bool isTransparent() const _IRR_OVERRIDE_;\r
50 \r
51         //! Access the callback provided by the users when creating shader materials\r
52         virtual IShaderConstantSetCallBack* getShaderConstantSetCallBack() const _IRR_OVERRIDE_\r
53         { \r
54                 return CallBack;\r
55         }\r
56 \r
57 protected:\r
58 \r
59         //! constructor only for use by derived classes who want to\r
60         //! create a fall back material for example.\r
61         CD3D9ShaderMaterialRenderer(IDirect3DDevice9* d3ddev,\r
62                                         video::IVideoDriver* driver,\r
63                                         IShaderConstantSetCallBack* callback,\r
64                                         IMaterialRenderer* baseMaterial,\r
65                                         s32 userData=0);\r
66 \r
67         void init(s32& outMaterialTypeNr, const c8* vertexShaderProgram, const c8* pixelShaderProgram);\r
68         bool createPixelShader(const c8* pxsh);\r
69         bool createVertexShader(const char* vtxsh);\r
70 \r
71         HRESULT stubD3DXAssembleShader(LPCSTR pSrcData,  UINT SrcDataLen,\r
72                                         CONST D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude,\r
73                                         DWORD Flags, LPD3DXBUFFER* ppShader,\r
74                                         LPD3DXBUFFER* ppErrorMsgs);\r
75 \r
76         HRESULT stubD3DXAssembleShaderFromFile(LPCSTR pSrcFile,\r
77                                         CONST D3DXMACRO* pDefines, LPD3DXINCLUDE  pInclude, DWORD Flags,\r
78                                         LPD3DXBUFFER* ppShader, LPD3DXBUFFER* ppErrorMsgs);\r
79 \r
80         HRESULT stubD3DXCompileShader(LPCSTR pSrcData, UINT SrcDataLen, CONST D3DXMACRO* pDefines,\r
81                                         LPD3DXINCLUDE pInclude, LPCSTR pFunctionName,\r
82                                         LPCSTR pProfile, DWORD Flags, LPD3DXBUFFER* ppShader,\r
83                                         LPD3DXBUFFER* ppErrorMsgs, LPD3DXCONSTANTTABLE* ppConstantTable);\r
84 \r
85         HRESULT stubD3DXCompileShaderFromFile(LPCSTR pSrcFile, CONST D3DXMACRO* pDefines,\r
86                                         LPD3DXINCLUDE pInclude, LPCSTR pFunctionName,\r
87                                         LPCSTR pProfile, DWORD Flags, LPD3DXBUFFER* ppShader, LPD3DXBUFFER* ppErrorMsgs,\r
88                                         LPD3DXCONSTANTTABLE* ppConstantTable);\r
89 \r
90         IDirect3DDevice9* pID3DDevice;\r
91         video::IVideoDriver* Driver;\r
92         IShaderConstantSetCallBack* CallBack;\r
93         IMaterialRenderer* BaseMaterial;\r
94 \r
95         IDirect3DVertexShader9* VertexShader;\r
96         IDirect3DVertexShader9* OldVertexShader;\r
97         IDirect3DPixelShader9* PixelShader;\r
98         s32 UserData;\r
99 };\r
100 \r
101 \r
102 } // end namespace video\r
103 } // end namespace irr\r
104 \r
105 #endif\r
106 #endif\r
107 #endif\r
108 \r