|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
OpenGL Performance Tips
· Use glColorMaterial when only a single material property is being varied rapidly (at each vertex, for example). Use glMaterial for infrequent changes, or when more than a single material property is being varied rapidly.
· Use glLoadIdentity to initialize a matrix, rather than loading your own copy of the identity matrix. · Use specific matrix calls such as glRotate, glTranslate, and glScale, rather than composing your own rotation, translation, and scale matrices and calling glMultMatrix. · Use glPushAttrib and glPopAttrib to save and restore state values. Use query functions only when your application requires the state values for its own computations.
· Use display lists to encapsulate potentially expensive state changes. For example, place all the glTexImage calls required to completely specify a texture, and perhaps the associated glTexParameter, glPixelStore, and glPixelTransfer calls as well, into a single display list. Call this display list to select the texture. · Use display lists to encapsulate the rendering calls of rigid objects that will be drawn repeatedly.
· Use evaluators even for simple surface tessellations to minimize network bandwidth in client-server environments. · Provide unit-length normals if possible, and avoid the overhead of GL_NORMALIZE. Avoid using glScale when doing lighting because it almost always requies that GL_NORMALIZE be enabled. · Set glShadeModel to GL_FLAT if smooth shading isn't required. · Use a single glClear call per frame if possible. Do not use glClear to clear small subregions of the buffers; use it only for complete or near-complete clears.
· Use a single call to glBegin(GL_TRIANGLES) to draw multiple independent triangles, rather than calling glBegin(GL_TRIANGLES) multiple times, or calling glBegin(GL_POLYGON). Even if only a single triangle is to be drawn, use GL_TRIANGLES rather than GL_POLYGON. Use a single call to glBegin(GL_QUADS) in the same manner, rather than calling glBegin(GL_POLYGON) repeatedly. Likewise, use a single call to glBegin(GL_LINES) to draw multiple independent line segments, rather than calling glBegin(GL_LINES) multiple times.
· In general, use the vector forms of commands to pass precomputed data, and use the scalar forms of commands to pass values that are computed near call time. · Avoid making redundant mode changes, such as setting the color to the same value between each vertex of a flat-shaded polygon. · Be sure to disable expensive rasterization and per-fragment operations when drawing or copying images. OpenGL will apply textures to pixel images if asked to do so.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
КОНЦЫ Исполнения OpenGL
Использование glColorMaterial когда только единственная материальная собственность изменяется быстро (в каждой вершине, например). Используйте glMaterial для редких изменений, или когда более, чем единственная материальная собственность изменяется быстро.
glLoadIdentity Использования, чтобы инициализировать матрицу, а не загружая вашу собственную копию матрицы тождества. Специфические матричные вызовы Использования как например, glRotate, glTranslate, и glScale, а не формируя ваше собственное вращение, перевод, и масштабные матрицы и вызов glMultMatrix. Использование glPushAttrib и glPopAttrib, чтобы сохранять и восстанавливать государственные величины. Функции запроса Использования только когда ваше приложение требует государственные величины для своих собственных вычислений.
Дисплейные списки Использования, чтобы изолировать потенциально дорогие государственные изменения. Например, установите все вызовы glTexImage требовавшиеся, чтобы полностью определять текстуру, и возможно связанные glTexParameter, glPixelStore, и вызовы glPixelTransfer также, в единственный дисплейный список. Назовите этот дисплейный список, чтобы выбираться текстуру. Дисплейные списки Использования, чтобы изолировать предоставление вызовов жестких объектов, которое сделает многократно.
Вычислители Использования ровные для простой поверхности tessellations, чтобы минимизировать сетевую ширину полосы частот на клиента-сервер сред. Обеспечивать устройство-длину нормальное если возможно и избегать подвесного GL_NORMALIZE. Избегайте использовать glScale при занятии освещения поскольку это почти всегда requies, что GL_NORMALIZE приспособлен. Установившее glShadeModel на GL_FLAT если плавное затенение не потребовалось. Использование единственный вызов glClear за фрейм если возможно. Не используйте glClear, чтобы очищать небольшие подобласти буферов; используйте это только для полного или около-полных очисток.
Использование единственный вызов на glBegin(GL_TRIANGLES), чтобы делать многочисленными независимыми треугольниками, а не вызывая glBegin(GL_TRIANGLES) многочисленное время, или вызывая glBegin(GL_POLYGON). Даже если бы только единственный треугольник должен быть сделан, используйте GL_TRIANGLES а не GL_POLYGON. Используйте единственный вызов на glBegin(GL_QUADS) так же, а не вызывая glBegin(GL_POLYGON) многократно. Подобно, используйте единственный вызов на glBegin(GL_LINES), чтобы делать многочисленными независимыми сегментами строки, а не вызывая glBegin(GL_LINES) многочисленное время.
В общих чертах, использовать векторные формы команд, чтобы передавать precomputed данные и использовать скалярные формы команд, чтобы передавать величины, что вычислены около времени вызова. Избегать делать излишними изменениями режима, как например, установка цвета в ту же величину между каждой вершиной зетененного плоского многоугольника. Не забывать выводить из строя дорогую растеризацию и за-операции фрагмента при чертеже или копируя образы. OpenGL ПРИЛОЖИТ текстуры к образам пикселя если спрошено делать так.
| |
|
|
| |