DirectX 使用 Draw Primitive 绘制多个矩形
DirectX Drawing multiple rectangles with Draw Primitive
我已经开始将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()
(不推荐(,或者在循环外部创建和重用顶点缓冲区。
相关文章:
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- 创建要在类中使用的向量向量,并使用 CERNROOT 绘制
- 如何使用 sdl2 快速绘制像素网格?
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- 如何使用 mvp 在 opengl 中绘制椭圆
- 使用 SFML 绘制曲线会给出错误的形状
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 在 OpenGL 中使用三角形绘制字母?
- 使用标准窗口与wxWidgets一起绘制?
- 使用 glDrawElements 绘制一个 std::vector
- 如何使用 opencv 绘制绿色矩形?
- 如何使用 D2D 和类 CD2DEllipse 在 MFC 上绘制椭圆C++
- 如何使用 bitblt 在屏幕上绘制由位图制作的数组?
- OpenGL:使用实例化绘图与我正在绘制的帧缓冲进行绘制
- 如何在SDL2窗口上使用Cairo绘制一条白色直线
- 图像绘制使用NDK显示轮廓
- 是否可以在另一个窗口中绘制(使用 Opencv/ffmpeg