これよりも優れた解決策があるかどうか疑問に思っています: レンダリング コードとカラー ピッキング コードがあり、これら 2 つのコード (VBO など) 間で共有できるすべてのものを既に共有しており、私のコードは次のようになります。
void paintGL()
{
label1:
if(picking_running)
{
... code to draw the colors for the picking
}
else
{
... normal code to draw the scene the user should see
}
if(picking_running)
{
... do the colorpick and identify the clicked element...
picking_running = FALSE;
goto label1; // this prevent the paintGL function to end and get swapBuffers called, I don't want the "flickering" to be visible to the user between the color picking mode and the normal mode
}
} // end of the paintGL, here swapBuffers is called automatically
コードは機能し、ちらつきはユーザーに表示されませんが、率直に言って、コード内の goto のアイデアは貧弱な解決策のように思えます。
他に良いアイデアはありますか?