Если у вас иерархическая структура, то у вас есть слои. Каждый ребенок может рисовать только в той области, которая определена его родителем. Таким образом, каждый слой должен подсчитать буфер трафарета (GL_INCR
) и может рисовать, только если текущее значение буфера трафарета равно «глубине» слоя:
int layer = 0;
glStencilFunc(GL_ALWAYS, 1, 0xff);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
// draw initial layer
// ...
layer ++;
glStencilFunc(GL_EQUAL, layer, 0xff);
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
// draw layer 1
// ...
layer ++;
glStencilFunc(GL_EQUAL, layer, 0xff);
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
// draw layer 2
// ...
Обратите внимание, что, как правило, буфер трафарета имеет 8 битов, это ограничивает число слоев 256.