0

私が開発しているアプリケーションの場合、できる必要があります

  • さまざまな幅と色の線を描く
  • 単色で塗りつぶされた三角形を描く
  • テクスチャ付き (アルファなし) のクワッドを描画する

とても簡単ですが...

すべての座標はピクセル空間の整数であり、非常に重要です: glReading は、2 つの異なる OS (Linux と freebsd) を実行する 2 つの異なるグラフィック カードを備えた 2 つの異なるマシンで、フレーム バッファからすべてのピクセルを読み取ると、まったく同じビット シーケンスになる必要があります (適切な定数フォーマット変換が与えられた場合)。

OpenGL とハードウェア アクセラレーションを使用してこれを安全に達成することは不可能だと思います。異なるグラフィック カード (異なるベンダーの) が異なるラスター化アルゴリズムを実装している可能性があるからです。(OpenGl の仕様は、アルゴリズムを提案しているため、これについては明確ですが、特定の状況では実装が異なる可能性があるとも述べています)。また、非常に低速で単純なグラフィックスをレンダリングするため、ハードウェア アクセラレーションはあまり必要ありません。

ハードウェアアクセラレーションを無効にするだけでこれを達成できると思いますか? その場合、Linux ではどうなりますか? MESA ソフトウェア ラスタライザーをデフォルトにしますか? その場合、それが常に機能することを確認できますか、それとも何か不足していますか?

4

1 に答える 1

3

レンダリングされたピクセルで読み返し、その数学的正確性/再現性に強く依存していることは、設計上の欠陥のように聞こえます。この行動の目的は何ですか?たとえば、画像から何らかの情報を抽出する必要がある場合、レンダリングの前に抽象的なベクトル化された情報からこの情報を抽出してみませんか?

とにかく、外部のレンダリング コードに依存していて、読み取りコードを小さなエラーに対してより堅牢にする方法がない場合は、多くの手間とメンテナンス作業にサインアップすることになります。他の人は小さなパッチごとにコードを壊す可能性があります。なぜなら、そのようなビットレベルのピクセルの正確さは、単体テストなどを行っているときは通常問題にならないからです。可能であり、すべてが正確なピクセル ビットに影響を与える可能性があります。

線 (幅と色が異なる) と四角形 (テクスチャの有無にかかわらず) の 2 つの操作のみが必要な場合は、画像ピクセル (R8G8B8) を表す 8 ビット uint 配列で動作する独自のレンダリング/ラスタライザー コードを作成することをお勧めします。あなたが提案している操作はそれほど厄介ではないので、パフォーマンスが重要でない場合、これは実際には長期的にはより良い方法かもしれません.

于 2012-04-19T16:09:35.050 に答える