alexsandrf1
Наверное расширения неправильно проверяешь. Попробуй запустить OpenGL Extensions Viewer. У меня на всех моих картах Radeon HD 6310M, Intel HD Graphics 4600 и GTX 755M эти расширения присутствуют, а они гораздо новее твоей.
alexsandrf1
> скажите, вообще эти расширения должны везде работать?
> и любая новая видеокарта должна их поддерживать или расширения перестают
> поддерживаться?
Спецификация OpenGL в плане расширений никаких обязательств не накладывает. Каждый производитель может делать с ними что угодно - добавлять новые, убирать старые. Но так как существуют старые игры, которые используют расширения, функционал которых уже вошёл в ядро, то логично расширения оставить, чтобы на новых картах и драйверах старые игры работали. На практике так и делают. Я ни разу не встречал, чтобы старые расширения выкидывали. Всегда было так, что если что-то есть в ядре, то оно есть и в расширениях, но вообще этого никто не гарантирует.
Я бы порекомендовал использовать функционал ядра 2.1 и старее по-нормальному, а не через расширения. А если нужно что-то новее из версий 3.x или 4.x, то может получиться так, что на старых драйверах есть расширения, но их функционал отсутствует в ядре. В таких случаях лучше реализовать оба варианта - через расширения и через ядро OpenGL. Но если лень, то можно в принципе и только через расширения или только через ядро (в случае, если поддерживать старые драйверы не собираешься).
alexsandrf1
> скажите какие там расширения работы с шейдерами?
Это не расширения, это ядро OpenGL 2.x. Хотя их загрузка похожа на загрузку расширений. Когда ты используешь ядро, то просто проверяешь поддерживаемую версию OpenGL (вместо проверки расширений) и если она не ниже требуемой, то через {wgl,glX,egl}GetProcAddress загружаешь функции glLinkProgram, glShaderSource и так далее и используешь. Если используешь какой-нибудь glew, то он сам загрузит их за тебя, просто вызываешь их и всё.
Моласар
Предлагаешь поддерживать ядро, а для тех случаев, когда ядра нет - использовать расширения?
Такое можно, но это усложнит код, нужно держать в рабочем состоянии и функционал ядра и расширения, плюс могут быть комбинации расширений.
Это может быть проблематично дебажить, это будет проблема для QA, которым нужно всё это будет тестить.
На мой взгляд целесообразнее делать поддержку нескольких мажорных версий ядра.
gammaker
> Я ни разу не встречал, чтобы старые расширения выкидывали. Всегда было так, что
> если что-то есть в ядре, то оно есть и в расширениях, но вообще этого никто не
> гарантирует.
Как насчёт paletted textures?
> Всегда было так, что если что-то есть в ядре, то оно есть и в расширениях, но
> вообще этого никто не гарантирует.
Вовсе нет.
> может получиться так, что на старых драйверах есть расширения, но их функционал отсутствует в ядре.
Маловероятно.
Executor
> Как насчёт paletted textures?
Это наверное какая-то древнота, которую я не застал.
Executor
> Вовсе нет.
Может совсем уж старые и экзотические вещи, которые я никогда не использовал, и выкидывают, но старые демки, которые используют старые расширения (но кроссвендорные) работали на новых видеокартах. Весь OpenGL 2.0 - 4.5 я вижу в расширениях на всех трёх своих видеокартах. За веткой 1.x не слежу, но например VBO через расширение ARB точно доступен.
Executor
> Маловероятно.
У меня был раньше ноутбук с Mobility Radeon HD 4570. Он показывал поддержку OpenGL только версии 2.1, но при этом через расширения были доступны геометрические шейдеры и почти весь остальной функционал OpenGL 3.x. Правда это был устаревший драйвер и после обновления драйвера стала версия 3.3 + несколько расширений из 4.x. Сам OpenGL 4 видеокарта сама по себе не держит, но при этом кое-что из нового OpenGL через расширения поддерживается.
Многие пользователи не знают что такое обновление драйверов и у них тоже может оказаться такая ситуация.
gammaker
> Может совсем уж старые и экзотические вещи, которые я никогда не использовал, и
> выкидывают, но старые демки, которые используют старые расширения (но
> кроссвендорные) работали на новых видеокартах. Весь OpenGL 2.0 - 4.5 я вижу в
> расширениях на всех трёх своих видеокартах. За веткой 1.x не слежу, но например
> VBO через расширение ARB точно доступен.
Не весь функционал ядра присутствует в расширениях. Есть фичи, которые никогда в виде расширений не были.
Executor
> На мой взгляд целесообразнее делать поддержку нескольких мажорных версий ядра.
Ну так какой смысл делать поддержку 2.0, если сделана поддержка 1.1 + расширения? Функции без ARB-EXT-постфиксов ничуть не быстрее ведь.
> Как насчёт paletted textures?
Кстати, редкое исключение. Но т.к. оно и в старые времена не присутствовало повсеместно - ни одна игра не требовала безоговорочно его наличия.
Собсно, емнип, его никогда не было на Radeonax.
> Есть фичи, которые никогда в виде расширений не были.
Например?
gammaker
> Это наверное какая-то древнота, которую я не застал.
Ты не застал GeForce FX, сынок?
> Он показывал поддержку OpenGL только версии 2.1, но при этом через расширения
> были доступны геометрические шейдеры и [b]почти[/b] весь остальной функционал OpenGL
> 3.x
Я выделил ключевое слово)
Моласар
> Ты не застал GeForce FX, сынок?
Не застал как разработчик. Я начал изучать OpenGL только 5 лет назад, а тогда у меня уже была карта GeForce 9800GT. И разработка под всякое старьё меня не интересовала.
Моласар
> Я выделил ключевое слово)
Ключевое для чего? Если у юзера подобная ситуация, а программа написана под ядро 3.3, то она у него не запустится. А могла бы запустится, если бы она использовала расширения и если бы ей их было бы достаточно. А так как там почти весь функционал OpenGL 3.x, то скорее всего программе бы их хватило.
gammaker
> И разработка под всякое старьё меня не интересовала.
У пользователей видеокарты, как правило, на пару поколений старше, чем у разработчиков. Если, конечно, речь не об играх ААА-класса, где пользователи ежегодно выпрашивают у родителей новый компьютер. :)
> Ключевое для чего?
Для понимания, почему ядро только версии 2.1, хотя есть отдельные расширения от 3.х. Поддержка ядра 3.х - это поддержка всех расширений 3.х. Если хотя бы одно не поддерживается - то всё, ядра 3.х быть не может. А вот если есть все расширения 3.х - то и ядро будет 3.х, обратное, как сказал Executor, маловероятно.
gammaker
Весь OpenGL 2.0 - 4.5 я вижу в расширениях на всех трёх своих видеокартах. За веткой 1.x не слежу, но например VBO через расширение ARB точно доступен.
TBO не было на интелах в виде расширения, но было в ядре - из-за того, что приложение не ожидало такого подвоха, визуализация скатывалась в режим совместимости. Добавили ли расширение сейчас не проверял.
gkv311
Это же интел. На нём всё всегда было через ж.
Моласар
> У пользователей видеокарты, как правило, на пару поколений старше, чем у
> разработчиков. Если, конечно, речь не об играх ААА-класса, где пользователи
> ежегодно выпрашивают у родителей новый компьютер. :)
Я это всегда учитывал. OpenGL 3.3 видеокарты (но с неподдерживающим его драйвером) уже тогда были у многих. А на большее я до сих пор не замахиваюсь, так как хотелось бы ещё хотя бы самые новые мобилки захватить.
Моласар
> Для понимания, почему ядро только версии 2.1, хотя есть отдельные расширения от
> 3.х. Поддержка ядра 3.х - это поддержка всех расширений 3.х. Если хотя бы одно
> не поддерживается - то всё, ядра 3.х быть не может. А вот если есть все
> расширения 3.х - то и ядро будет 3.х, обратное, как сказал Executor,
> маловероятно.
Я в курсе, что из чего следует. Множество тех, у кого есть GL 2.1 + расширения немного шире, чем множество тех, у кого есть GL 3.3. Я говорил о том, что возможно есть смысл написать приложение так, чтобы оно работало у всех, а не только у последних. Хотя смысл конечно не очень большой.
gkv311
> TBO не было на интелах в виде расширения, но было в ядре - из-за того, что
> приложение не ожидало такого подвоха, визуализация скатывалась в режим
> совместимости. Добавили ли расширение сейчас не проверял.
Проверил у себя. Так и не добавили. А ещё оказалось, что на AMD нет расширения texture swizzle, но эта фича есть в ядре. Либо расширение есть, но не во всех контекстах отображается - только начиная от контекста 3.3.
Моласар
> Ну так какой смысл делать поддержку 2.0, если сделана поддержка 1.1 +
> расширения? Функции без ARB-EXT-постфиксов ничуть не быстрее ведь.
У автора проблемы с поддержкой расширений, поэтому есть смысл сделать как минимум 2.0, чтобы проблему решить.
А от расширений избавится только потому, чтоб в коде не поддерживать старьё. Уж чтобы ГЛ 2.х не было в дровах, это что-то откровенно старое должно быть.
А учитывая, что вендоры ложат болт даже на ДХ9 в дровах, я боюсь представить что творится со всякими древними расширениями.
> Кстати, редкое исключение. Но т.к. оно и в старые времена не присутствовало
> повсеместно - ни одна игра не требовала безоговорочно его наличия.
> Собсно, емнип, его никогда не было на Radeonax.
Помимо палитр там ещё какие-то старенькие фичи были, которые в ядре 1.х находятся, а не работают.
> > Есть фичи, которые никогда в виде расширений не были.
> Например?
Точно уже не вспомню, надо изучать доки. Я даже как-то на форуме об этом писал.
Там начиная с GL3+, был функционал, который в расширениях никак не присутствовал, а был только в ядре.
Ни разу не видел, чтобы GL_ARB_shading_language_100 не потдерживалось.
Там начиная с GL3+, был функционал, который в расширениях никак не присутствовал, а был только в ядре.
Есть такая штука как GL_EXT_gpu_shader4. И вот она даёт функционал Gl3+ для Gl2.1. Но! Переодически встречаются карточки, которые держат GL3.0, а это расширение - нет. Т.е. просто дровописатели решили не заморачиваться.
Помоему адекватный OpenGL умер вместе с восьмой серией жирафов. Уже начиная с GL3.0 пошла какая-то адская несовместимость, все переиначили и подчистили.
И PhysX начиная с третьей версии перелопатили полностью. Т.е. по сути сделали то, что никому не было нужно.
В чём была проблема поддерживать совместимость и клепать новые расширения, до сих пор не понимаю. В это как бы и есть ключевая идея OpenGL, что вот есть базовая версия 1.0, а всё что выше - через расширения, но при этом часть расширений может быть доступна в самой новой версии гл, уже безо всяких расширений.
Хочешь - делай проверку на расширения, хочешь - делай проверку на версию гл, суть не меняется.
Вот с какого перепуга, спрашивается в GL3.0 всё переиначили? У кого руки чесались? Подобный подход - выкинть старые зависимости и переделать всё с нуля обычно характерен для молодых и неопытных программистов, которые вместо того, чтобы разобраться в старом начинают городить новое, никому не нужное.
g-cont
> Есть такая штука как GL_EXT_gpu_shader4. И вот она даёт функционал Gl3+ для Gl2.1.
Не, я не об этом совсем. Там прям были функции, мне честно говоря лень ковыряться в доках и хидерах, чтобы найти этот функционал.
> В чём была проблема поддерживать совместимость и клепать новые расширения, до сих пор не понимаю.
А я наоборот считаю, что они слишком сильно заморочились с обратной совместимостью и получили уродливость. Благо Вулкан всё исправит. :)
> Вот с какого перепуга, спрашивается в GL3.0 всё переиначили?
Как раз таки ГЛ3 был большим разочарованием по той причине, что они всё НЕ переиначили, а оставили обратную совместимость. Не смотря на депрекейтед, много говнища так и потянулось до ГЛ4.
g-cont
> Подобный подход - выкинть старые зависимости и переделать всё с нуля обычно
> характерен для молодых и неопытных программистов, которые вместо того, чтобы
> разобраться в старом начинают городить новое, никому не нужное.
Строго наоборот. Молодые и неопытные достраивают этажи к хрущёвкам, а опытные - сносят и строят новый дом, сразу со всеми удобствами, нормальной сантехникой, большими комнатами, местом для консьержа, грузовым лифтом и прочими житейскими радостями.
Executor
> А я наоборот считаю, что они слишком сильно заморочились с обратной
> совместимостью и получили уродливость
Но у нас уже есть замечательный апи без обратной совместимости, DX. Попытки запустить старые игры (DX6, DX7) приводят к большому разочарованию. Притом, что никакой принципиальной невозможности реализовать DX6/DX7 драйвер под современное железо нет.
Если OpenGL забьёт на обратную совместимость - с нормальными игорями можно будет попрощаться навсегда. По крайней мере теми, авторы которых не открыли в своё время сорцы (а таких большинство).
g-cont
> Переодически встречаются карточки, которые держат GL3.0, а это расширение -
> нет.
Помнится, были карточки, которые держали VTF с нулём Vertex shader image units :)))
Не, ну я конечно за разделение core и compatibility profile, да вот фишка в том, что compatibility может быть медленнее только лишь в каких-то хитрых тестах. Потому что обычные приложения обычно упираются в банальности навроде пропускной способности шины, филлрейта или производительность алу. А то и вообще cpu-bound.
Тема в архиве.