D3D渲染的顶点数量有上限??

xychzh 2011-05-17 12:13:43
我写了个专门的测试程序用来批量渲染上万个顶点,结果是渲染1~30000个顶点都正常,一当我改成60000个顶点的时候,就崩溃了。
是D3D有顶点上限还是?

附代码:

#define TEXTURE_COUNT 5000
#define VERTEX_COUNT TEXTURE_COUNT*6

void CRender::RenderExample()
{
if (m_pTexture != NULL)
{
UINT startTime = timeGetTime();

if (1)
{
for (int i=0, x=0, y=0; i<TEXTURE_COUNT; i++)
{
x = rand() % SCREEN_WIDTH;
y = rand() % SCREEN_HEIGHT;
RenderObj(m_pTexture, x, y, m_Width, m_Height);
}
}
else
{
SVertex2D vertexData[VERTEX_COUNT];
memset(vertexData, 0, sizeof(vertexData));

for (int i=0, x=0, y=0; i<VERTEX_COUNT; i+=6)
{
x = rand() % SCREEN_WIDTH;
y = rand() % SCREEN_HEIGHT;

vertexData[i].x = x;
vertexData[i].y = y;
vertexData[i].rhw = 1;
vertexData[i].color = 0xffffffff;
vertexData[i].tu = 0;
vertexData[i].tv = 0;

vertexData[i+1].x = x+m_Width;
vertexData[i+1].y = y;
vertexData[i+1].rhw = 1;
vertexData[i+1].color = 0xffffffff;
vertexData[i+1].tu = 1;
vertexData[i+1].tv = 0;

vertexData[i+2].x = x+m_Width;
vertexData[i+2].y = y+m_Height;
vertexData[i+2].rhw = 1;
vertexData[i+2].color = 0xffffffff;
vertexData[i+2].tu = 1;
vertexData[i+2].tv = 1;

vertexData[i+3].x = x+m_Width;
vertexData[i+3].y = y+m_Height;
vertexData[i+3].rhw = 1;
vertexData[i+3].color = 0xffffffff;
vertexData[i+3].tu = 1;
vertexData[i+3].tv = 1;

vertexData[i+4].x = x;
vertexData[i+4].y = y+m_Height;
vertexData[i+4].rhw = 1;
vertexData[i+4].color = 0xffffffff;
vertexData[i+4].tu = 0;
vertexData[i+4].tv = 1;

vertexData[i+5].x = x;
vertexData[i+5].y = y;
vertexData[i+5].rhw = 1;
vertexData[i+5].color = 0xffffffff;
vertexData[i+5].tu = 0;
vertexData[i+5].tv = 0;
}

m_pD3DDevice->SetTexture(0, m_pTexture);
m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, VERTEX_COUNT/3, vertexData, sizeof(SVertex2D));
}

char szTime[32];
sprintf(szTime, "耗时:%d", timeGetTime()-startTime);
MessageBox(0, szTime, 0, MB_OK);
}
}
...全文
95 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
visualvisual 2011-05-18
  • 打赏
  • 举报
回复
可以使用:
D3DCAPS9 d3dcaps;
IDirect3D9::GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&d3dcaps);
查询相关信息。

其中
d3dcaps.MaxVertexIndex和d3dcaps.MaxPrimitiveCount就是楼主想要的信息。
IONPhantom 2011-05-17
  • 打赏
  • 举报
回复
VB IB 都有上限, Texture 尺寸也有,不同版本的D3D限制不一样,具体看对应版本 SDK 的说明
xychzh 2011-05-17
  • 打赏
  • 举报
回复
ok,3Q

8,301

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧