Производительность OpenGL на iPhone: glAlphaFuncx на трассе - PullRequest
8 голосов
/ 31 июля 2010

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

Я также проверилСлой GL для смешивания с другими вещами, которые могут вызвать это, но это то, что он есть.

Итак, если кто-нибудь знает, что может вызвать появление glAlphaFuncx на трассировке производительности CPU Sampler, я был бырад это слышать:)

Обновление: исправлена ​​ссылка на скриншот: http://twitpic.com/2afxho/full

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

[context presentRenderbuffer:GL_RENDERBUFFER_OES];

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

Ответы [ 4 ]

1 голос
/ 03 августа 2010

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

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

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

0 голосов
/ 08 августа 2010

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

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

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

0 голосов
/ 04 августа 2010

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

glDisable(GL_ALPHA_TEST);

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

0 голосов
/ 04 августа 2010

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

У вас есть реальная проблема с производительностью, или вы просто пытаетесь найти фрагменты кода, которые можно вырезать / оптимизировать?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...