2013-05-01 6 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, поэтому проверить их все, что вы пытаетесь использовать.

Смежные вопросы