XNA 4.0在顯示上面(包含RenderTarget和一般直接顯像)有提供兩種不同的Profile,Profile根據文件所說指的就是硬體所提供的功能。
每個繪圖卡都可能會提供不同的功能,像是有些繪圖卡提供浮點數運算的材質貼圖,有些沒有這個功能等等。
在之前的XNA版本中,XNA主要受限這個限制所以有時候會發生一種情況...
明明寫了一個RT相關的程式,結果在自己的電腦跑不出來該有的效果,然後拿到別台又OK的情況...
在新版的XNA 4.0中,特別在RT上面提供兩種不同的格式: Reach和HiDef。
Reach主要適用於所有XNA可以支援的平台,包含PC、360和WP7等。
HiDef支援360和部分PC(需支援DX10顯卡)可能大家看了應該就很高興了,竟然會用到DX10顯卡的功能!!
這意味是不是XNA開始提供DX 10的功能了呢!?
這是否定的!XNA主要架構還是建立在DX9的SDK上面,會使用DX10顯卡,主要是確保顯卡能夠提供足夠的功能
(包含貼圖格式的屬性、大小限制等等)
要如何設定現在使用的是Reach還是HiDef格式呢?
在Initialize的地方:
graphics.GraphicsProfile = GraphicsProfile.HiDef;
這樣就是設定顯像方式的貼圖設定是使用HiDef的規格。
目前個人見解是... 如果是PC或XBOX360的遊戲開發,直接使用HiDef的格式比較好,提供的支援比較大。
兩個模式比較結果如下。
Profiles | Reach | HiDef |
---|---|---|
支援平台 | Windows Phone 7 Series, Xbox 360, 任何一種PC平台(顯卡須支援Shader Model 2.0以上) |
Xbox 360, 任何一種PC平台(顯卡需支援DirectX10或更高版本) |
Shader Model | 2.0 (WP7不支援使用者自訂的渲染方式) | 3.0+ (不過360上特有的Shader函數像是vfetch這部分PC沒辦法使用) |
最大貼圖大小 | 2,048 | 4,096 |
最小貼圖大小 | 512 | 4,096 |
最大立體貼圖大小 | 並不支援立體貼圖 | 256 |
不需要2的指數次方貼圖 |
支援但是存有些限制(不支援Wrap重複貼圖模式、不支援MIPMAP、DXT壓縮格式需要2的指數次方) |
支援 |
不需要2的指數次方的Cube map | 不支援 | 支援 |
不需要2的指數次方的立體貼圖 | 不支援立體貼圖 | 支援 |
每次呼叫Draw指令所能處理的Primitive數量 | 65,535 | 1,048,575 |
Vertex Streams最大數量 | 16 | 16 |
Stream Stride最大數量 | 25 | 255 |
Index Buffer 格式 | 16 bit | 16 and 32 bit |
Vertex Element 格式 | Color, Byte4, Single, Vector2, Vector3, Vector4, Short2, Short4, NormalizedShort2, NormalizedShort4 | 所有Reach可支援的格式, HalfVector2, HalfVector4 |
Texture格式 | Color, Bgr565, Bgra5551, Bgra4444, NormalizedByte2, NormalizedByte4, Dxt1, Dxt3, Dxt5 | 所有Reach可支援的格式, plus Alpha8, Rg32, Rgba64, Rgba1010102, Single, Vector2, Vector4, HalfSingle, HalfVector2, HalfVector4; floating point texture formats do not support filtering |
Vertex Texture 格式 | 不支援Vertex texturing | Single, Vector2, Vector4, HalfSingle, HalfVector2, HalfVector4 |
Render Target 格式 | 呼叫QueryRenderTargetFormat()可以知道可以支援的格式 | 呼叫QueryRenderTargetFormat()可以知道可以支援的格式 |
Multiple Render Targets | 不支援 |
最多可以到四張; 需要有相同的Depth大小、支援alpha blending |
Occlusion Queries | 不支援 |
支援 |
Separate Alpha Blend | 不支援 |
支援 |