Я хотел бы знать, как будет реализован драйвер OpenGL для изучения внутренних возможностей opengl? - PullRequest
3 голосов
/ 26 июля 2011

Я изучаю OpenGL и очень хочу знать, как будет взаимодействовать с видеокартой.

Я чувствую понимание того, как это было реализовано в графическом драйвере, даст мне полную информацию о opengl (благодаря этому я могу знать, какие этапы / факторы влияют на мои решения относительно производительности в opengl).

Есть ли какие-либо пути для этого пути. Изучение «Mesa lib» поможет мне в этом аспекте? Я на правильном пути?

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Отличная серия из 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-рендеринга действительно является черным искусством, и есть очень мало «истинных в каждом случае» ответов. Лучший способ учиться - с трудом завоеванным опытом.

Эти рекомендации, вероятно, настолько близки, насколько это возможно каждому:

  1. широко использовать LOD (сетки, текстуры и шейдеры)
  2. старайтесь, чтобы количество ничьих было как можно ниже
  3. старайтесь, чтобы ваши промежуточные буферы были как можно меньше (количество и размер) для отложенного рендеринга
  4. попытаться выполнить рендеринг с половинным разрешением (например, частицы и постобработка)
  5. всегда предпочитайте арифметику перед доступом к текстуре в шейдерах
  6. всегда помните, что «хорошо выглядит», козыри «правильно»
  7. предпочитают алгоритмическую оптимизацию перед низкоуровневой оптимизацией
3 голосов
/ 26 июля 2011

Вам будет нелегко пытаться понять внутренности драйвера OpenGL (средства отслеживания состояний в терминологии Mesa / Gallium), не зная об API OpenGL.

Сам OpenGL определен в терминах абстрактной графической машины, и на самом деле гораздо проще понять OpenGL с этой точки зрения, чем пытаться сделать это через драйвер.

Просмотр исходного кода драйвера, несомненно, поможет вам понять любые узкие места, связанные с этим конкретным драйвером. И, конечно, это помогает увидеть шаблоны в других драйверах. Но гораздо больше помогает читать технические документы об архитектурах графических процессоров.

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