예제 #1
0
void Layer_D3D::init()
{
	// Create vertex buffer
	{
		VertexFormat format;
		format.declareCoordVec3();
		format.declareColor();
		format.declareUV();
		m_pBillboardVertexBuffer = new VertexBuffer_D3D(format, 6, g_context.m_pShaderManager->GetShader(ShaderManager_D3D::SHADER_DEFAULT));

		VertexFormat instanceFormat;
		instanceFormat.declare2DPos();
		instanceFormat.declareUV();
		instanceFormat.addInstanceElement(VertexFormat::SEMANTIC_COLOR, 0u, 1u);
		instanceFormat.addInstanceElement(VertexFormat::SEMANTIC_TEXCOORD, 1u, 4u);
		instanceFormat.addInstanceElement(VertexFormat::SEMANTIC_TEXCOORD, 2u, 4u);
		instanceFormat.addInstanceElement(VertexFormat::SEMANTIC_TEXCOORD, 3u, 2u);
		m_pQuadVertexBuffer = new VertexBuffer_D3D(instanceFormat, 4, g_context.m_pShaderManager->GetShader(ShaderManager_D3D::SHADER_INSTANCING), 2000u);
		m_pQuadVertexBuffer->setTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);

		Vertex_PUV vertices[] = 
		{
			{ XMFLOAT2(-0.5f, -0.5f), XMFLOAT2(0.0f, 1.0f) },
			{ XMFLOAT2(-0.5f,  0.5f), XMFLOAT2(0.0f, 0.0f) },
			{ XMFLOAT2( 0.5f, -0.5f), XMFLOAT2(1.0f, 1.0f) },
			{ XMFLOAT2( 0.5f,  0.5f), XMFLOAT2(1.0f, 0.0f) },
		};

		m_pQuadVertexBuffer->copyFromBuffer(vertices, ARRAYSIZE(vertices));
		m_pQuadVertexBuffer->copyToGPU();
	}

	// Create constant buffer
	{
		D3D11_BUFFER_DESC desc;
		ZeroMemory(&desc, sizeof(desc));
		desc.ByteWidth = sizeof(CBufferMVP);
		desc.Usage = D3D11_USAGE_DYNAMIC;
		desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
		desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;

		HRESULT hr = g_context.m_pDevice->CreateBuffer(&desc, nullptr, &m_pMatrixConstantBuffer);
		assert(SUCCEEDED(hr) && "Unable to create constant buffer");
	}
}