2013-05-01 86 views
1

我使用SharpDX並在PixelFormat上遇到問題。我想使它A8_UNorm並使用OpacityMask但我得到一個UnsupportedPixelFormatException。但根據MSDN,一切都應該沒問題。 代碼:SharpDX。不支持的像素格式

 PixelFormat PF = new PixelFormat(Format.A8_UNorm, AlphaMode.Straight); 
    var desc = new Texture2DDescription() 
      { 
       Width = Width, 
       Height = Height, 
       Format = Format.A8_UNorm, 
       SampleDescription = new SampleDescription(1, 0), 
       ArraySize = 1, 
       CpuAccessFlags = 0, 
       Usage = ResourceUsage.Default, 
       MipLevels = 1, 
       BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, 
      }; 

      using (var d = new DataStream(desc.Width * desc.Height, true, true)) 
      { 
       for (var i = 0; i < desc.Width * desc.Height/4; i++) d.Write(0); 
       using (Texture2D tex = new Texture2D(GameControl.Device, desc, new DataRectangle(d.DataPointer, desc.Width))) 
       { 
        using (Surface temp = tex.QueryInterface<Surface>()) 
        { 
         Target = new RenderTarget(Factory2D, temp, new RenderTargetProperties(PF)); 
         OpacityMask = new Bitmap(Target, temp, new BitmapProperties(PF)); //Exception is here 
        } 
       } 
      } 

回答

1

像素格式支持取決於軟件和硬件。你可以通過CheckFormatSupport()來檢查你的平臺是否支持你想要的。我用這樣的:

var format = Format.A8_UNorm; 
var supportRequired = FormatSupport.RenderTarget; 
var isSupported = device.CheckFormatSupport(format).HasFlag(supportRequired); 

注意,有很多選擇,除了FormatSupport.RenderTarget,所以測試所有的人,你要使用。