DirectX 使用 Draw Primitive 绘制多个矩形

DirectX Drawing multiple rectangles with Draw Primitive

本文关键字:绘制 使用 Draw Primitive DirectX      更新时间:2023-10-16

我已经开始将DirectX与C++一起使用。我正在尝试在屏幕上绘制多个矩形和三角形并尝试移动它们。我将顶点存储在顶点缓冲区中一次并绘制。然后我多次调用 DrawPrimitives 来绘制矩形。我已经从如何使用D3DPT_TRIANGLESTRIP基元类型在 DirectX 中绘制两个分离的矩形中看到了这一点。问题是,当我从Visual Studios"性能分析器"检查该程序的内存消耗时,它从26MB开始,并开始逐个增长,如27,28,29,30......。如果我删除DrawPrimitive函数,Visual Studio中的内存消耗保持不变。我不知道我做错了什么?在屏幕上绘制多个三角形和矩形时,内存消耗是否应该固定?我的代码是:

void render_frame()
{
    //ourVertices conntain multiple rectangle
    LPDIRECT3DVERTEXBUFFER9 v_buffer;
    d3ddev->CreateVertexBuffer(numberofrectangles * sizeof(ourVertices),
        0,
        CUSTOMFVF,
        D3DPOOL_MANAGED,
        &v_buffer,
        NULL);
    VOID* pVoid;    // the void* we were talking about
    v_buffer->Lock(0, 0, (void**)&pVoid, 0);    // locks v_buffer, the buffer we made earlier
    memcpy(pVoid, ourVertices, numberofrectangles * sizeof(ourVertices));
    v_buffer->Unlock();
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
    d3ddev->BeginScene();
    // select which vertex format we are using
    // select the vertex buffer to display
    d3ddev->SetFVF(CUSTOMFVF);
    d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(Point));
    for (int i = 0; i< size_of_rectangles_list; i++) {
        // copy the vertex buffer to the back buffer
        d3ddev->DrawPrimitive(D3DPT_TRIANGLESTRIP, i * 4, 2); //here is the problem
    }
    d3ddev->EndScene();
    d3ddev->Present(NULL, NULL, NULL, NULL);
}

正如忍者在评论中所说@Retired,您需要为每次呼叫CreateVertexBuffer Release

为此,可以在呈现循环中调用v_buffer->Release()(不推荐(,或者在循环外部创建和重用顶点缓冲区。