Известные ошибки в реализациях OpenGL 3, OpenGL 4 - PullRequest
9 голосов
/ 27 ноября 2010

Как мы все узнаем в конце концов, спецификация - это одно, а реализация - другое. Большинство ошибок мы вызываем сами, но иногда это не так.

Полагаю, было бы полезно составить небольшой список:

Каковы в настоящее время известные ошибки в драйверах графического процессора, связанные с реализацией последних версий OpenGL и GLSL?

Пожалуйста, не забывайте всегда публиковать соответствующую видеокарту и версию драйвера .

Ответы [ 2 ]

2 голосов
/ 27 ноября 2010

Позвольте мне начать:

  • GPU: подтверждено на AMD / ATI Radeon HD 4650
  • Тип: проблема GLSL
  • Связанная с GL версия: подтверждено 3.3, возможно 3.1 и выше (или даже раньше)
  • Соответствующая ссылка: http://forums.amd.com/devforum/messageview.cfm?catid=392&threadid=139288
  • Версия драйвера: подтверждено на Catalyst 10.10 (9-28-2010)
  • Статус: по состоянию на 2010-11-27 у него есть исправление, но оно, по-видимому, еще не достигло общедоступной версии драйвера (поэтому, даже если исправление будет выпущено, пользователи с не очень свежей версией драйверов все равно будут быть затронутым как месяцы)
  • Описание:

Если в вашем вершинном шейдере есть какая-либо переменная attribute (in), имя которой имеет лексическое значение после gl_, то вы не можете использовать встроенные атрибуты, а именно gl_VertexID и gl_InstanceID. Если вы попытаетесь, шейдер не будет работать (скорее всего, пустой экран).

  • Обходной путь (новый):

Доступно только с GLSL 3.3 и выше или с расширением GL_ARB_explicit_attrib_location .

Определите местоположение любого атрибута явно равным 0, добавив layout(location=0) к его объявлению в вершинном шейдере. Вы можете, но не должны использовать это для других атрибутов; важно то, что ЛЮБОЙ атрибут должен иметь местоположение, равное 0. После того, как вы это сделаете, наименование больше не будет важным.

  • Обходной путь (альтернатива):

Используйте соглашение об именах, которое требует, чтобы вы называли свои атрибутные переменные, начиная с a_, что не повредит читабельности вашего кода и сделает их все лексическими до gl_ (безопасная зона).

1 голос
/ 18 мая 2012

Еще одна ошибка gl_VertexID:

  • Графический процессор: NVIDIA GeForce 9400M
  • Тип: проблема GLSL
  • Версия драйвера: NVDANV50Hal 1.6.36
  • Версия OpenGL: 2.1, GLSL 1.2 с использованием расширения GL_EXT_gpu_shader4

Это происходит на Macbooks.Вполне возможно, что новый драйвер, поддерживающий OpenGL 3.2, который поставляется с OS X Lion, устранил проблему, но многие платформы настроены только на использование устаревших драйверов 2.1, так что это по-прежнему актуально.

Если вы читали gl_VertexID доВы читаете другой атрибут в вершинном шейдере, последний атрибут возвращает ненужные данные.Если другим атрибутом является gl_Color, независимо от того, как он используется, ничто не будет отображено.Доступ к другим встроенным атрибутам может привести к другому странному поведению.

  • Обходной путь:

Если вы должны использовать gl_VertexID, сначала прочтите все остальные атрибуты, которые вам понадобятся.Если вы сначала прочитали другой атрибут, а затем gl_VertexID, все последующие чтения атрибута будут работать нормально.

...