|
Модераторы: Rickert, Alexeis, BorisVorontsov |
|
OlegIT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 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 многие функции удалены. Как во всём этом разобраться и учесть версии? |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Вам нужно определится на какой версии OpenGL или OpenGL ES планируете писать программу и использовать апи этой версии.
Новые функции OpenGL можно вызвать получив предварительно их адрес. Но в Qt это дело упростили создав подходящие классы, которые сами получают адреса функций. Например qopenglfunctions3_3_core для версии OpenGL 3.3 Следует также придерживаться языка шейдеров своей версии OpenGL, иначе могут возникать ошибки при компиляции шейдера. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
OlegIT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 683 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Я что ещё не понимаю. Хорошо, выбрал я версию, но на компьютере пользователя может стоять другая версия OpenGL. И что, всё рассыпется, работать не будет?
Читаю документацию упоминание о применимости функций в версиях не вижу. Хотелось бы ещё с чистым OpenGL разобраться, а не только с Qt обёрткой. |
|||
|
||||
Alexeis |
|
||||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Если будет более старая версия, чем заявлена тогда да работать не будет. Версия нужна для того, чтобы опенгл понимал в каком синтаксисе интерпретировать. Обратную совместимость никто не отменял. Это значит что если мы захотим создать контекст младшей версии на драйвере, который поддерживает более новую, то опенгл нам такое позволит и будет эмулировать старую версию. Но если мы создадим контекст 4й версии, то код 1го опенгла уже не заработает.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
OlegIT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 683 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Увы, с этим я уже столкнулся, в новой версии убраны некоторые функции и совместимости не получается. |
|||
|
||||
OlegIT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 683 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Много всякой информации нашёл по шейдерам, но спецификацию найти не могу, какие тапы есть, функции? В примерах есть например такие normalize max reflect pow mix cross vec3 vec4 gl_FragColor, сказано о них очень кратко. Где найти полную информацию о шейдерах?
|
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Да вроде как доступно для всех версий на оф сайте.
Вот например для версии OpenGL 3.3 pdf ка https://www.khronos.org/registry/OpenGL/spe...ngSpec.3.30.pdf
Это сообщение отредактировал(а) Alexeis - 17.4.2018, 16:40 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
OlegIT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 683 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Спасибо.
Вот ещё ссылка на описание шейдеров. По поводу совместимости. Может гранаты у меня не те, но практика такая, работал я немного с OpenGL в нулевых, в старой ещё версии. Сейчас по образу и подобию сделал тестовый проект с glBegin() ... glEnd(). В Windows XP всё прекрасно заработало. Стал собирать под Windows 10 и для Android не собирается, нет в новой версии некоторых функций, как я в начале писал. Какая же это совместимость? Если доступ через указатель это условная совместимость. |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
На андройде, вероятно, вместо 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 вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
OlegIT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 683 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
Я не про glBegin(), glEnd() говорю, они есть, но получается не нужны, может пока не нужны, нет этих glEnable, glShadeModel, glTexParameteri, glGetString, glGetIntegerv.
Сейчас сижу разбираюсь как в шейдерах материал использовать, а не цвет вершин. И ещё эта непонятная проблема вылезла. |
|||
|
||||
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |