LINUX.ORG.RU

OpenGL ES

 ,


0

1

Изучаю opengl es. Проблема такая: практически сразу после инициализации opengl вызываю glEnableClientState(GL_VERTEX_ARRAY), чтобы потом задать массив вершин и таки что-то изобразить на экране.Однако glGetError выдает GL_INVALID_OPERATION.Соответственно ни массив не могу передать, ни нарисовать что-то.На десктопе и обычном OpenGL все работает нормально, согласно спецификации OpenGL ES 1.1 функция glEnableClientState вроде не была подвержена никаким «кастрациям».Ничего не понимаю....

P.S. Андроидовский планшет. OpenGL ES тестирую ,используя CrystaxNDK и библиотеку SDL2.Проект вроде как использует и OpenGL ES 1 и OpenGL ES 2.0

Ответ на: комментарий от andreyu

Но ведь в спецификации OpenGL ES 1.1 такая функция есть https://www.khronos.org/opengles/sdk/1.1/docs/man/

А в ES 2.0 https://www.khronos.org/opengles/sdk/docs/man/ и правда не вижу. Но разве вторая версия - не надстройка над первой? Или это отдельные, по-разному работающие системы?

Тем более в Android.mk присутствует такая строчка: LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog.То есть подключаются библиотеки и 1 и 2 версий, разве не должно тогда работать?Я явно что-то не понимаю...

Nerevarino
() автор топика

используя CrystaxNDK и библиотеку SDL2

Я правильно понял что в данном случае получается кроссплатформенная (в плане Android + linux) реализация?

abs ★★★
()
Ответ на: комментарий от abs

Агась. Просто готовлю себе базу из SDL и OpenGL, от которой смогу отталкиваться на Windows/Linux/Android. На десктопах запустил, а тут фигушки(

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Но ведь в спецификации OpenGL ES 1.1 такая функция есть

А в 2.0 нет.

Но разве вторая версия - не надстройка над первой? Или это отдельные, по-разному работающие системы?

Нет. Но железо, умеющее ES 2.0, умеет и 1.х. Но тогда вам и нужно его использовать как 1.х.

Тем более в Android.mk присутствует такая строчка: LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog.То есть подключаются библиотеки и 1 и 2 версий, разве не должно тогда работать?Я явно что-то не понимаю...

Это не имеет никакого отношения к инициализируемой версии.

andreyu ★★★★★
()
Ответ на: комментарий от Nerevarino

А, имеется в виду, что нужно использовать Shading language?

Имеется ввиду, что в GL ES 2.0 и выше не является ffp. Все через шейдеры.

andreyu ★★★★★
()
Ответ на: комментарий от Nerevarino

Я дал ссылку, почитайте пару параграфов - их достаточно для понимания что и как делать. Там подробно и с пояснениями все.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Все через шейдеры

Ох уж эти извращенцы! Лишь бы GLU/GLUT не использовать! А между тем, даже для жабоскриптика есть GLU!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от x4DA

Да что ты говоришь! Неужто есть стильно-модно-молодежные современные обертки? Которыми можно пользоваться точно так же просто, а не извращаться с идиотизмом под названием "шейдеры"?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

«Обертки», которые ты хочешь - для даунов-ретроградов.

Для OpenGL существуют нормальные платформеные привязки разного уровня абстракции - egl, sfml, glfw, sdl2.

идиотизмом под названием «шейдеры»

Идиотизм - это отрицать шейдеры. Примерно такого же уровня как отрицание НТР. Хочешь песочницу - добро пожаловать в darkbasic.

Если тебе просто данные визуализировать, то есть специальные либы и софт.

x4DA ★★★★★
()
Ответ на: комментарий от Eddy_Em

Ох уж эти извращенцы! Лишь бы GLU/GLUT не использовать!

И какая связь между шейдерами и мертвым хелпером а-ля glut? Очередное сравнение теплого с мягким.

andreyu ★★★★★
()
Ответ на: комментарий от x4DA

малоюзебальная херня для демок

Эта херня еще и deprecated начиная с os x 10.9.

andreyu ★★★★★
()
Ответ на: комментарий от Eddy_Em

Которыми можно пользоваться точно так же просто, а не извращаться с идиотизмом под названием «шейдеры»?

Неужели есть апельсины вкуснее яблок?

andreyu ★★★★★
()
Ответ на: комментарий от x4DA

Мне тупо отображать картинку, чтобы ее можно было тудым-сюдым двигать и увеличивать/уменьшать. Ну и иногда еще всякие графики рисовать.

есть специальные либы и софт

Нету. Либо я про такую прелесть не знаю. Но что-то готового не встречал.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от x4DA

Знаю про mathGL, но в моем случае оно не подходит никак.

Вот, скажем, надо мне с веб-камеры показывать видео с какими-то дополнительными данными и иметь возможность увеличить картинку и подвигать туда-сюда. MathGL мне вряд ли в этом поможет. Вот — простой велосипед, который делает то, что мне нужно: кажет картинку. Еще добавлю движение (забыл про это) и буду использовать в следующем велосипеде (надо по-быстрому навелосипедить расширение к моему велосипеду, который фитсы с USB-ПЗСки забирает: хочется иметь возможность в непрерывном режиме щелкать кадры и не сохранять их, а отображать на экране, чтобы можно было приборы фокусировать и юстировать).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ох уж эти извращенцы! Лишь бы GLU/GLUT не использовать! А между тем, даже для жабоскриптика есть GLU!

Ну, увы - не увы, а ffp официально считается устаревшим и менее эффективнымhttps://www.opengl.org/wiki/Fixed_Function_Pipeline

Nerevarino
() автор топика
Ответ на: комментарий от andreyu

Это не имеет никакого отношения к инициализируемой версии

Ммм, а есть предположения, как принудительно инициализировать конкретную версию....или для ответа надо NDK перелопачивать?

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Нужно быть полным кретином, чтобы вместо божественной сишечки писать гуевый софт на ассемблере. Ну, ты понял. Рисовать для каждой задачи рейтрейсинг в шрейдерах вместо того, чтобы GLU/GLUT использовать — это идиотизм чистой воды! Ты вместо 1-2 страниц кода напишешь 20, да еще и убьешь кучу времени!!!

Я не понимаю разработчиков опенгля: они упоролись вообще в крайняк!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Нужно быть полным кретином,
Рисовать для каждой задачи рейтрейсинг в шрейдерах вместо того, чтобы GLU/GLUT использовать

Нужно быть полным кретином, что бы сравнивать теплое с мягким.

andreyu ★★★★★
()
Ответ на: комментарий от Nerevarino

Ммм, а есть предположения, как принудительно инициализировать конкретную версию....или для ответа надо NDK перелопачивать?

В android-ndk есть пример инициализации.

andreyu ★★★★★
()
Ответ на: комментарий от Eddy_Em

С трудом верится, что разрабы стандарта OpenGL разрабатывали - разрабатывали, разрабатывали-разрабатывали и внезапно упоролись и придумали GLSL.Ну едва ли. Посмотри, кто в Khronos group входит. Да и в ссылке, что я привел, черным по белому написано, что с развитием вычислительных возможностей, применять ffp - вчерашний день. То что это не так очевидно, и где-то нужно перепрограммировать свой мозг для нового подхода - ну и что теперь?Сам С++ каким-то людям покажется муторным и сложным.Однако это не изменяет его преимуществ.

P.S. А современный DirectX какой подход использует?

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Сам С++ каким-то людям покажется муторным и сложным

Я считаю это совершенно ненужной дрянью.

P.S. А современный DirectX какой подход использует?

Спроси на винфаке.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Рисовать для каждой задачи рейтрейсинг в шрейдерах вместо того, чтобы GLU/GLUT использовать — это идиотизм чистой воды!

Ты бы поближе ознакомился с GLSL прежде чем критиковать.Трассировка лучей тут ни при чем.Даже современный OpenGL использует подход «растеризация», а не «трассировка лучей».Банальный перевод «shader» как «затенитель» вводит тебя в заблуждение. Конкретно в современном OpenGL шейдер - это программа-настройка узла конвеера рендеринга (того самого pipeline), а вовсе не пресловутая трассировка лучей.Так что современный opengl это тот же ffp - только гибкий и настраиваемый. И никаких 20 страниц кода на простейшие задачи не нужно.Это можно понять, прочитав меньше тех же 20 страниц этой книги

http://rutracker.org/forum/viewtopic.php?t=4418099

Загружаются простейшие шейдеры и простейший рисунок быстро пишется.

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Я с шейдерами намучился, когда webGLU писал. Для того, чтобы можно было просто по-человечески, как в настоящем GLU, рисовать объемные объекты и подсвечивать их всяко-разно, пришлось забульбенить рейтрейсинг в шейдере, т.к. в оригинале webgl свой рейтрейсинг не умеет.

А ведь рейтрейсинг — такая часто используемая вещь, что могли бы и стандартизировать, как в настоящем OpenGL, когда ты рисуешь себе поверхности, задаешь их характеристики (отражение/рассеяние/поглощение), располагаешь в пространстве N источников освещения (и каждому тоже свою характеристику задаешь), ставишь "камеру" в нужную тебе точку и — вуаля! Опенгль тебе все кошерненько нарисовал без необходимости ломать в течение месяца голову, отражая все тонкости трассировки лучей в шейдере.

Да, я, конечно, понимаю, что на самом нижнем уровне именно шейдеры используются: CUDA получает код шейдера и в дофига потоков обрабатывает его, в результате чего быстренько картинка и рисуется (ну или если нет видеокарты, то ЦП в несколько потоков тупит). Но вот самому писать то, что уже 100500 раз описано и расписано — ну уж, увольте!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от x4DA

Затем, что это самый простой и шустрый вариант. А всякое дерьмище вроде gstreamer'а я в свою систему ставить не собираюсь!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

такая часто используемая вещь, что могли бы и стандартизировать, как в настоящем OpenGL, когда ты рисуешь себе поверхности, задаешь их характеристики

Ты сам-то рейтрейсинг хоть раз реализовывал умник? Подходы к реализации рейтрейсинга такие все одинаковые, что там уже можно что-то стандартизировать?

x4DA ★★★★★
()
Ответ на: комментарий от Eddy_Em

Рисовать для каждой задачи рейтрейсинг в шрейдерах вместо того, чтобы GLU/GLUT использовать — это идиотизм чистой воды!

универсального подхода к реализации рилтаймового рейтресинга не существует и тем более не существовало ранее, когда стандартизировался opengl.

вообще прекрати нести эту ахинею тут, смущаешь только своим невежством новичков.

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

Говорю же: в webGLU реализовывал простую трассировку. Знаю, что подходов много, но есть базовый (даем свойства материала, свойства и положение источника света и камеры — вуаля!).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от x4DA

Зайди сюда и посмотри скриншоты. Реализовано стандартным рейтрейсером, никаких шейдеров и прочей мутотени! А если бы мне ради такой картинки пришлось месяц трассировщик выдумывать, я бы плюнул нахрен на это дело!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Поясни,пожалуйста, что по твоему мнению шейдер в современном OpenGL (дай определение, а не свое отношение к нему), а то у меня ощущение, что говорим о разных вещах.

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Инициализировать в яве

А ещё eglBindAPI

В вашем случае рыть в сторону SDL, его нужно собрать под gles1

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 2)
Ответ на: комментарий от Eddy_Em

Ну хз, я пока добрался только до вершинного шейдера. Попробую на досуге написать вершинный шейдер, имитирующий классический pipeline по переводу мировых координат вершин в оконные.

Потом приведу старый и новый код.

Nerevarino
() автор топика

Подскажите, пожалуйста, чем в GLSL отличаются типы mat2 и mat2x2, mat3 и mat3x3, mat4 и mat4x4?У меня сложилось впечатление, что абсолютно ничем...

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Размерностью отличаются. И если пишешь на плюсерах, то у тебя перегружены операции, т.е. умножение матрицы 3х3 на вектор 3 даст тебе вектор 3. Ну и т.д.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.