Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с версиями OpenGL. 
:(
    Опции темы
OlegIT
Дата 5.4.2018, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Пишу программы на Qt на двух компьютерах, на стареньком с Windows XP с Qt 5.3.1 и Windows 10 с Qt 5.10.1, на этом компьютере собираю и вариант программы под Android. Необходимо вставить графику на OpenGL. Осваиваю шейдеры. С шейдерами пока всё получается, но под Windows 10 и Android нет функций glEnable, glShadeModel, glTexParameteri, glGetString, glGetIntegerv и ещё может каких нет. Под Windows 10 в описании они есть, реализации нет, под Android их и в описании нет. Программа пока простая и без применения этих функций работает, но чем их заменить найти не могу.
Ещё под Windows XP и под Android в шейдерах не доступна переменная gl_Normal, хотя в описании она есть. Как учесть нормали к треугольникам, которые приходят из файла *.STL вместе с координатами вершин?
В инете читал, в новой версии OpenGL многие функции удалены. Как во всём этом разобраться и учесть версии?

PM MAIL   Вверх
Alexeis
Дата 5.4.2018, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Вам нужно определится на какой версии OpenGL или OpenGL ES планируете писать программу и использовать апи этой версии.
Новые функции OpenGL можно вызвать получив предварительно их адрес. Но в Qt это дело упростили создав подходящие классы, которые сами получают адреса функций. 
Например qopenglfunctions3_3_core для версии OpenGL 3.3 Следует также придерживаться языка шейдеров своей версии OpenGL, иначе могут возникать ошибки при компиляции шейдера. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
OlegIT
Дата 6.4.2018, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Я что ещё не понимаю. Хорошо, выбрал я версию, но на компьютере пользователя может стоять другая версия OpenGL. И что, всё рассыпется, работать не будет?
Читаю документацию упоминание о применимости функций в версиях не вижу.
Хотелось бы ещё с чистым OpenGL разобраться, а не только с Qt обёрткой.
PM MAIL   Вверх
Alexeis
Дата 6.4.2018, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Цитата(OlegIT @  6.4.2018,  17:43 Найти цитируемый пост)
Я что ещё не понимаю. Хорошо, выбрал я версию, но на компьютере пользователя может стоять другая версия OpenGL. И что, всё рассыпется, работать не будет?

Если будет более старая версия, чем заявлена тогда да работать не будет. Версия нужна для того, чтобы опенгл понимал в каком синтаксисе интерпретировать. Обратную совместимость никто не отменял. Это значит что если мы захотим создать контекст младшей версии на драйвере, который поддерживает более новую, то опенгл нам такое позволит и будет эмулировать старую версию. Но если мы создадим контекст 4й версии, то код 1го опенгла уже не заработает. 

Цитата(OlegIT @  6.4.2018,  17:43 Найти цитируемый пост)
Хотелось бы ещё с чистым OpenGL разобраться, а не только с Qt обёрткой. 
Да нет там особо никакой обертки. Qt помогает создать контекст и помогает управлять объектами OpenGL. Не более того. Это как раз самая не интересная часть, которая отличается на разных платформах. Вряд ли вам доставят удовольствие вызовы wglGetProcAddress, которые на андройде еще и не заработают. Все остальное переносится 1 в 1.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
OlegIT
Дата 6.4.2018, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Цитата

Это значит что если мы захотим создать контекст младшей версии на драйвере, который поддерживает более новую, то опенгл нам такое позволит и будет эмулировать старую версию.

Увы, с этим я уже столкнулся, в новой версии убраны некоторые функции и совместимости не получается.
PM MAIL   Вверх
OlegIT
Дата 17.4.2018, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Много всякой информации нашёл по шейдерам, но спецификацию найти не могу, какие тапы есть, функции? В примерах есть например такие normalize max reflect pow mix cross vec3 vec4 gl_FragColor, сказано о них очень кратко. Где найти полную информацию о шейдерах?


PM MAIL   Вверх
Alexeis
Дата 17.4.2018, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Да вроде как доступно для всех версий на оф сайте.
Вот например для версии OpenGL 3.3 pdf ка
https://www.khronos.org/registry/OpenGL/spe...ngSpec.3.30.pdf

Цитата(OlegIT @  6.4.2018,  19:51 Найти цитируемый пост)
Увы, с этим я уже столкнулся, в новой версии убраны некоторые функции и совместимости не получается. 
Да гранаты у вас не той системы. Контекст значит для новой версии получился. У меня код древний как Г. мамонта написанный на OpenGL 1.0 прекрасно работает на новых видеокартах. На то он и легаси делается, чтоб старые программы работали. Была ситуация, что интеловский драйвер под 3й OpenGL (3.0) не хотел создавать контекст для более младших. Т.е. указываешь ему создай мне такой контекст, а он говорит, мол не могу и создает той версии, какой может. Но вычитать версию контекста возможно и возможно понять, что он не может. Старые ителовские карты весьма плохо дружили с опенглом.

Это сообщение отредактировал(а) Alexeis - 17.4.2018, 16:40


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
OlegIT
Дата 18.4.2018, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Спасибо.
Вот ещё ссылка на описание шейдеров.

По поводу совместимости. Может гранаты у меня не те, но практика такая, работал я немного с OpenGL в нулевых, в старой ещё версии. Сейчас по образу и подобию сделал тестовый проект с glBegin() ... glEnd(). В Windows XP всё прекрасно заработало. Стал собирать под Windows 10 и для Android не собирается, нет в новой версии некоторых функций, как я в начале писал. Какая же это совместимость? Если доступ через указатель это условная совместимость.

PM MAIL   Вверх
Alexeis
Дата 18.4.2018, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Цитата(OlegIT @  18.4.2018,  10:37 Найти цитируемый пост)
Стал собирать под Windows 10 и для Android не собирается, нет в новой версии некоторых функций, как я в начале писал. Какая же это совместимость? 

  На андройде, вероятно, вместо OpenGL используется OpenGL ES 2.0. А эта библиотека не гарантирует полную совместимость с OpenGL. Он изначально оптимизировался, чтоб убрать старые неэффективные примитивы. Если нужна совместимость и с андройдами, то тогда лучше выбрать OpenGL ES 2.0 в качестве базовой версии для всего кода. Десктопные платформы также умеют создавать контексты ES 2.0 и выше. Это максимально переносимое решение, но и максимально кастрированное.

На винде любой версии функция glBegin() доступна в
Gl.h /Opengl32.lib . Ее не может не быть. Она работает всегда, даже если нет аппаратной поддержки OpenGL через софтовую эмуляцию. Что же касается Qt, для старого API я бы воспользовался классом типа QOpenGLFunctions_2_0 .

Это сообщение отредактировал(а) Alexeis - 18.4.2018, 10:04


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
OlegIT
Дата 18.4.2018, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Я не про glBegin(), glEnd() говорю, они есть, но получается не нужны, может пока не нужны, нет этих glEnable, glShadeModel, glTexParameteri, glGetString, glGetIntegerv.
Сейчас сижу разбираюсь как в шейдерах материал использовать, а не цвет вершин. И ещё эта непонятная проблема вылезла.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1327 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.