Производительность OpenGL на iPhone: glAlphaFuncx на трассировке

Это довольно странно, но я заметил, что до 40 процентов времени рендеринга потрачены внутри glAlphaFuncx. Я знаю, что тестирование альфа-версии является очень дорогим, но интересная вещь, я не использую его :) Никакое единственное место кода не использует тестирование альфа-версии, и при этом я не вызываю эту функцию никаким другим способом.

Я также проверил уровень GL на смешивание на других видах материала, который мог бы заставить это происходить, но это - каково это.

Так, если кто-либо будет знать то, что могло бы заставить glAlphaFuncx появляться на трассировке производительности Сэмплера ЦП, то я буду рад услышать его :)

Обновление: зафиксированный ссылка снимка экрана: http://twitpic.com/2afxho/full

Обновление 2: функция, которая приводит к вызову glAlpaFuncx, содержит одну строку:

[context presentRenderbuffer:GL_RENDERBUFFER_OES];

Обновление 3: Я пытался установить точку останова в этой функции, но кажется, что она не была вызвана вообще. Я предполагаю, что профилировщик завинчен здесь...

8
задан Anton 4 August 2010 в 08:32
поделиться

4 ответа

Странно, что эта функция появляется в трассировке профилировщика, поскольку вы говорите, что не используете ее. Попробуйте установить точку останова в glAlphaFuncx, чтобы увидеть, откуда она вызывается.

Но в любом случае это не должно быть проблемой, glAlphaFunc просто установит состояние на стороне сервера GL, он не (или должен) выполнять больше обработки, чем это. Это не должно быть проблемой производительности, возможно, это ошибка в реализации GL или в профилировщике.

Конечно, вы можете отключить альфа-тест с помощью glDisable (GL_ALPHA_TEST).

1
ответ дан 6 December 2019 в 02:23
поделиться

Из того, что я вижу, glAlphaFuncx может просто принимать удар на себя для настройки рендеринга или перемещения пикселей. Возможно, он выполняется первым или последним в процессе рендеринга.

Есть ли у вас реальная проблема с производительностью, или вы просто пытаетесь найти куски кода для вырезания/оптимизации?

Если да, то вам следует установить точку останова в glAlphaFuncx и посмотреть, откуда и зачем она вызывается. Для этого просто вызовите консоль отладчика и введите "break glAlphaFuncx".

0
ответ дан 6 December 2019 в 02:23
поделиться

Пробовали ли вы явно отключить использование альфа-каналов?

glDisable(GL_ALPHA_TEST);

http://www.khronos.org/opengles/documentation/opengles1_0/html/glEnable. html

0
ответ дан 6 December 2019 в 02:23
поделиться

Независимо от системы такое поведение - время, потраченное на представление нарисованного - почти всегда указывает на то, что графический процессор является узким местом. Либо вы рисуете слишком много (если частота кадров является проблемой), либо ЦП делает недостаточно (если частота кадров в порядке).

На самом деле, есть еще одна возможность - объем работы графического процессора в порядке, но система ожидает какого-то периода вертикального отката.(Это кажется маловероятным для устройства, которое когда-либо имеет только ЖК-дисплей и не поддерживает отображение растрового сканирования, но, возможно, все еще теоретически работает таким образом внутри.) Результат все тот же, что и объем работы ЦП. Тем не менее, у вас есть время, чтобы сделать больше, не влияя на частоту кадров.

Я не могу точно объяснить, почему glAlphaFuncx конкретно появляется в стеке вызовов, но если он никогда не вызывает на самом деле, то я считаю это отвлекающим маневром, пока не будет доказано обратное. .

0
ответ дан 6 December 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: