ターゲット言語は C/C++ で、プログラムは Linux でのみ動作する必要がありますが、プラットフォームに依存しないソリューションが明らかに優先されます。私は Xorg を実行しており、XVideo と OpenGL が利用可能です。
Intel グラフィックスを搭載した Intel Core 2 Duo の 1024x768 で期待できる FPS はどれくらいですか? (描画数のみ。アレイは RAM で準備完了と見なします。正確な予測は必要ありません)
カラー トリプレットの 2D 配列を描画する最速の方法:
GL_LUMINANCE
色相が必要ない場合はグレースケール ストレージを使用してください。はるかに高速です!)glTexImage2D
GL_TEXTURE_MIN_FILTER
テクスチャ パラメータが に設定されていることを確認します。GL_NEAREST
この方法はglDrawPixels
(何らかの理由で不適切に実装される傾向がある)よりもわずかに高速であり、プラットフォームのネイティブのブリッティングを使用するよりもはるかに高速です。
また、ピックスマップが変更されていない場合は、手順 2 を実行せずに手順 4 を繰り返し実行するオプションが提供されます。もちろん、これははるかに高速です。
遅いネイティブ ブリッティングのみを提供するライブラリには、次のものがあります。
期待できる FPS に関しては、Intel グラフィックスを搭載した Intel Core 2 Duo で 1024x768 テクスチャを描画すると、テクスチャがフレームごとに変化する場合は約 60FPS、そうでない場合は >100FPS になります。
しかし、自分でやってみてください;)
しばらく前に C と OpenGL を使用してこれを行ったところ、フル スクリーン サイズのクワッドを作成し、テクスチャ マッピングを使用してビットマップをクワッドの面に転送することで、非常に優れたパフォーマンスが得られました。
以下にサンプルコードを示しますので、ご活用いただければ幸いです。
#include <GL/glut.h>
#include <GL/glut.h>
#define WIDTH 1024
#define HEIGHT 768
unsigned char texture[WIDTH][HEIGHT][3];
void renderScene() {
// render the texture here
glEnable (GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D (
GL_TEXTURE_2D,
0,
GL_RGB,
WIDTH,
HEIGHT,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
&texture[0][0][0]
);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0, -1.0);
glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0, -1.0);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0, 1.0);
glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0, 1.0);
glEnd();
glFlush();
glutSwapBuffers();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow(" ");
glutDisplayFunc(renderScene);
glutMainLoop();
return 0;
}
「何fpsが期待できるか」という質問には、真剣に答えることはできません。プロセッサのレイアウトを行った人のおじいちゃんに名前を付けても、そうではありません。それは非常に多くの変数に依存します。
これは永遠に続く可能性があり、答えは絶対にあなたのアルゴリズムに依存します。openglアプローチに固執する場合は、さまざまな拡張機能(http://www.opengl.org/registry/specs/NV/pixel_data_range.txtなど)を試して、ニーズに合っているかどうかを確認することもできます。すでに述べたglTexSubImage()メソッドは非常に高速ですが。
ピクセルを画面にダンプしようとしている場合は、おそらくsdl の 「表面」機能を利用したいと思うでしょう。最大のパフォーマンスを得るには、入力データが出力サーフェスと同様のレイアウトになるように調整してください。可能であれば、一度に 1 つずつサーフェスにピクセルを設定することは避けてください。
SDL は、それ自体がハードウェア インターフェイスではなく、DirectX、OpenGL、DirectFB、xlib などの他の多くのディスプレイ レイヤーの上で適切に機能する移植性レイヤーであるため、非常に優れた移植性と非常に薄いレイヤーが得られます。これらのテクノロジに加えて、パフォーマンス オーバーヘッドをほとんど支払う必要はありません。
1024x768でいくつのFPSを期待できますか?
その質問への答えは非常に多くの要因に依存しているので、言うことは不可能です。