void PolylineRenderer::CreateDeviceDependentResources()

in Shared/Rendering/PolylineRenderer.cpp [122:195]


    void PolylineRenderer::CreateDeviceDependentResources()
    {
        if (nullptr == _slateMaterial)
        {
            _slateMaterial =
                std::make_unique<SlateMaterial>(
                    _deviceResources);
        }

        _slateMaterial->CreateDeviceDependentResources();

        {
            const CD3D11_BUFFER_DESC constantBufferDesc(sizeof(SlateModelConstantBuffer), D3D11_BIND_CONSTANT_BUFFER);
            ASSERT_SUCCEEDED(
                _deviceResources->GetD3DDevice()->CreateBuffer(
                    &constantBufferDesc,
                    nullptr,
                    &_modelConstantBuffer
                )
            );
        }

        // Once all shaders are loaded, create the mesh.
        {
            // Load mesh vertices. Each vertex has a position and a color.
            // Note that the cube size has changed from the default DirectX app
            // template. Windows Holographic is scaled in meters, so to draw the
            // cube at a comfortable size we made the cube width 0.2 m (20 cm).
            const float sx = 1.0f, sy = 1.0f, sz = 1.0f;

            {
                static const std::array<VertexPositionColorTexture, 8> cubeVertices =
                { {
                    { { -sx, -sy, -sz },{ 1.0f, 0.0f, 0.0f },{ 0.0f, 1.0f } },
                    { { -sx, -sy,  sz },{ 0.0f, 1.0f, 0.0f },{ 0.0f, 1.0f } },
                    { { -sx,  sy, -sz },{ 0.0f, 0.0f, 1.0f },{ 0.0f, 0.0f } },
                    { { -sx,  sy,  sz },{ 0.0f, 1.0f, 0.0f },{ 0.0f, 0.0f } },
                    { { sx, -sy, -sz },{ 1.0f, 0.0f, 1.0f },{ 1.0f, 1.0f } },
                    { { sx, -sy,  sz },{ 0.0f, 1.0f, 0.0f },{ 1.0f, 1.0f } },
                    { { sx,  sy, -sz },{ 0.0f, 0.0f, 1.0f },{ 1.0f, 0.0f } },
                    { { sx,  sy,  sz },{ 0.0f, 1.0f, 0.0f },{ 1.0f, 0.0f } },
                    } };

                for (size_t i = 0; i < cubeVertices.size(); ++i)
                {
                    _vertices.emplace_back(
                        cubeVertices[i]);

                    _vertices.emplace_back(
                        cubeVertices[(i + 1) % cubeVertices.size()]);
                }
            }

            D3D11_SUBRESOURCE_DATA vertexBufferData = { 0 };

            vertexBufferData.pSysMem = &_vertices[0];
            vertexBufferData.SysMemPitch = 0;
            vertexBufferData.SysMemSlicePitch = 0;

            const CD3D11_BUFFER_DESC vertexBufferDesc(
                static_cast<uint32_t>(sizeof(VertexPositionColorTexture) * _vertices.size()),
                D3D11_BIND_VERTEX_BUFFER);

            ASSERT_SUCCEEDED(
                _deviceResources->GetD3DDevice()->CreateBuffer(
                    &vertexBufferDesc,
                    &vertexBufferData,
                    &_vertexBuffer
                )
            );
        }

        _loadingComplete = true;
    }