Чисті OpenGL або GLSL? [зачинено]


11

Мене зацікавило вивчення графічного програмування, тому очевидною точкою входу було вивчення OpenGL. Але збираючи розсіяну інформацію по форумах та на сайтах, схоже, що чиста реалізація OpenGL згасає, оскільки більшість речей, що передують 3.0, застаріли і цитують огляд на Amazon, "оскільки в 3.0 все йде про шейдери". Також книжки, які я бачив, виглядають так, що лише надзвичайна охоплює новішу версію, але лише частково, тому що хороша частина книги викладає застарілі функції, а там, зокрема, для GLSL є книги.

Тут я зіткнувся зі своєю першою проблемою, деякі апаратні засоби не підтримують GLSL, включаючи ноутбук із інтегрованою графікою, яку я планував використовувати. Функція

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

викликає дефект сегментації, і, погляди на це, мій драйвер не підтримує шейдери

Отже, моє запитання полягає в тому, яка життєздатність робити гру лише в OpenGL? чи не бракує мені незамінних хороших рис з мови шейдера? І яке обладнання (старий gen i3, i5, i7, старі VGA) можна очікувати, щоб правильно запустити гру з шейдерами?


1
GLSL - це OpenGL, я думаю, що ваше питання пов'язане з тим, чи обладнання, яке ви збираєтесь використовувати, сумісне з OpenGL 3, а не з GLSL.
deceleratedcaviar

@Daniel. Якщо апаратне забезпечення / драйвер сумісне з OpenGL 3.0, це GLSL сумісне?
ibrabeicker

1
GLSL є частиною специфікації OpenGL 3.0, так що так.
deceleratedcaviar

1
Ви кажете, «з вигляду цього мій драйвер не підтримує шейдери». Яку версію OpenGL ви отримуєте? Ви правильно завантажуєте всі доступні функції OpenGL?
Нікол Болас

1
@ Papavoikos: Якщо він поверне NULL, у вас набагато більше проблем, ніж використовувати шейдери. Ви правильно створюєте ваш OpenGL-контекст? Пам'ятайте: ви не можете викликати будь-які функції GL, поки у вас не буде створений дійсний контекст і зроблений поточний.
Нікол Болас

Відповіді:


9

Код шейдера, безумовно, зрозуміліший і простіший для розуміння, ніж безлад з викликів glTexEnv, glTexGen та текстурної матриці, і має бонус, який ви можете висловити будь-яку більш-менш довільну математичну операцію, використовуючи її (чого ви не можете зробити з фіксованою конвеєр - те, що ви називаєте "чистим OpenGL"). Єдиним потенційним недоліком є ​​те, що вам потрібно написати певну кількість підтримуючої інфраструктури у своєму коді, перш ніж ви зможете використовувати їх, тоді як зі старим способом ви можете значно зануритися прямо. Я називаю це "потенційним" недоліком, тому що я насправді думаєте, що це змушує вас готувати речі та дізнаватися трохи більше заздалегідь - OpenGL має репутацію "легкої", і ви час від часу бачите, як люди обдурені цим і пірнають прямо, не знаючи, що вони роблять спочатку,

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

Це не означає, що я рекомендував би їх через GLSL, але вони є варіантом, який є, якщо вам справді потрібно запустити цей апаратний клас, і корисно знати, що вони існують, що приводить мене до остаточної точки . Ви дійсно впевнені, що вам справді потрібно запустити цей апаратний клас (наприклад, у випадку вашого ноутбука, можливо, ви просто знехтували, щоб отримати точки входу)?


Я повністю нехтував тим фактом, що Mesa3d все ще знаходиться в специфікації opengl 2.1. Я це
виправлю

6

Слід також зазначити, що «чистого OpenGL» вже немає.

OpenGL ES 2.0 позбавив усіх нешейдерних речей, а оскільки WebGL заснований на ньому, він також працює лише з шейдерами. OpenGL 3.0 зняв зникнення з усіма фіксованими функціями та видалив 3.1 (у основних профілях. Більшість реалізацій підтримують профілі сумісності, але MacOSX не має для їх виконання 3.2).

Тож я б не пропонував вивчати недетермні OpenGL.


6

Якщо ви раніше займалися будь-яким програмуванням, написання власного шейдерного коду за допомогою GLSL стане набагато приємнішим. Я спочатку намагався вивчити OpenGL з фіксованою функцією, і мені було складніше, оскільки це не мало сенсу. Тоді я спробував вивчити GLSL за допомогою помаранчевої книги, і це було набагато простіше і з тих пір робило більше. Всього мої 2 копійки.

Я б точно пішов у напрямку GLSL через можливість писати програми для GPU.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.