Это спецификация glScissors
, поскольку glClear
рассматривается в OpenGL как команда рисования.Таким образом, поведение, которое вы видите, совершенно нормально (D3D работает аналогично), но глючит на других телефонах, где, как ни странно, вам кажется, что вы работаете!
О том, какое решение выбрать, я не знаю, оба действительны.Это вопрос вкуса, я бы сказал.Я предпочитаю первое, потому что легче понять, что происходит.
Теперь, если в вашей реализации OpenGL второе решение окажется быстрее первого, я бы выбрал второе.Тест!
Под glHood:
Позвольте мне поделиться тем, что я знаю о настольных графических процессорах, и немного поразмышлять (не принимайте это всерьез!).Команда glClear
фактически приводит к отрисовке полноэкранного четырехугольника, поскольку рисование треугольников является «быстрым путем» на графических процессорах.Это, вероятно, более эффективно, чем DMA или фиксированное оборудование, поскольку оно параллельно (все шейдерные ядра очищают свою часть экрана, цвет, z и трафарет), и если вы сделаете это, вы сможете избежать затрат на фиксированное оборудование.
О glScissor
, я слышал, что это реализовано с помощью буферизации трафарета (тот же механизм, что и обычный трафаретный буфер OpenGL), поэтому только фрагменты, попадающие в зону ножниц, могут участвовать в глубине dest, затенении фрагментов, смешивании и т.д.по той же причине, что и glClear
, избегайте специального оборудования).Он также может быть реализован в виде фрагмента отбрасывания + динамического ветвления на современных графических процессорах.
Теперь вы можете понять, почему это работает именно так.Только фрагменты полноэкранного четырехугольника, который находится в зоне ножниц, могут «затенять» цветной буфер и очищать его!