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"); } }