C# 使用D3D9绘制纹理

C# 使用D3D9绘制纹理,c#,C#,我想用D3D9绘制位图。。我在这里得到了代码,它就成功了。它确实给我画了盒子和图像,但当我只画盒子时,我的fps大约是60。当我取消注释绘制位图的代码时,我得到的fps在5-30之间,它非常滞后。我的代码怎么了 private void D3D9Render() { do { Drawing.Device.Clear(D3D9.ClearFlags.Target, Color.FromArgb(0, 0, 0, 0), 1.0f, 0); Draw

我想用D3D9绘制位图。。我在这里得到了代码,它就成功了。它确实给我画了盒子和图像,但当我只画盒子时,我的fps大约是60。当我取消注释绘制位图的代码时,我得到的fps在5-30之间,它非常滞后。我的代码怎么了

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);
    }
}

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


将其分配移动到循环之外,然后在渲染循环中渲染它(该分配)。

不应在每帧从文件中读取纹理。在循环之前做一次。啊,非常感谢,我把
Drawing.DrawTexture(新位图(“test.jpg”)循环外,我的fps再次在60左右。不知道为什么我自己没发现。我想这不是一个好主意,在凌晨3点做编码。