私は現在、OpenGLを使用してWindows用のビデオプレーヤーに取り組んでいます。それはうまく機能しますが、私の主な目標の1つは精度です。つまり、表示される画像は、ビデオとして保存された画像とまったく同じである必要があります。
ビデオ/ファイル/入力に関連するすべてのものを取り除いて、私は私のglutDisplayFuncとしてこれらの線に沿って何かを持っています:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLubyte frame[256*128*4]; // width*height*RGBA_size
for (int i=0;i<256*128;i++)
{
frame[i*4] = 0x00; // R
frame[i*4+1] = 0xAA; // G
frame[i*4+2] = 0x00; // B
frame[i*4+3] = 0x00; // A
}
glRasterPos2i(0,0);
glDrawPixels(256,128,GL_RGBA,GL_UNSIGNED_BYTE,frame);
glutSwapBuffers();
過剰のコードと組み合わせる。
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(256, 128);
glutCreateWindow("...");
glutDisplayFunc(Render);
glPixelZoom(1,-1); // use top-to-bottom display
glEnable(GL_DEPTH_TEST);
glutMainLoop();
これは非常に簡単で、実際のコードを大幅に簡略化したものです。RGB値#00AA00のフレームが作成され、glDrawPixelsで描画されます。予想どおり、出力は緑色のウィンドウです。一見、すべてが良さそうです。
しかし、http://instant-eyedropper.com/などのツールを使用してピクセルの正確なRGB値を知ると、すべてのピクセルが#00AA00として表示されるわけではないことがわかります。一部のピクセルの値は#00A900になります。これは、左上隅の最初のピクセル、および同じ線上の3番目、5番目など、すべての不均一な線の場合に当てはまります。
他のプログラムが同じファイルに適切な色を出力するため、InstantEyedropperやWindowsでは問題になりません。
今私の質問:おそらくより速く行く方法として、glDrawPixelsがどういうわけかピクセル値を変更する可能性がありますか?このような関数は、入力した内容を正確に表示することを期待しているので、どう考えるかはよくわかりません。