問題タブ [blit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
542 参照

c++ - SDL バックグラウンド ブリッティングによりゲームが遅くなる

これに関する他の質問を調べましたが、探している答えが得られないようです。現在のゲームは 60 fps で実行され、デバッグ モードでは 9.5 ミリ秒/フレーム (リリース モードでは 3.8 ミリ秒/フレーム) かかります。これは、プレイヤー、敵、およびマップがすべて画面にブリットされているため、fps がまったく低下していないように見えますが、1024x768 の BG 画像をブリットすると、27 ~ 30 FPS に低下し、各フレームがレンダリングされるようになりました。 33 ミリ秒/フレームで。ゲームループはこちら ---

その img の 1 つの blit で fps を半分に下げることができるようにするには、何かが足りないのでしょうか? ところで、私はそれがSDL_DisplayFormatだとは思いません.私はすでにそのコードを持っています.imgの読み込みを扱うコードの断片をここに示します---

1 回またはたまにだけブリットしたいのですが、すべてのフレームでキャラクターの動きがあるので、動きを待ってから再ブリットしても無駄です。背景などに別のサーフェスで setVideoMode を使用する必要がありますか? 誰でも私を助けることができますか?

0 投票する
3 に答える
3658 参照

c - SDL - float 値を rect パラメータとして渡す Blit Surface

特定の水平および垂直速度に基づいて、画面上でサーフェスを移動する必要があります。これらの速度を完全にランダムにする必要があります。私のアイデアは、ランダムな浮動小数点数 (私は成功しました) を生成し、それらを速度として使用することでした。このようにして、速すぎたり遅すぎたりすることなく、さまざまな速度を設定できました。問題は次のとおりです。サーフェスが描画される新しい四角形を決定するためのパラメーターとしてSDL_BlitSurfacea のみを受け入れ、4 つの s で構成される構造体です。2 つは座標用、2 つは次元用です。SDL_RectSDL_Rectint

再開: SDL でサーフェスをブリッティングする際に正確に作業するにはどうすればよいですか?

0 投票する
2 に答える
6715 参照

opengl - GL_COLOR_BUFFER_BIT マスクが指定されている場合、glBlitFramebuffer はすべてのカラー アタッチメントをコピーしますか?

ある FBO から別の FBO にピクセルをコピーし、それぞれに複数の (同じ数である必要はありません) 色のアタッチメントがあり、マスクが の場合GL_COLOR_BUFFER_BIT、どの色のアタッチメント ( GL_COLOR_ATTACHMENT0GL_COLOR_ATTACHMENT1、....、GL_COLOR_ATTACHMENTi) がコピーされますか? それらのすべて?はいの場合、これらの FBO に異なる数のカラー バッファが接続されている場合はどうなりますか?

この方法でバインドされた 2 つの FBO があるとします。

fbo12色のアタッチメントとfbo24色のアタッチメントがあります。

glBlitFrameBufferでは、この場合、ブリットカラーのアタッチメントはどのようになりますか?

これは、OpenGL ドキュメントのどこにも見つかりませんでした。

0 投票する
2 に答える
1299 参照

core-graphics - Core Animation を使用してちらつきなく、繰り返し描画された CoreGraphics ビットマップ コンテキストを画面に表示するにはどうすればよいですか?

NSView高フレームレートで繰り返し変化するカスタムQuartz2D描画を示す大きな画像があります。ただし、フレームごとに描画の一部のみが変わる場合があります。これまでの私のアプローチは、まずオフスクリーン ビットマップ コンテキストに描画し、次にそのコンテキストから画像を作成し、最後にビューの CoreAnimation レイヤーのコンテンツをその画像で更新することです。

私の最初の質問は、そのアプローチが一般的に理にかなっているのか、それがパフォーマンスに関しては正しいのかということです。

オフスクリーン ビットマップ コンテキストへの描画は十分に高速に動作し、ダーティ エリアのみを再描画するように最適化されています。したがって、そのステップの後、画面に表示する必要があるオフスクリーンバッファー内の領域をマークする一連の長方形があります。今のところ、オフスクリーンのビットマップ コンテキストから作成された画像で CoreAnimation レイヤーのコンテンツを更新するだけです。これは基本的にはうまくいきますが、ちらつきます。すべて)まだ描かれていません。CATransaction lock/unlock/begin/end/flushNSView lockFocus/unlockFocusで遊んでみましNSDisableScreenUpdates/NSEnableScreenUpdatesたが、ちらつきを回避する方法がまだ見つからなかったので、同期を正しく行うための実際の正しいシーケンスは何だろうと思っていましたか?

以下は初期化コードのスケッチです。

そして、ここに描画コードのスケッチがあります:

汚い地域の知識も活かしたいです。このアプローチを使用して、画面上の汚れた領域のみを更新する方法はありますか?

ご協力いただきありがとうございます!

更新:ちらつきの原因となる問題を見つけたと思います。を使用して、ビットマップ コンテキストからピクセル バッファーを使用してイメージを作成しますCGImageCreate(...)CGBitmapContextCreateImage(...)代わりに使用すると機能します。CGBitmapContextCreateImage書き込み時にコピーするので、ビットマップコンテキストが再度更新されたときにピクセルを書き込みます。正しく理解できれば、以前は機能しなかった理由が説明されます。パフォーマンスに影響を与える可能性のあるカーネルへの呼び出しを行うため、慎重に使用する必要がある場所を読んだCGBitmapContextCreateImageので、ダーティ領域を考慮して、関連するピクセルを新しい画像バッファーにコピーするだけだと思います。これは理にかなっていますか?