1

I'm using OpenTK (OpenGL wrapper for .NET) to draw 2D objects Generally speaking I'm drawing two elements(which consists of smaller objects)

public void Draw()
{
    DrawElement1();  // Element1 changes every 300ms
    DrawElement2();  // Element2 changes every 50ms
}

In current implementation I must call Draw every 50ms in order to keep Element2 in latest state. In this situation I pointlessly refresh Element1 5 times.

So I need some way to store rendered state of Element1 in order to speed up my drawing

public void Draw()
{
    if(needUpdateElement1)
       DrawElement1();
    else
       DrawRenderedElement1();
    DrawElement2();
}
4

1 に答える 1

1

あなたがしたいのは、「Element2」をオフスクリーンのレンダーターゲットにレンダリングし、300msごとにリフレッシュすることです。フレームごとに、rendertargetをテクスチャとしてマップし、クワッドをレンダリングして、「Element1」と正しくブレンドされるようにします。

これは、 OpenTKを使用したオフスクリーンレンダリングの優れたチュートリアルです。

覚えておくべき重要なことは、rendertargetsを切り替えるコストが要素をレンダリングするコストを上回っている場合、これは物事を遅くする可能性さえあるということです。しかし、「Element2」が十分に複雑/重い場合、この手法は大いに役立ちます。

お役に立てれば!

于 2012-07-20T16:22:15.943 に答える