void Screen::createEffect() { ID3D10Blob *pErrorMsgs = NULL; //get the compiled shader from the program resources AMResource shaderRes(":/shaders/shaders/AMShader.fxo"); if (!shaderRes.Open()) { MessageBox(NULL,"3. Error loading shader", "Error", MB_OK); exit(0); } shaderRes.Read(); HRESULT hr = D3DX10CreateEffectFromMemory(shaderRes.GetData(), shaderRes.GetSize(), "AM SHADER", NULL, NULL, "fx_4_0", NULL, 0, d3ddev, NULL, NULL, &effect, &pErrorMsgs, NULL); shaderRes.Close(); shaderRes.Free(); if(FAILED(hr) && (pErrorMsgs != NULL)) //Failed to create Effect { char* msg = (char*)pErrorMsgs->GetBufferPointer(); MessageBox(NULL, msg, "", MB_OK); exit(0); } }
//----------------------------------------------------------------------------// Direct3D10Renderer::Direct3D10Renderer(ID3D10Device* device) : d_device(device), d_displaySize(getViewportSize()), d_displayDPI(96, 96), d_defaultTarget(0), d_effect(0), d_normalClippedTechnique(0), d_normalUnclippedTechnique(0), d_premultipliedClippedTechnique(0), d_premultipliedUnclippedTechnique(0), d_inputLayout(0), d_boundTextureVariable(0), d_worldMatrixVariable(0), d_projectionMatrixVariable(0) { // create the main effect from the shader source. ID3D10Blob* errors = 0; if (FAILED(D3DX10CreateEffectFromMemory(shaderSource, sizeof(shaderSource), 0, 0, 0, "fx_4_0", 0, 0, d_device, 0, 0, &d_effect, &errors, 0))) { std::string msg(static_cast<const char*>(errors->GetBufferPointer()), errors->GetBufferSize()); errors->Release(); CEGUI_THROW(RendererException(msg)); } // extract the rendering techniques d_normalClippedTechnique = d_effect->GetTechniqueByName("BM_NORMAL_Clipped_Rendering"); d_normalUnclippedTechnique = d_effect->GetTechniqueByName("BM_NORMAL_Unclipped_Rendering"); d_premultipliedClippedTechnique = d_effect->GetTechniqueByName("BM_RTT_PREMULTIPLIED_Clipped_Rendering"); d_premultipliedClippedTechnique = d_effect->GetTechniqueByName("BM_RTT_PREMULTIPLIED_Unclipped_Rendering"); // Get the variables from the shader we need to be able to access d_boundTextureVariable = d_effect->GetVariableByName("BoundTexture")->AsShaderResource(); d_worldMatrixVariable = d_effect->GetVariableByName("WorldMatrix")->AsMatrix(); d_projectionMatrixVariable = d_effect->GetVariableByName("ProjectionMatrix")->AsMatrix(); // Create the input layout const D3D10_INPUT_ELEMENT_DESC vertex_layout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 16, D3D10_INPUT_PER_VERTEX_DATA, 0 }, }; const UINT element_count = sizeof(vertex_layout) / sizeof(vertex_layout[0]); D3D10_PASS_DESC pass_desc; if (FAILED(d_normalClippedTechnique->GetPassByIndex(0)->GetDesc(&pass_desc))) CEGUI_THROW(RendererException( "failed to obtain technique description for pass 0.")); if (FAILED(d_device->CreateInputLayout(vertex_layout, element_count, pass_desc.pIAInputSignature, pass_desc.IAInputSignatureSize, &d_inputLayout))) { CEGUI_THROW(RendererException("failed to create D3D 10 input layout.")); } d_defaultTarget = new Direct3D10ViewportTarget(*this); }