void CreateShaders() { DWORD dwDecl[] = { D3DVSD_STREAM(0), D3DVSD_REG(D3DVSDE_POSITION, D3DVSDT_FLOAT3), // D3DVSD_REG( D3DVSDE_NORMAL, D3DVSDT_FLOAT3 ), D3DVSD_END() }; LPD3DXBUFFER pCode; D3DXAssembleShaderFromFile("basic shader.txt"/*basic,strlen(basic)*/,0,NULL,&pCode,NULL); d3ddevice->CreateVertexShader( dwDecl, (DWORD*)pCode->GetBufferPointer(), &basic_shader, D3DUSAGE_SOFTWAREPROCESSING ); DWORD dwDeclp[] = { D3DVSD_STREAM(0), D3DVSD_REG(0, D3DVSDT_FLOAT3), D3DVSD_REG( 1, D3DVSDT_FLOAT3 ), D3DVSD_REG( 2, D3DVSDT_FLOAT2 ), D3DVSD_REG( 3, D3DVSDT_FLOAT3 ), D3DVSD_REG( 4, D3DVSDT_FLOAT3 ), D3DVSD_END() }; LPD3DXBUFFER pCode2; D3DXAssembleShaderFromFile("diffuse specular bump map.txt"/*phong,strlen(phong)*/,0,NULL,&pCode2,NULL); d3ddevice->CreateVertexShader( dwDeclp, (DWORD*)pCode2->GetBufferPointer(), &phong_shader, D3DUSAGE_SOFTWAREPROCESSING ); LPD3DXBUFFER pCode3; D3DXAssembleShaderFromFile("basic pixel.txt",0,NULL,&pCode3,NULL); d3ddevice->CreatePixelShader( (DWORD*)pCode3->GetBufferPointer(), &basic_pixel); LPD3DXBUFFER pCode4; D3DXAssembleShaderFromFile("diffuse specular bump pixel.txt",0,NULL,&pCode4,NULL); d3ddevice->CreatePixelShader( (DWORD*)pCode4->GetBufferPointer(), &spec_pixel); };
//----------------------------------------------------------------------------- // Name: XBUtil_CreatePixelShader() // Desc: Creates a file-based pixel shader //----------------------------------------------------------------------------- HRESULT XBUtil_CreatePixelShader( LPDIRECT3DDEVICE8 pd3dDevice, const CHAR* strFilename, DWORD* pdwPixelShader ) { HRESULT hr; // Find the media file CHAR strShaderPath[512]; if( FAILED( hr = XBUtil_FindMediaFile( strShaderPath, strFilename ) ) ) return hr; // Open the pixel shader file HANDLE hFile; DWORD dwNumBytesRead; hFile = CreateFile(strShaderPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); if(hFile == INVALID_HANDLE_VALUE) return E_FAIL; // Load the pre-compiled pixel shader microcode D3DPIXELSHADERDEF_FILE psdf; ReadFile( hFile, &psdf, sizeof(D3DPIXELSHADERDEF_FILE), &dwNumBytesRead, NULL ); // Make sure the pixel shader is valid if( psdf.FileID != D3DPIXELSHADERDEF_FILE_ID ) { OUTPUT_DEBUG_STRING( "XBUtil_CreatePixelShader(): Invalid pixel shader file\n" ); return E_FAIL; } // Create the pixel shader if( FAILED( hr = pd3dDevice->CreatePixelShader( &(psdf.Psd), pdwPixelShader ) ) ) { OUTPUT_DEBUG_STRING( "XBUtil_CreatePixelShader(): Could not create pixel shader\n" ); return hr; } // cleanup CloseHandle( hFile ); return S_OK; }