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