2011-07-27 60 views
5

私はOpenGLとVisual Studio C++のラバーバンドへの道を模索しています。私が遭遇している問題は、Win 7コンピューター(つまり、私の上司)がフロントバッファーを読んだり描画したりすることができないため、まっすぐ描くことができなくなることです。OpenGlのラバーバンド

glDrawBuffer(GL_FRONT); 
glEnable(GL_COLOR_LOGIC_OP); 
glLogicOp(GL_XOR); 
glPolygonMode(GL_FRONT, GL_LINE); 
glRecti(X0, Y0, X1, Y1); 
X1 = X; 
Y1 = Y; 
glRecti(X0, Y0, X1, Y1); 
*//Doesn't draw lines* 

または(longに取ると、それに再描画)、バックバッファにフロントバッファをコピー描画swapbuffersを呼び出した後、agian

glReadBuffer(GL_FRONT); 
glDrawBuffer(GL_BACK); 
glCopyPixels(0, 0, Width, Height, GL_COLOR); 

glEnable(GL_COLOR_LOGIC_OP); 
glLogicOp(GL_XOR); 
glPolygonMode(GL_BACK, GL_LINE); 
SwapBuffers(hdc); 
glRecti(X0, Y0, X1, Y1); 
X1 = X; 
Y1 = Y; 
glRecti(X0, Y0, X1, Y1); 
SwapBuffers(hdc); 
*//Doesn't display original drawing* 

任意のアイデアをswaping?

+2

間違いはありますか? glGetError()を試してみてください。 –

+0

@Martinhoエラーはありません – kaiken

+1

「ラバーバンド」とはどういう意味ですか?あなたはあなたの質問に達成しようとしていることを正確に説明することができますか? –

答えて

1

私はこのようにそれを行うだろう:

  • は、テクスチャを作る
  • メインメモリに画像を読み取るために(バックバッファまたは他の)オフスクリーンバッファへ
  • 使用glReadPixelsをシーンを描きますメインメモリ内の画像のサイズを変更することができます。

この後、画面に画像を描画するには、作成したテクスチャでテクスチャを付けてレンダーエリア全体をカバーする単一のクワッドを描画します。この方法では、画像をスクリーンに描画するときに実際のシーンを再レンダリングする必要はありません。

最新のOpenGL実装は、テクスチャにレンダリングすることもできます。イメージをメインメモリに移動して戻す必要はありません。また、シーンのレンダリングがすでに遅い場合、ここでのパフォーマンスの違いは目立たないでしょう。