【发布时间】:2016-08-25 14:57:39
【问题描述】:
我在我的应用程序中使用了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 中的调用),我无论如何都会得到两个 glScissor() 调用,这似乎也是错误的。
编辑
我想以某种方式实现这两种剪刀效果,我的意思是 - Window 应该只在它的剪刀区域中绘制,而内部 ListView 也只能在它的剪刀区域中。
正如您在图片中看到的那样,我用红色矩形标记了剪刀区域Window,它可以工作,用蓝色矩形标记我想在其上绘制ListView 的区域。这就是我尝试使用嵌套剪刀的原因,但我知道它没用。所以基本上我的问题是,实现这一目标的最佳方法是什么?
【问题讨论】:
-
一个有引用计数的对象
-
@PlasmaHH 抱歉,我不明白你的意思。什么具有引用计数的对象与我的问题有关?
-
您有一个对象,您可以在其中调用启用/禁用,它会计算您执行此操作的频率,并且仅在它调用启用/禁用的第一个/最后一个。
标签: c++ user-interface opengl