vertexdeclaration在引擎中,原來是直接放在vertexbuffer里面,當(dāng)設(shè)置這個(gè)vertexbuffer的時(shí)候再設(shè)這個(gè)declaration,在DX9中看似沒問題,因?yàn)槊總€(gè)vertexbuffer都有自己的頂點(diǎn)格式。但在DX11中,vertexdeclaration實(shí)際上就是inputlayout,而且inputlayout的創(chuàng)建是要依賴vertexshader的代碼內(nèi)容的。因此,如果把頂點(diǎn)聲明放到vertexbuffer里面,在DX11就無法創(chuàng)建了。
實(shí)際上,無論是DX9還是DX11,vertexbuffer和vertexdeclaration都是無任何關(guān)系的,如果引擎要適應(yīng)DX11和DX9兩個(gè)渲染器,那么,vertexdeclaration就要依賴于vertexshader了。我可以通過一些配置文件達(dá)到每個(gè)VS具體要?jiǎng)?chuàng)建怎么樣的vertexdeclaration,在設(shè)置vs的時(shí)候再把vertexdeclaration設(shè)置進(jìn)去,看似問題解決了。但細(xì)想一下:DX9下有用到固定管線的,固定管線的話,意味著有些地方就是沒有vertexdeclaration了,按引擎的設(shè)計(jì)標(biāo)準(zhǔn),F(xiàn)VF也沒有使用,那這樣用了固定管線的物體就會(huì)出問題了。為了解決這個(gè)問題,現(xiàn)在想到唯一的解決辦法是:即使是DX9下,所有的渲染都用shader,完全拋棄掉DX9的固定管線。
引擎要做到適應(yīng)DX9和DX11雙渲染器還是有一定難度的……