/** * Loads stereo mode effect file. ***/ void StereoView::InitShaderEffects() { shaderEffect[ANAGLYPH_RED_CYAN] = "AnaglyphRedCyan.fx"; shaderEffect[ANAGLYPH_RED_CYAN_GRAY] = "AnaglyphRedCyanGray.fx"; shaderEffect[ANAGLYPH_YELLOW_BLUE] = "AnaglyphYellowBlue.fx"; shaderEffect[ANAGLYPH_YELLOW_BLUE_GRAY] = "AnaglyphYellowBlueGray.fx"; shaderEffect[ANAGLYPH_GREEN_MAGENTA] = "AnaglyphGreenMagenta.fx"; shaderEffect[ANAGLYPH_GREEN_MAGENTA_GRAY] = "AnaglyphGreenMagentaGray.fx"; shaderEffect[SIDE_BY_SIDE] = "SideBySide.fx"; shaderEffect[DIY_RIFT] = "SideBySideRift.fx"; shaderEffect[OVER_UNDER] = "OverUnder.fx"; shaderEffect[INTERLEAVE_HORZ] = "InterleaveHorz.fx"; shaderEffect[INTERLEAVE_VERT] = "InterleaveVert.fx"; shaderEffect[CHECKERBOARD] = "Checkerboard.fx"; char viewPath[512]; ProxyHelper helper = ProxyHelper(); helper.GetPath(viewPath, "fx\\"); strcat_s(viewPath, 512, shaderEffect[stereo_mode].c_str()); if (FAILED(D3DX11CreateEffectFromFile((LPWSTR)viewPath, NULL, m_pActualDevice, &viewEffect))) { OutputDebugString("Effect creation failed\n"); } }
void LineRenderer::LineSetup() { std::wstring path = WF::WideStringConvertion("Data\\Shaders\\Line.fso"); HRESULT result = D3DX11CreateEffectFromFile(path.c_str(), NULL, myEngine->GetDevice().Get(), &myLineEffect); if (FAILED(result) == true) { std::string errorMessage = "Failed to create effect from file with path: Data\\Shaders\\Line.fso"; WF::AssertComAndWindowsError(result, errorMessage.c_str()); } myLineTechnique = myLineEffect->GetTechniqueByIndex(0); if (myLineTechnique->IsValid() == false) { DL_DEBUG("Technique in effect not valid"); } COMObjectPointer<ID3DX11EffectPass> effectPass = myLineTechnique->GetPassByIndex(0); if (effectPass->IsValid() == false) { DL_DEBUG("EffectPass in effect not valid"); } myLineProjectionMatrix = myLineEffect->GetVariableByName("Projection")->AsMatrix(); myLineCameraMatrix = myLineEffect->GetVariableByName("Camera")->AsMatrix(); D3DX11_PASS_SHADER_DESC effectVsDesc; effectPass->GetVertexShaderDesc(&effectVsDesc); D3DX11_EFFECT_SHADER_DESC effectVsDesc2; effectVsDesc.pShaderVariable->GetShaderDesc(effectVsDesc.ShaderIndex, &effectVsDesc2); const void *vsCodePtr = effectVsDesc2.pBytecode; unsigned vsCodeLen = effectVsDesc2.BytecodeLength; CU::GrowingArray<D3D11_INPUT_ELEMENT_DESC> inputDescription(4); inputDescription.Add({ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }); result = myEngine->GetDevice()->CreateInputLayout(&inputDescription[0], inputDescription.Size(), vsCodePtr, vsCodeLen, &myLineInputLayout); if (FAILED(result) == true) { WF::AssertComAndWindowsError(result, "Input layout error"); } VertexDataWrapper vertexData; vertexData.myNumberOfVertexes = 10000; vertexData.mySize = sizeof(float) * 4 * vertexData.myNumberOfVertexes; vertexData.myVertexData = new char[vertexData.mySize]; vertexData.myStride = 16; myLineDummyBuffer.CreateDynamic(myEngine->GetDevice(), &vertexData); if (FAILED(result) == true) { WF::AssertComAndWindowsError(result, "Failed to create input layout for effect."); } }