2015-07-20 216 views
1

我想绘制使用D3D9的位图..我在这里得到的代码,它的工作。它确实吸引了我的盒子和图像,但是当我只画框时,我得到了60左右的fps。当我取消注释绘制位图的代码时,我在5-30之间获得了fps,并且它非常滞后。我的代码有什么问题?使用D3D9绘制纹理

private void D3D9Render() 
{ 
    do 
    { 
     Drawing.Device.Clear(D3D9.ClearFlags.Target, Color.FromArgb(0, 0, 0, 0), 1.0f, 0); 
     Drawing.Device.BeginScene(); 
     Drawing.DrawText("Fps : " + Fps.CalculateFrameRate().ToString(), Drawing.Width - 72, 220, Color.White); 

     Drawing.DrawBox(v.X, v.Y, 90, 7); 
    /* 
      Drawing.DrawTexture(new Bitmap("test.jpg")); 
      Drawing.Sprite.Begin(D3D9.SpriteFlags.None); 
      Drawing.Sprite.Draw(Drawing.Texture, Drawing.TextureSize, 
      new Vector3(0, 0, 0), 
      new Vector3(v.X-65, v.Y-55, v.Z), Color.White); 
      Drawing.Sprite.End(); 
    */ 
     Drawing.Device.EndScene(); 
     Drawing.Device.Present(); 

    } while (true); 

} 


public static void DrawTexture(Bitmap image) 
{ 
    Texture = new Texture(Device, image, Usage.None, Pool.Managed); 

    using (Surface surface = Texture.GetSurfaceLevel(0)) 
    { 
     SurfaceDescription surfaceDescription = surface.Description; 
     TextureSize = new Rectangle(0, 0, 
          surfaceDescription.Width, 
          surfaceDescription.Height); 
    } 
} 
+0

您不应该从每个文件的每个帧读取纹理。在循环之前做一次。 –

回答

1

您是否尝试过在渲染循环之外分配位图?根据位图的大小,它可能会减慢速度。您在循环的每次迭代中为该位图分配并重新分配空间。

将其分配移到循环外部,然后在渲染循环中渲染它(即一个分配)。

+0

非常感谢你,我把'Drawing.DrawTexture(新的Bitmap(“test.jpg”));'循环外,我再次fps 60左右。想知道为什么我没有找到自己。我猜这是不好的主意,在早上三点进行编码。 – Vacko