2013-10-16 35 views
1

我正在使用DirectX9,現在我遇到了紋理創建問題。 我使用的功能CreateTexture和LoadSurfaceFromMemory與D3DFMT_DXT1壓縮,我檢查了我的顯卡和D3DPTEXTURECAPS_POW2和D3DPTEXTURECAPS_NONPOW2CONDITIONAL關閉,我想這意味着我的顯卡都支持非權力的兩個紋理...我的設備帽可以使用任何尺寸的紋理。 我的問題是最紋理的運作良好(和它們的大小不是2功率),但在某些情況下不工作,像「1228 X 453」,如果我調整爲「1228 X 452的」紋理效果很好。 發生了什麼事?DirectX9和不兼容的紋理尺寸

對不起,我的英文! 謝謝。

回答

1

BCN的紋理格式是基於塊的。這些塊將像素打包成4x4個元素的組,因此對於這些格式,紋理維度必須對齊到4。

+2

+1。 [證明](http://msdn.microsoft.com/en-us/library/windows/desktop/bb172558%28v=vs.85%29.aspx):'運行時將不允許應用程序使用創建表面一個DXTn格式除非表面尺寸是4的倍數。這適用於屏幕外表面滑動,渲染目標,2D紋理,立方體紋理和體積textures.' – Drop

+0

呀!你是對的,因爲紋理壓縮我必須將紋理轉換成4 感謝的倍數!我現在儲存了大量的記憶。 –

+0

這可能是有點偏離上下文爲非功率的兩個紋理大多爲圖形用戶界面,但不要忘記,如果紋理是在3D網格用於生成的mipmap鏈。性能(內存帶寬)和質量(混疊和雲紋)非常重要。 – galop1n

0

不幸的是,這是一個顯卡問題。即使該卡聲稱支持兩種紋理的非功率,支持通常是有缺陷/有限的。

你可以墊的質地和使用subtexture,但最好的辦法是建立一個紋理圖集(一般你應該做這無論如何要節省內存帶寬)

+0

絕對正確,但這裏的問題是另一回事。所以,如果他會嘗試1228 x 454,它將無法正常工作。 – Drop