2010-08-19 5 views
0

Я работаю с Delphi и DirectX. Мне нужен динамический массив IDirect3DVertexBuffer9. Является ли это возможным? Если да, то как?Могу ли я иметь динамический массив IDirect3DVertexBuffer9?

Я написал для этого код. Но, похоже, это проблематично. Мой код показан ниже -

totalBuffer := 4; 
SetLength(g_pVB,totalBuffer); 
for cnt := 0 to totalBuffer - 1 do begin 
     if FAILED(g_pd3dDevice.CreateVertexBuffer(1 * SizeOf(TD3DXVector3), 
               0, D3DFVF_XYZ, 
               D3DPOOL_DEFAULT, g_pVB[cnt], nil)) then begin 
     Result := E_FAIL; 
     Exit; 
     end; 
     if FAILED(g_pVB[cnt].Lock(0, 0, Pointer(pVert[cnt]), 0)) then begin 
     Result := E_FAIL; 
     Exit; 
     end; 
     pVert[cnt] := 0; 
end; 

здесь, проблема я столкнулся в том, что после того, как она войти в цикл продолжает и не выйти из цикла, когда cnt значение 4. И если я пишу статическое значение 3 в для цикла вместо totalBuffer он выйдет из цикла, когда значение равно 4.

+0

Вы имеете в виду, если вы используете 'for cnt: = 0 to 3', он работает по назначению, но в текущем примере кода это не так? –

+0

@Sertac Да, это правда. – Himadri

+0

@Himadri - Поместите «точку останова» на 'for' и« watch »на' totalBuffer' и начните трассировку, чтобы увидеть, когда «totalBuffer» изменяется с 4 на sth. еще; Некоторая локальная переменная (при условии, что totalBuffer является локальной), похоже, переписывает ее. –

ответ

1

Вы можете найти образцы here. В Cull sample они использовали «массив IDirect3DVertexBuffer».

Смежные вопросы