i32 CShaderManager::Init() { //Create default shaders IInputLayout* pIL = m_pRenderSystem->GetInputLayout( ILE::POSITION ); xst_assert2( pIL != xst_null ); xst_assert2( pIL->GetVertexShader() != xst_null ); /*IVertexShader* pVS = m_pRenderSystem->CreateDefaultVertexShader( pIL, this, 0, strVSName, XST::ResourceType::SHADER, XST::ResourceStates::CREATED, xst_null ); if( pVS == xst_null ) { return XST_FAIL; }*/ xst_castring strPSName( "xse_default_ps" ); Resources::IPixelShader* pPS = m_pRenderSystem->CreateDefaultPixelShader( xst_null, this, 0, strPSName, XST::ResourceType::SHADER, XST::ResourceStates::CREATED, xst_null ); if( pPS == xst_null ) { return XST_FAIL; } m_pDefaultPS = PixelShaderPtr( pPS ); m_pDefaultVS = VertexShaderPtr( pIL->GetVertexShader() ); return XST_OK; }
PixelShaderPtr UGraphicsDevice::LoadPixelShader(const void* inPixelBytes, size_t inPixelBytesLength) { assert(inPixelBytes); ID3D11PixelShader* pixelShader = nullptr; HRESULT hr = mD3dDevice->CreatePixelShader(inPixelBytes, inPixelBytesLength, nullptr, &pixelShader); if (FAILED(hr)) { LOG(LogGraphicsDevice, Error, "LoadPixelShader() Failed to load pixel shader\n"); return nullptr; } return PixelShaderPtr(pixelShader, AutoReleaseD3D); }
PixelShaderPtr CShaderManager::CompilePixelShader(xst_castring& strName, xst_castring& strEntryPoint, xst_castring& strCode, xst_castring& strGroupName) { ShaderPtr pShader = _CreateShader( ShaderTypes::PIXEL, strName, strEntryPoint, strGroupName ); if( pShader == xst_null ) { return pShader; } PixelShaderPtr pPS( pShader ); if( XST_FAILED( pPS->Compile( strEntryPoint, ShaderProfiles::PS_BEST, strCode ) ) ) { this->DestroyResource( pPS ); return PixelShaderPtr(); } pPS->m_iResourceState = Resources::ResourceStates::PREPARED; return pPS; }