示例#1
0
	void GBuffer::CreateScreenQuad()
	{
		// Initialise buffers
		std::vector<Vertex> vertices =
		{
			Vertex(Vector3(-1.0f, 1.0f, 0.0f), Colour::White, Vector2(0.0f, 0.0f)), // bottom left
			Vertex(Vector3(1.0f, -1.0f, 0.0f), Colour::White, Vector2(1.0f, 1.0f)), // top right
			Vertex(Vector3(1.0f, 1.0f, 0.0f), Colour::White, Vector2(1.0f, 0.0f)), // bottom right
			Vertex(Vector3(-1.0f, -1.0f, 0.0f), Colour::White, Vector2(0.0f, 1.0f)) // top left
		};

		std::vector<int> indices =
		{
			1, 0, 2,
			0, 1, 3
		};

		// Initialise screen quad
		for (int i = 0; i < GBUFFER_NUM_BUFFERS; ++i)
		{
			Material* material = ResourceFactory::CreateMaterial();
			material->LoadPixelShader(GetRelativePath("Shaders\\Quad.hlsl"), "PSMain", "ps_5_1");
			material->LoadVertexShader(GetRelativePath("Shaders\\Quad.hlsl"), "VSMain", "vs_5_1");
			material->Finalise(Material::Default_Input_Layout, false, false);

			VertexBufferInstance* vertexBuffer = ResourceFactory::CreateVertexBufferInstance(VERTEX_POS_COL_UV);
			vertexBuffer->SetVertices(vertices);

			IndexBufferInstance* indexBuffer = ResourceFactory::CreateIndexBufferInstance();
			indexBuffer->SetIndices(indices);

			_pScreenQuads[i] = new RenderObject();
			_pScreenQuads[i]->SetVertexBuffer(vertexBuffer);
			_pScreenQuads[i]->SetIndexBuffer(indexBuffer);
			_pScreenQuads[i]->SetMaterial(material);
			_pScreenQuads[i]->Transform.SetIs2D(true);
			_pScreenQuads[i]->Transform.SetScale(0.5f, 0.5f, 1.0f);
		}

		_pScreenQuads[0]->Transform.SetPosition(-0.5f, 0.5f, 0.0f);
		_pScreenQuads[1]->Transform.SetPosition(0.5f, 0.5f, 0.0f);
		_pScreenQuads[2]->Transform.SetPosition(-0.5f, -0.5f, 0.0f);
		_pScreenQuads[3]->Transform.SetPosition(0.5f, -0.5f, 0.0f);

		_pScreenQuads[0]->GetMaterial()->SetTexture(_pTextures[0]);
		_pScreenQuads[1]->GetMaterial()->SetTexture(_pTextures[1]);
		_pScreenQuads[2]->GetMaterial()->SetTexture(_pTextures[2]);
		_pScreenQuads[3]->GetMaterial()->SetTexture(_pTextures[3]);

		_pScreenQuads[0]->GetMaterial()->SetDepthMode(false, ALWAYS);
		_pScreenQuads[1]->GetMaterial()->SetDepthMode(false, ALWAYS);
		_pScreenQuads[2]->GetMaterial()->SetDepthMode(false, ALWAYS);
		_pScreenQuads[3]->GetMaterial()->SetDepthMode(false, ALWAYS);
	}