Im currently creating a renderer for my engine and I am trying to get a shader manager class working. I have also created 2 seperate VertexShader and PixelShader classes. When a load shader function in the shader manager is called it creates a new object of the vertex or pixel shader class. These classes have these as properties:
//Shader and Shader consts table
LPDIRECT3DVERTEXSHADER9 m_Shader;
LPD3DXCONSTANTTABLE m_ShaderConsts;
The constructor of both these classes then actually does the loading and compiling of the shaders like so:
// Temporary variable to hold compiled pixel shader code
LPD3DXBUFFER pShaderCode;
// Compile external HLSL pixel shader into shader code to submit to the hardware
D3DXCompileShaderFromFile( fileName.c_str(), // File containing pixel shader (HLSL)
NULL, NULL, // Advanced compilation options - not needed here
"main", // Name of main function in the shader
"vs_3_0", // Target vertex shader hardware - vs_1_1 is lowest level
// and will work on all video cards with a pixel shader
0, // Additional compilation flags (such as debug flags)
&pShaderCode, // Ptr to variable to hold compiled shader code
NULL, // Ptr to variable to hold error messages (not needed)
m_ShaderConsts ); // Ptr to variable to hold constants for the shader
//***************************************************
// Step 2: Convert compiled program to usable shader
// Create the pixel shader using the compiled shader code
d3dDevice->CreateVertexShader( (DWORD*)pShaderCode->GetBufferPointer(), m_Shader );
// Discard the shader code now the shader has been created
pShaderCode->Release();
However I am hitting errors when I am trying to use the properties of the class in the DX functions, for example in the CreateVertexShader function, the last parametre wont be accepted because it is not the correct type, this is the exact output for that error:
error C2664: 'IDirect3DDevice9::CreateVertexShader' : cannot convert parameter 2 from 'LPDIRECT3DPIXELSHADER9' to 'IDirect3DVertexShader9 **'
I dont understand this as I thought the type LPDIRECT3DPIXELSHADER9 was actually a pointer to type IDirect3DVertexShader9 anyway. I assume it must be the ** at the end of the IDirect3DVertexShader9** but I dont actually know what that means.
Any help anyone???
Thanks