2011-12-17 15 views
3

これはスタックオーバーフローのための最初の投稿です! 私はチームが作っているゲームにSlimDXを使用していますが、問題が発生しました。私はColor4オブジェクトのRGBA値からShaderResourceViewを作成しようとしています。私は自分の問題に対する答えを探していましたが、これは私が得た限りです。SlimDXでRGBA値からテクスチャを作成する

private ShaderResourceView GetTexture(Device device, int width, int height, Color4 color) 
    { 
     //create the texture 
     Texture2D texture = null; 
     Texture2DDescription desc2 = new Texture2DDescription(); 
     desc2.SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0); 
     desc2.Width = width; 
     desc2.Height = height; 
     desc2.MipLevels = 1; 
     desc2.ArraySize = 1; 
     desc2.Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm; 
     desc2.Usage = ResourceUsage.Dynamic; 
     desc2.BindFlags = BindFlags.ShaderResource; 
     desc2.CpuAccessFlags = CpuAccessFlags.Write; 
     texture = new Texture2D(device, desc2); 


     // fill the texture with rgba values 
     DataRectangle rect = texture.Map(0, MapMode.WriteDiscard, MapFlags.None); 
     if (rect.Data.CanWrite) 
     { 
      for (int row = 0; row < texture.Description.Height; row++) 
      { 
       int rowStart = row * rect.Pitch; 
       rect.Data.Seek(rowStart, System.IO.SeekOrigin.Begin); 
       for (int col = 0; col < texture.Description.Width; col++) 
       { 
        rect.Data.WriteByte((byte)color.Red); 
        rect.Data.WriteByte((byte)color.Green); 
        rect.Data.WriteByte((byte)color.Blue); 
        rect.Data.WriteByte((byte)color.Alpha); 
       } 
      } 
     } 
     texture.Unmap(0); 

     // create shader resource that is what the renderer needs 
     ShaderResourceViewDescription desc = new ShaderResourceViewDescription(); 
     desc.Format = texture.Description.Format; 
     desc.Dimension = ShaderResourceViewDimension.Texture2D; 
     desc.MostDetailedMip = 0; 
     desc.MipLevels = 1; 
     ShaderResourceView srv = new ShaderResourceView(device, texture, desc); 

     return srv; 
    } 

テクスチャのデータが設定されているとは思いますが、何も表示されていないためわかりません。私は、ファイルからテクスチャをロードすることができるので、私のレンダラが動作することを知っていますが、私は見つけられないという問題があるようです。事前にあなたの助けをありがとう!

+0

SlimDXを使用したコンテンツのレンダリングに問題がある場合は、[PIX](http://blogs.msdn.com/b/manders/archive/2006/12/15/a-painless-introduction-to -pix-for-windows.aspx)を使用して実際のピクセルをデバッグします。画面に何も表示されないなど予期しない動作が発生した場合のピクセル履歴を確認すると便利です。ただし、PIXを使用してSlimDXの32ビットバージョンのみをデバッグできることに注意してください。 –

+0

こんにちは。私は少し前にこれを聞いたことが分かりますが、DirectXとSlimDXの新機能で、デバイスをどのように初期化したかを教えてください。 – KairisCharm

答えて

2

私はすべてのコードを正しく持っていました。私はばかげているように感じますが、私は自分の問題を見つけ出しました。私はテクスチャのアルファ値を設定していないので、実際に描画されていましたので、私はそれを見ることができませんでした> _ <;簡単な間違いは常にええ?しかし、見たすべての人に感謝します。

関連する問題