私はglScissor()
自分のアプリケーションで使用しており、正常に動作しますが、問題が発生Window
しました。描画領域が指定されたオブジェクトがありglScissor()
、この領域内ListView
にあり、描画領域も指定する必要があるオブジェクトを描画していますglScissor()
全部描きたくないので。
コードでは、次のように表すことができます。
Window::draw()
{
glEnable(GL_SCISSOR_TEST);
glScissor(x, y, width, height);
// Draw some components...
mListView.draw(); // mListView is an object of ListView type
glDisable(GL_SCISSOR_TEST);
}
ListView::draw()
{
glEnable(GL_SCISSOR_TEST);
glScissor(x, y, width, height);
// Draw a chosen part of ListView here
glDisable(GL_SCISSOR_TEST);
}
しかしもちろん、この状況では有効化/無効化の呼び出しは間違っています:
glEnable(GL_SCISSOR_TEST);
glEnable(GL_SCISSOR_TEST);
glDisable(GL_SCISSOR_TEST);
glDisable(GL_SCISSOR_TEST);
これらの内部 glEnable/glDisable 呼び出し (ListView のもの) を削除すると、やはり間違っているように見える 2 つの glScissor() 呼び出しが発生します。
編集
私はどうにかして両方のシザー効果を達成したいと思います。つまり、ウィンドウはシザー領域でのみ描画し、内部 ListView もシザー領域でのみ描画する必要があります。
画像でわかるように、赤い四角形Window
で WORKS のはさみ領域をマークし、青い四角形で を描きたい領域をマークしましたListView
。そのため、入れ子式のはさみを使用しようとしていましたが、役に立たなかったことがわかりました。基本的に私の質問は、これを達成するための最良のアプローチは何でしょうか?