Это довольно странно, но я заметил, что до 40 процентов времени рендеринга потрачены внутри glAlphaFuncx. Я знаю, что тестирование альфа-версии является очень дорогим, но интересная вещь, я не использую его :) Никакое единственное место кода не использует тестирование альфа-версии, и при этом я не вызываю эту функцию никаким другим способом.
Я также проверил уровень GL на смешивание на других видах материала, который мог бы заставить это происходить, но это - каково это.
Так, если кто-либо будет знать то, что могло бы заставить glAlphaFuncx появляться на трассировке производительности Сэмплера ЦП, то я буду рад услышать его :)
Обновление: зафиксированный ссылка снимка экрана: http://twitpic.com/2afxho/full
Обновление 2: функция, которая приводит к вызову glAlpaFuncx, содержит одну строку:
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
Обновление 3: Я пытался установить точку останова в этой функции, но кажется, что она не была вызвана вообще. Я предполагаю, что профилировщик завинчен здесь...
Странно, что эта функция появляется в трассировке профилировщика, поскольку вы говорите, что не используете ее. Попробуйте установить точку останова в glAlphaFuncx, чтобы увидеть, откуда она вызывается.
Но в любом случае это не должно быть проблемой, glAlphaFunc просто установит состояние на стороне сервера GL, он не (или должен) выполнять больше обработки, чем это. Это не должно быть проблемой производительности, возможно, это ошибка в реализации GL или в профилировщике.
Конечно, вы можете отключить альфа-тест с помощью glDisable (GL_ALPHA_TEST).
Из того, что я вижу, glAlphaFuncx может просто принимать удар на себя для настройки рендеринга или перемещения пикселей. Возможно, он выполняется первым или последним в процессе рендеринга.
Есть ли у вас реальная проблема с производительностью, или вы просто пытаетесь найти куски кода для вырезания/оптимизации?
Если да, то вам следует установить точку останова в glAlphaFuncx и посмотреть, откуда и зачем она вызывается. Для этого просто вызовите консоль отладчика и введите "break glAlphaFuncx".
Пробовали ли вы явно отключить использование альфа-каналов?
glDisable(GL_ALPHA_TEST);
http://www.khronos.org/opengles/documentation/opengles1_0/html/glEnable. html
Независимо от системы такое поведение - время, потраченное на представление нарисованного - почти всегда указывает на то, что графический процессор является узким местом. Либо вы рисуете слишком много (если частота кадров является проблемой), либо ЦП делает недостаточно (если частота кадров в порядке).
На самом деле, есть еще одна возможность - объем работы графического процессора в порядке, но система ожидает какого-то периода вертикального отката.(Это кажется маловероятным для устройства, которое когда-либо имеет только ЖК-дисплей и не поддерживает отображение растрового сканирования, но, возможно, все еще теоретически работает таким образом внутри.) Результат все тот же, что и объем работы ЦП. Тем не менее, у вас есть время, чтобы сделать больше, не влияя на частоту кадров.
Я не могу точно объяснить, почему glAlphaFuncx
конкретно появляется в стеке вызовов, но если он никогда не вызывает на самом деле, то я считаю это отвлекающим маневром, пока не будет доказано обратное. .