示例#1
0
/**
* 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");
	}
}
示例#2
0
	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.");
		}
	}