Отличная серия из 10 частей, объясняющая именно это, вы можете найти в блоге ryg. http://fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part-1/ Это объясняется в терминах DirectX, но оба API обрабатываются довольно схожим образом с помощью фактического драйвера.
Одной из лучших статей, описывающих характеристики производительности реального оборудования, является статья о графических процессорах Gems 2 http://developer.nvidia.com/node/52. Самой статье несколько лет, но она определенно повысит вашу осведомленность о проблемном пространстве. Кроме того, изучение графических расширений NVIDIA (http://developer.nvidia.com/content/bindless-graphics) даст вам дополнительное понимание, если вы поймете, почему это ускоряет процесс. Кроме того, презентация «Batch Batch Batch» - это классика по оптимизации взаимодействия CPU / GPU (http://www.nvidia.de/docs/IO/8230/BatchBatchBatch.pdf).
Но я чувствую себя обязанным вернуться к первоначальному вопросу. Спросите себя, что на первом месте: знание того, как программировать на C ++, или знание внутренних компонентов GCC. Есть веская причина, по которой все почти все рассматривают 3d API как черный ящик. Драйверы различаются (API / NVIDIA) в зависимости от аппаратного обеспечения, а характеристики производительности вдвое выше. Я действительно рекомендую вам просто начать разрабатывать некоторый код OpenGL и учиться, оптимизируя ваш код. Вы можете выполнить небольшую технику (например, окклюзию параллакса) или, возможно, лучше написать целую сцену с различными видами динамического освещения, теней, отложенного рендеринга и последующей обработки. А затем отведите пару недель на оптимизацию и посмотрите, как далеко вы сможете продвинуться.
Оптимизация 3D-рендеринга действительно является черным искусством, и есть очень мало «истинных в каждом случае» ответов. Лучший способ учиться - с трудом завоеванным опытом.
Эти рекомендации, вероятно, настолько близки, насколько это возможно каждому:
- широко использовать LOD (сетки, текстуры и шейдеры)
- старайтесь, чтобы количество ничьих было как можно ниже
- старайтесь, чтобы ваши промежуточные буферы были как можно меньше (количество и размер) для отложенного рендеринга
- попытаться выполнить рендеринг с половинным разрешением (например, частицы и постобработка)
- всегда предпочитайте арифметику перед доступом к текстуре в шейдерах
- всегда помните, что «хорошо выглядит», козыри «правильно»
- предпочитают алгоритмическую оптимизацию перед низкоуровневой оптимизацией