-1

FrameBufferObject から RGB ピクセルを取得したい: fboName. 方法はありますか?GPU から CPU へのメモリ マップには多くの時間がかかりますか?

    glGenFramebuffers(1, &fboName);
    glBindFramebuffer(GL_FRAMEBUFFER, fboName);     
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorTexture, 0);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
4

1 に答える 1

1

glReadPixelsフレームバッファから画像を読み取るために使用します。クライアント メモリに直接パックするか、中間の Pixel Buffer オブジェクトを使用して、非同期操作とメモリ マッピングを可能にすることができます。

GPU から CPU へのメモリ マップには多くの時間がかかりますか?

とにかく、GPU メモリからシステム メモリにデータをコピーする必要があります。メモリ マップ (つまり、ページ フォールトによる DMA 転送のトリガー) を介して行われるか、glGetBufferSubData (PBO を使用) または glReadPixels によって明示的に行われる場合、帯域幅の使用率とパフォーマンスに関して大きな違いはありません。最も重要なことは、要求されたピクセル形式が GPU 側のデータの形式と一致することです。一致しない場合は、コストのかかる変換を実行する必要があります。

データをフィードしたいのでlibx264、マップされたバッファを使用するのが最もうまくいくと思います。これにより、前のフレームの libx264 処理と次のフレームの非同期転送をインターリーブできます。

于 2012-12-29T15:47:15.953 に答える