Перейти чистый OpenGL или GLSL? [закрыто]

11

Я заинтересовался изучением графического программирования, так что очевидно, точка входа должна была узнать OpenGL. Но собрать рассеянную информацию вокруг форумов и сайтов, кажется, что чистая реализация OpenGL исчезает из, так как большинство вещей, предварительно 3,0 в настоящее время устарели и со ссылкой на обзор на Амазонке «так как 3,0 это все о шейдерах». Кроме книг, которые я видел, выглядит как только superbible охватывает более новую версию, но только частично, потому что значительная часть книги учит устаревшие функции, и есть книги специально для GLSL.

Здесь я столкнулся с моей первой проблемой, некоторые аппаратные средства не поддерживают GLSL, в том числе ноутбука с интегрированной графикой Intel, что я планировал использовать. Функция

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

вызывает ошибку сегментации и от взглядов его мой водитель не поддерживает шейдеры

Так что мой вопрос, что жизнеспособность сделать игру только в OpenGL? я буду отсутствовать незаменимые функции хорошего от языка шейдеров? И какие аппаратные средства (старые поколения i3, i5, i7, старые УПУ) можно ожидать, чтобы запустить игру с шейдерами должным образом?

ibrabeicker
источник
1
GLSL является OpenGL, я думаю , что ваш вопрос связан ли аппаратное вы собираетесь на использование в OpenGL 3 совместим, специально не GLSL совместимы.
deceleratedcaviar
@Daniel так , если аппаратное обеспечение / драйвер OpenGL 3.0 совместимая это GLSL совместимы?
ibrabeicker
1
GLSL является частью спецификации OpenGL 3.0, так что да, это так.
deceleratedcaviar
1
Вы говорите, «от взглядов его мой водитель не поддерживает шейдеры.» Какую версию OpenGL вы получаете? Вы правильно загружаются все доступные функции OpenGL?
Никол Bolas
1
@Papavoikos: Если она возвращает NULL, вы получите гораздо больше проблем , чем следует ли использовать шейдеры. Правильно ли вы создаете свой контекст OpenGL? Помните: вы не можете вызывать никакие функции GL, пока не создадите действительный контекст и не сделаете его текущим.
Никол Болас

Ответы:

9

Код шейдера определенно яснее и проще для понимания, чем путаница вызовов glTexEnv, glTexGen и текстурной матрицы, и имеет преимущество, заключающееся в том, что вы можете выражать любую более или менее произвольную математическую операцию, используя ее (которую вы не можете сделать с фиксированной трубопровод - что ты называешь «чистый OpenGL»). Единственный потенциальный недостаток в том, что вы должны написать определенное количество вспомогательной инфраструктуры в вашем коде, прежде чем вы можете начать использовать их, в то время как со старым способом вы можете в значительной степени погружения прямо. Я называю это «потенциальный» недостаток, потому что я на самом деле думает, что это делает вас подготовить вещи и узнать немного больше заранее - OpenGL имеет репутацию «просто» и иногда видят люди дурачат этим и дайвинг прямо в самом деле не зная, что они делают первый,

Аппаратно вы можете рассчитывать на почти все выпущенные в последние 5/6/7 лет , чтобы иметь некоторую степень поддержки шейдеров, но - в случае старых Intels (некоторые из серии 9xx) - это не будет GLSL, но вместо этого будут более старые расширения GL_ARB_vertex_program и GL_ARB_fragment_program . В них используется язык шейдеров, похожий на ассемблер, но - время исповеди - мне лично это очень нравится. На самом деле его довольно легко использовать, если ему не хватает некоторых более современных функций (таких как ветвление) и требуется больше строк кода шейдера, чтобы сделать то же самое. Поддержка инфраструктуры , необходимая в основной программе для этих расширений является гораздо более легким , чем GLSL тоже.

Это не означает, что я рекомендовал бы их на GLSL однако, но они являются вариантом, что есть, если вам действительно нужно работать на этом классе оборудования, и это полезно иметь в виду, что они существуют, что приводит меня к конечной точке , Вы действительно уверены, что вам действительно нужно работать на этом классе аппаратных средств (например, в случае вашего ноутбука вы можете просто пренебречь, чтобы получить точки входа)?

Максимус Минимус
источник
Я полностью игнорировал тот факт, что Mesa3d все еще находится в спецификации OpenGL 2.1. Я починю что
ibrabeicker
6

Также следует отметить, что «чистого OpenGL» больше нет.

OpenGL ES 2.0 угробил все без шейдера вещи, а с WebGL основан на него, он тоже работает только с шейдерами. OpenGL 3.0 осуждается все фиксированная функция вещи, и 3,1 удалить его (в основных профилях. Большинство реализаций поддерживают профили совместимости, но MacOSX не для их 3.2 реализации).

Поэтому я не хотел бы предложить обучение не-шейдеров OpenGL.

Николь Болас
источник
6

Если вы сделали какие-либо программирования в прошлом, писать свой собственный код шейдера с использованием GLSL будет намного более приятным. Первоначально я пытался обучения фиксированной функции OpenGL, и это было трудно для меня, потому что это не имеет смысла. Тогда я попытался узнать GLSL, используя оранжевую книгу, и это было намного проще и сделать более с тех пор. Просто мои 2 цента.

Я бы определенно идти к GLSL из-за силы, чтобы писать программы для GPU.

Джои Грин
источник