Яку версію OpenGL я повинен кодувати, враховуючи сумісність та продуктивність? [зачинено]


19

Коли специфікація OpenGL оновлюється, вони лише додають функції. Тож теоретично, останнє та найкраще обладнання з підтримкою профілів Core та Compatibility повинно просто запустити супер старий код OpenGL1.1. Це виявилося правдою. Я провів 12 місяців на навчанні OpenGL1.1 і добре зрозумів це.

Я прочитав кілька глав однієї з цих фантазійних нових книг OpenGL4.2. Майже всі функції, на які я покладаюсь, застаріли (як-от Мережі відображення), що дозволяє мені припустити, що існують кращі способи виконання всіх цих речей.

Розглянемо, що 1.1, ймовірно, буде підтримуватися ВСЕ сучасним обладнанням. 1.1 був випущений у 1992 році. Я не кодую важкий спосіб просто підтримувати 20-річні ПК. :-p Я думаю, що розумно вважати, що більшість геймерів мають апаратне забезпечення, яке випускається приблизно в 5-річному середньому діапазоні.

Я думаю, що новіші методи розроблені так, щоб універсально бути або однією з двох речей: ефективнішою чи легшою для кодування. Я десь читав, що це ніколи і те і інше! XD

Яку версію OpenGL найбільше підтримує апаратне забезпечення, яке становить 5 років? Яку версію має найбільш сенс використовувати, враховуючи ці міркування?

Відповіді:


19

Зважаючи на ваші міркування, я потім вискочив, щоб побачити, коли випущені специфікації OpenGL для кожної версії, а також врахував деяке загальне розуміння того, що я бачив.

OpenGL 3, який представив FBO, VAO та інші речі, вийшов у світ 11 липня 2008 року, майже 5 років тому. Звичайно, ви не можете очікувати, що всі карти після цієї дати негайно матимуть доступну OpenGL 3.

Оглянувши опитування апаратного забезпечення Steam , 40% - DirectX 10. Оскільки OpenGL 3 вимагає подібної відеокарти, зазвичай вважати, що більшість карт DirectX 10 можуть працювати принаймні OpenGL 3.

OpenGL 3 підтримується на картах у повній мірі до серії GeForce 8xxx, які були досить популярними, якщо я правильно пам'ятаю. Також цікаво відзначити, що Intel HD 2000 та 3000 Graphics (Sandy bridge) підтримують лише OpenGL 3, тому майте це на увазі, якщо ви плануєте націлювати їх на них.

Висновок: OpenGL 3 - це гарна ставка (також пам’ятайте, що більшість геймерів, залежно від вашої цільової аудиторії, напевно, матимуть краще обладнання, ніж у середньому).


Це чудова відповідь. Це було саме те розуміння, яке я шукав.
Суди

3
"Також цікаво зазначити, що Intel HD 2000 та 3000 Graphics (Sandy bridge) підтримують лише до OpenGL 3" Примітка: вони підтримують лише GL 3.1 (адже Intel просто не хвилює). А оскільки це Intel, «підтримку» слід брати із зерном солі. Їх апаратне забезпечення може підтримувати версію 3.3, але вони цього не піддають (тому що, знову ж таки, їм все одно). Я б взагалі не використовував OpenGL 3.x на апаратному забезпеченні Intel. Дійсно, я б уникав робити що-небудь шейдер на базі апаратних засобів Intel.
Нікол Болас

Потім питання виникає; наскільки насичений ринок обладнанням Intel? Чи варто взагалі не піклуватися про графіку Intel і використовувати OpenGL3.x? Або є достатньо обладнання для графічного забезпечення Intel, щоб насправді мати значення?
Суди

1
Одна з проблем - OSX. Остання версія 10.7.x підтримує лише OpenGL 3.2 , 10.6.x підтримує лише 3.0 (а може бути, навіть 2.x). 10.5.x сильно різниться залежно від картки, 1.3, 1.5 та 2.0 - це можливості. Ці системи будуть назавжди застрягли у цих версіях OpenGL, якщо користувач не заплатить гроші Apple за оновлення. Немає оновлень драйверів відеокарт чи таких для OSX, які б оновлювали OpenGL. Інші проблеми полягають у тому, що деякі із вбудованих чіпсетів Intel в нетбуки використовуються. Багато з них лише OpenGL 2.0 або гірше.
Девід К. Єпископ

І тоді у вас є 3DS, який все ще гойдає OpenGL 1.1 ...
kirbyfan64sos

8

Я б почав тут: http://store.steampowered.com/hwsurvey

Я б не орієнтувався на часовий проміжок на стільки відсотків користувачів, наприклад, якщо ви орієнтуєтесь на 4cpus, ви наберете лише 45% користувачів, але якщо ви працюєте до 2, ви наблизитеся до 90%


1
Де ви бачили OpenGL? Я бачу лише DirectX (що цікаво відзначити, якщо ви плануєте орієнтуватися лише на Windows).
DMan

Я здогадуюсь, що ви робите ніжку на основі поломки відеокарти
Джиммі

Так - я нічого не бачив про OpenGL - але ви можете отримати це з моделей карт, чи, справді, я вважаю, що між версіями DirectX та OpenGL було б достатньо співвідношення.
лосось

3

Відповідь залежить від того, потрібно чи не потрібно працювати на графіці Intel, випущеній у зазначений вами часовий період.

Якщо ви це зробите, то обмежтеся OpenGL 2.1 (або навіть 1.5), якщо ви цього не зробите, то 3.x здається розумним.

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


Мені здається, що я повинен додати приклад того, чому 1.1 часто неможливо. Одне з таких, яке може бути легко пов'язане з функціональністю 1.1, - це декілька пропускань. Оскільки у вас немає FBO, і ви здебільшого обмежені 8 бітами на текстуру компонентів, ви виявите, що, коли суміш пройде нагромадженням, ви почнете втрачати точність. Використовуйте 3/4/5 пропуску, і кінцевий результат почне виглядати (або гірше) 16-бітної або 8-бітної графіки. Однак для моделювання ефектів вищого рівня часто потрібні кілька проходів (базовий мультитекстур, який ми всі знайомі) з набором функцій 1.1.
Максим Мінімус

Навіть графіка Intel HD (Sandy / Ivy Bridge) підтримує лише OpenGL 3.1, і це вже рік. Це зводиться до того, чи бажаєте ви підтримувати дешеві (або малопотужні) ноутбуки.
Стів Ховард

2
@SteveHoward: Intel HD Graphics може підтримувати OpenGL 4. Джерело
Janus Troelsen

Ця стаття починається приблизно з 3 місяців після того, як я опублікував свій коментар.
Стів Ховард

1

По-перше, такі речі OpenGL 1.1, як "Списки дисплея", все ще працюватимуть у новому контексті, якщо у вас є профіль сумісності (як правило, так). Єдина проблема полягає в тому, якщо ви очікуєте порту на OpenGL ES, одну з консольних графічних бібліотек (вони, як правило, позбавлені OpenGL, подібні до OpenGL ES) або навіть WebGL (що все-таки вимагатиме трохи переробки).

Особисто я рекомендував би використовувати шейдери вершин / фрагментів та VBO. Вони існують вже досить давно і пропонують великі покращення продуктивності. Напевно, ви могли б навіть забезпечити просту віддачу, якщо ви перекладете функції в клас.

Можливо, ви також зможете наслідувати такі об'єкти, як об’єкти масиву Vertex.


0

Деякі люди все ще використовують XP з 5-річним обладнанням. А це означає, що ви навіть не можете кодувати за допомогою DirectX 10 або OpenGL 3. А OpenGL 3 має безліч функцій, від яких ви дійсно отримаєте користь, як фреймбуфери тощо. Чесно кажучи, я трохи збільшив би ваші системні вимоги, щоб ви могли включити ці функції.


8
-1: "Із обладнанням для 5-річного віку деякі люди все ще використовують XP. Це означає, що ви навіть не можете кодувати з DirectX 10 або OpenGL 3." Неправда. OpenGL 3.x працює дуже добре в XP. З-за XP обмежено лише D3D10 з причин API / драйвера. Це не має нічого спільного з обладнанням.
Нікол Болас

0

Для програмного забезпечення для 3D зазвичай є кодові шляхи як для "базової" графічної версії api, так і для "останньої та найбільшої" версії api.

Поширеними базовими версіями графіки є D3D9 та OpenGL 2.1 / GLSL 120 .. У обох помітно відсутні шейдери геометрії, оскільки старе обладнання не підтримує їх.

Інший базовий варіант - ANGLE - це GLES 2.0 плюс EGL, який працює на D3D9, настільному OpenGL та мобільному GLES 2.0. Це зворотній кінець для Google Chrome і webgl у chrome та Firefox.

http://code.google.com/p/angleproject/

Щодо обраної вами "останньої та найкращої" версії, то це складніше. Чим новіші api та обладнання ви націлюєте, тим краще виглядають функції, які ви можете підтримувати, але лише на найновішому та найкращому обладнанні.

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