bool Shader::CompileD3DShader( const wchar_t* filePath, char* entry, char* shaderModel, ID3DBlob** buffer ) { DWORD shaderFlags = D3DCOMPILE_ENABLE_STRICTNESS; #if defined( DEBUG ) || defined( _DEBUG ) shaderFlags |= D3DCOMPILE_DEBUG; #endif ID3DBlob* errorBuffer = 0; HRESULT result; result = D3DX11CompileFromFileW( filePath, 0, 0, entry, shaderModel, shaderFlags, 0, 0, buffer, &errorBuffer, 0 ); if( FAILED( result ) ) { if( errorBuffer != 0 ) { OutputDebugStringA( ( char* )errorBuffer->GetBufferPointer( ) ); errorBuffer->Release( ); } return false; } if( errorBuffer != 0 ) errorBuffer->Release( ); return true; }
//============================================================================== bool CGraphicsMgr::CompileD3DShader ( const std::wstring & filePath, const std::string & entryFunction, const std::string & shaderModel, ID3DBlob ** buffer ) { DWORD shaderFlags = D3DCOMPILE_ENABLE_STRICTNESS; #if defined(DEBUG) || defined(_DEBUG) shaderFlags |= D3DCOMPILE_DEBUG; #endif ID3DBlob* errorBuffer = NULL; HRESULT result; result = D3DX11CompileFromFileW( filePath.c_str(), NULL, NULL, entryFunction.c_str(), shaderModel.c_str(), shaderFlags, 0, NULL, buffer, &errorBuffer, NULL ); if (FAILED(result)) { if (errorBuffer != NULL) { OutputDebugStringA((char*)errorBuffer->GetBufferPointer()); errorBuffer->Release(); } return false; } if (errorBuffer != NULL) errorBuffer->Release(); return true; }
/// <summary> /// Helper for compiling shaders with D3DX11 /// </summary> /// <param name="szFileName">full path to shader to compile</param> /// <param name="szEntryPoint">entry point of shader</param> /// <param name="szShaderModel">shader model to compile for</param> /// <param name="ppBlobOut">holds result of compilation</param> /// <returns>S_OK for success, or failure code</returns> HRESULT CompileShaderFromFile(WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3D10Blob** ppBlobOut) { HRESULT hr = S_OK; ID3D10Blob* pErrorBlob = NULL; hr = D3DX11CompileFromFileW( szFileName, NULL, NULL, szEntryPoint, szShaderModel, 0, 0, NULL, ppBlobOut, &pErrorBlob, NULL ); if ( FAILED(hr) ) { if (NULL != pErrorBlob) { OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() ); } } SAFE_RELEASE(pErrorBlob); return hr; }
//---------------------------------------------------------------------------------------------------- bool EECurve2D::InitializeCurve2D() { if (!s_isCurve2DInitialized) { HRESULT result; ID3D10Blob *errorMessage = NULL; ID3D10Blob *vertexShaderBuffer = NULL; ID3D10Blob *pixelShaderBuffer = NULL; result = D3DX11CompileFromFileW(L"EEShader\\EEQuad2DShader.hlsl", NULL, NULL, "QuadVS", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &vertexShaderBuffer, &errorMessage, NULL); if (FAILED(result)) { if (errorMessage) { MessageBoxA(NULL, (char*)errorMessage->GetBufferPointer(), "ShaderCompileError", MB_YESNO); SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); } else { MessageBoxW(NULL, L"CompileShader´íÎó!", L"´íÎó", MB_OK); SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); } return FALSE; } result = D3DX11CompileFromFileW(L"EEShader\\EEQuad2DShader.hlsl", NULL, NULL, "QuadPS", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &pixelShaderBuffer, &errorMessage, NULL); if (FAILED(result)) { if (errorMessage) { MessageBoxA(NULL, (char*)errorMessage->GetBufferPointer(), "ShaderCompileError", MB_YESNO); SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); } else { MessageBoxW(NULL, L"CompileShader´íÎó!", L"´íÎó", MB_OK); SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); } return FALSE; } result = EECore::s_EECore->GetDevice()->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &s_curveVS); if (FAILED(result)) { SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); return false; } result = EECore::s_EECore->GetDevice()->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &s_curvePS); if (FAILED(result)) { SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); return false; } D3D11_INPUT_ELEMENT_DESC quadInputDesc[2] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; result = EECore::s_EECore->GetDevice()->CreateInputLayout(quadInputDesc, 2, vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &s_curveIL); if (FAILED(result)) { SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); return false; } SAFE_RELEASE(errorMessage); SAFE_RELEASE(vertexShaderBuffer); SAFE_RELEASE(pixelShaderBuffer); s_isCurve2DInitialized = true; } return true; }
//---------------------------------------------------------------------------------------------------- bool EEBlurC::InitializeBlurC() { if (!s_isBlurCInitialized) { HRESULT result; ID3D11Device* device = EECore::s_EECore->GetDevice(); ID3D11DeviceContext* deviceContext = EECore::s_EECore->GetDeviceContext(); // BlurBuffer D3D11_BUFFER_DESC bufferDesc; bufferDesc.ByteWidth = sizeof(EEBlurBufferDesc); bufferDesc.Usage = D3D11_USAGE_DYNAMIC; bufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; bufferDesc.MiscFlags = 0; bufferDesc.StructureByteStride = 0; result = device->CreateBuffer(&bufferDesc, NULL, &s_blurBuffer); if (FAILED(result)) return false; ID3D10Blob *errorMessage = nullptr; ID3D10Blob *computeShaderBuffer = nullptr; // CS result = D3DX11CompileFromFileW(L"EEShader\\EEBlurShader.hlsl", NULL, NULL, "BlurHorzCS", "cs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &computeShaderBuffer, &errorMessage, NULL); if (FAILED(result)) { if (errorMessage) MessageBoxA(NULL, (char*)errorMessage->GetBufferPointer(), "Compile Shader Error!", MB_OK); SAFE_RELEASE(errorMessage); SAFE_RELEASE(computeShaderBuffer); return false; } result = device->CreateComputeShader(computeShaderBuffer->GetBufferPointer(), computeShaderBuffer->GetBufferSize(), NULL, &s_blurHorzCS); if (FAILED(result)) { SAFE_RELEASE(errorMessage); SAFE_RELEASE(computeShaderBuffer); return false; } result = D3DX11CompileFromFileW(L"EEShader\\EEBlurShader.hlsl", NULL, NULL, "BlurVertCS", "cs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &computeShaderBuffer, &errorMessage, NULL); if (FAILED(result)) { if (errorMessage) MessageBoxA(NULL, (char*)errorMessage->GetBufferPointer(), "Compile Shader Error!", MB_OK); SAFE_RELEASE(errorMessage); SAFE_RELEASE(computeShaderBuffer); return false; } result = device->CreateComputeShader(computeShaderBuffer->GetBufferPointer(), computeShaderBuffer->GetBufferSize(), NULL, &s_blurVertCS); if (FAILED(result)) { SAFE_RELEASE(errorMessage); SAFE_RELEASE(computeShaderBuffer); return false; } s_isBlurCInitialized = true; } return true; }