LINUX.ORG.RU

PortableGL 0.100

 , , , ,


2

2

5 марта, после полугода разработки и более ста коммитов, состоялся выпуск 0.100.0 проекта PortableGL, развивающего программную реализацию графического API OpenGL 3.x, написанную целиком на языке Си. Теоретически PortableGL может быть использован в любых приложениях, принимающих текстуру или фреймбуфер в качестве входных данных. Код оформлен в виде одного заголовочного файла и распространяется под лицензией MIT.

Проектом определены такие цели, как переносимость, соответствие API OpenGL, простота использования, простой код и высокая производительность. Из областей применения упоминаются обучение концепциям построения графических API, использование для работы с 3D-графикой на системах без GPU и интеграция поддержи OpenGL в специфичные операционные системы, для которых не перенесён пакет Mesa3D. Из готовых проектов, использующих PortableGL, отмечается порт Minecraft-подобной игры Craft.

В новой версии продолжено наращивание функций и возможностей OpenGL: Реализованы OpenGL-функции для работы с параметрами текстур, а также GLSL-функции texelFetch[1-3]D(). Добавлена поддержка выбора пиксельного формата на этапе компиляции и использования любых 32- и 16-разрядных форматов цветовых буферов. Реализованы форматы PGL_D24S8 и PGL_D16. Добавлена возможность задания предопределённой конфигурации памяти.

>>> Подробности на OpenNET



Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 2)

Подробности на Habr
Представлен открытый проект

А, denis-19.

Пректу в сентябре будет уже 6 лет.

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

Пректу в сентябре будет уже 6 лет.

PortableGL started as a very simple wireframe software renderer based on a tutorial in summer 2011.

Но версия 0.100 вышла в этом марте

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

Скорее не «представлен проект», а «выпущена очередная версия проекта».

mak8kammerer
()
Ответ на: комментарий от firkax

Ты не заметил там generate_gl_h.py или не вникал?

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

Переносимость. В том числе на устройства, где нет библиотеки OpenGL.

P.S. А разве llvmpipe поддерживает OpenGL 3 и шейдеры?

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

Да вроде 4.6 с полным фаршем и ещё вулкан сверху. Причём вполне себе живо если запускать qemu+kvm+cirrus на 4*амд бульдозер.

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

Зачем нужен скутер, если есть четырёхосный самосвал?

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

а нахер он нужен если есть llvm-pipe?

Чтобы его заюзать, надо сделать зависимость от мезы. И дальше - по милости системных настроек, может и не llvm-pipe подключиться.

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

anonmyous ★★
()

Как оно реализует шейдеры? JIT/AOT в нативный код (самостоятельно или через какой-нибудь LLVM?)? Интерпретация SPIR-V? Как оно по производительности по сравнению с llvm-pipe (я понимаю, что у них разные ЦА, но производительность всё равно сравнить можно)?

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

а смысл? чтобы что?

использовать 3д графику на каком-то невообразимом говне мамонта где нет вообще никакого ускорителя? а она там нужна?

я не понимаю сферу применения этого безобразия. там где нет никакого ускорителя, оно будет тормозить безумно. там где есть оно ненужно.

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

использовать 3д графику на каком-то невообразимом говне мамонта где нет вообще никакого ускорителя?

Например, 2д-графику.

там где нет никакого ускорителя, оно будет тормозить безумно.

Совсем не факт, если речь про 2д, или совсем простую 3д. Не везде же надо гта5 пускать. У современных процов много расширений, позволяющих ускорить софтварную отрисовку до приемлемых скоростей, в минимальных сценариях.

там где есть оно ненужно.

Я думаю, оно легко отключаемо. Скорее всего, ничего не мешает проге, при желании, использовать и мезу, если она таки есть.

Есть такое понятие - нишевые решения. Это - 1 из них.

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

Ты жжошь что ле?

Зачем 2д делать средствами open GL когда в том же qt есть программный рендерер? Ну если надо на говне мамонта работать, бери qt4 он кушать не просит весит мало.

Нахрена?

ckotctvo
()
Ответ на: комментарий от anonmyous

Я просто не понимаю практического применения для этой библиотеки. Там где нужна легковесность или независимость от каких-то больших дистрибутивов - там попросту не нужна 3D графика. И добиться какой-то графики можно более дешёвыми средствами что самое главное.

Там где нужна легковесность но нужна и 3D графика нужно просто выбрать правильный чип они стоят сейчас копейки.

Где можно понадобиться эта библиотека я даже не представляю то есть если ты допустим застрял на необитаемом острове с запасом каких-то говёных чипов без 3D ускорителей и работодатель поставил тебе задачу сделать что-то типа 3D графики или даже не знаю.

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

Ты жжошь что ле? Зачем 2д делать средствами open GL

Пфф, вот умник, ты авторам SDL это скажи, как минимум. У них весь 2д на текстурах вокруг аппаратного ускорения построен. Да и вообще, большинство 2д-игрушек используют аппаратное ускорение и текстуры. Так шта, разберитесь в теме, а потом уж «жгите».

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

Ну возьми старую версию того же самого кайра. Который был ещё без 3D графики. Опять же что за дурка то есть если у тебя такая ситуация что нет 3D ускорителя или там какое-то говёный чип то не нужна тебе и какая-то красивая графика делай как есть. может это станок какой-то. Так там не нужна вообще какая-то красивая графика тяп-ляп и как-то заработало

ckotctvo
()
Ответ на: комментарий от anonmyous

Блин вот допился и не разглядел что ты не ГТК написал а SDL.

Ты вообще как бы в курсе что есть вторая версия sdl и там внезапно есть бекэнд и без opengl. Опять же что ты собрался делать с помощью этой библиотеки и sdl? Игру которая тормозит?

Просто вот объясни мне как это можно применить без всяких там натягиваний совы на глобус.

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

Не знаю, нужна ли «красивая», но анимированное 2д - нужно всем, от эмбедщины до настольных компов. Да и даже если 3д - может быть какому-то КАДу совершенно не нужен быстрый 3д-вывод, он бы и на софтварном поработал.

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

Ты вообще как бы в курсе что есть вторая версия sdl и там внезапно есть бекэнд и без opengl.

Нет там такого бекенда. Он был в сдл1. С сдл2 всё ещё можно использовать сурфейс окна, но это уже считается моветоном. И кроме того, это отдельный АПИ, которым никто не пользуется. Основной АПИ заточен на аппаратку.

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

Объясни мне, человек который явно употребляет тяжёлые наркотики.

О каком CADе ты говоришь в контексте этой библиотеки? Ты на чём его собрался запускать-то я не пойму. Потому что на любом компьютере современном есть хоть какое-то но 3D. Я не знаю из какой параши ты собрался выкопать комп где нет 3D вообще никакого. И запускать на нём CAD!

ckotctvo
()
Ответ на: комментарий от anonmyous

Отдельно порадовала анимация в ембедщине. ой Господи. То есть если там нет никакого 3D то значит там и процессоры голимые скорее всего на этом чипе а может быть он даже один. И поэтому его ресурсы надо потратить разумеется на 3D графику чтобы было анимация. Хотя по факту он тормозить будет даже так вот просто.

В общем завязывай с наркотиками это плохо это вредно и запрещено

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

Дело может быть вообще не в компьютере. Например, это позволит портирвать проги на те операционки, где Инвидия не удосужилась дрова написать. У других хотя бы опенсурс, но я думаю, что даже это не помогло разным не-линуксам обзавестись поддержкой 3д для всех видях.

anonmyous ★★
()
Последнее исправление: anonmyous (всего исправлений: 1)
Ответ на: комментарий от ckotctvo

И поэтому его ресурсы надо потратить разумеется на 3D графику чтобы было анимация. Хотя по факту он тормозить будет даже так вот просто.

А с чего бы ему тормозить просто так? У него, к примеру, 4 ядра, и векторные инструкции доступны. Этого вполне достаточно, и чтобы основную задачу решать, и чтобы на 1м из ядер 2д порендерить.

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

Человек с тяжёлой зависимостью от наркотиков остановись. Если тебе нужна 2D графика на таком чипе, то ты можешь взять старую версию того же cairo! Он будет работать на порядок быстрее.

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

При чём тут вообще каиро? Вы, похоже, вообще не в теме, и не понимаете, что какой-нить 2д-игрушке нужны текстуры, а не векторная графика каиро. Я вам про SDL пример привёл, а не доходит… И конечно, это касается не только игрушек. Даже на SDL чего только ни пишут - текстуры нужны чуть менее чем всем.

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

Пруфов, разумеется, не будет? Тогда, хотя бы вот это почитайте: https://blogs.gnome.org/gtk/2018/03/16/textures-and-paintables/

Да и вообще, в упор не пойму, при чём тут каира? Данная либа «понимает» только АПИ openGL, и к каиро никаким боком не относится. Даже и с SDL её было бы трудно скрестить.

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

Я не понимаю куда ты эту библиотеку решил совать. Там где нету 3D ускорителей там нужна самая простая какая вот 2D графика. она реализуется древними тулкитами.

Там где нужна 3D графика там есть 3D ускоритель. Я не понимаю что ты несёшь. Чтобы что? Запустить какую-нибудь quake 2 на компьютере с s3trio ? Особенно меня конечно посмешил а то что где-то там потребуются анимации. То есть мало того что open GL тормозит так мы ещё и анимации сверху поставим.

Слушай у тебя работа-то вообще есть или тебе мама еду покупает? Вот я не могу представить себе такого уровня неадекватности от любого разработчика который имеет ну хоть какой-то опыт в жизни

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

Там где нету 3D ускорителей там нужна самая простая какая вот 2D графика. она реализуется древними тулкитами.

Я тебе уже даже пруф дал, что текстур в твоих «древних тулкитах» - нет. А от тебя пруфа так и не получил, что они там, дескать, есть. Ещё раз, для совсем тупых: данная либа реализует апи openGL, и если ты через АПИ каиро собрался делать то же самое, то ты просто обычный неуч. Даже если бы там и были текстуры, так всё равно АПИ для совершенно других задач, но их там ещё и нет.

Там где нужна 3D графика там есть 3D ускоритель.

Высокополигональная 3д-графика с высоким фреймрейтом, ты хотел сказать? Ах да, чего это я требую «заумные слова» от шпаны дворовой. Но тем не менее, не каждая даже 3д-графика требует ускоритель. И уж точно не каждая 2д, а вот текстуры ей нужны!

Вот я не могу представить себе такого уровня неадекватности от любого разработчика который имеет ну хоть какой-то опыт в жизни

Хватит в зеркало-то смотреться.

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

Ещё раз: текстуры можно сделать в cairo. Если уж очень надо. Но там где нет аппаратного ускорения там это тоже точно не надо. Как и твои текстуры. Это какое нибудь встраиваемое оборудование, управление станками например. Ты вообще хоть раз видел интерфейс контроллеров чпу-станков?

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

Ещё раз: текстуры можно сделать в cairo.

Я выше давал ссылку, что они в GDK4, а не в каиро.

Но там где нет аппаратного ускорения там это тоже точно не надо.

Это ерунда. Тем более, что 1 из ядер многоядерного проца с его векторными инструкциями - это УЖЕ вполне себе аппаратное ускорение. Чем эта штука и успешно пользуется.

Это какое нибудь встраиваемое оборудование, управление станками например. Ты вообще хоть раз видел интерфейс контроллеров чпу-станков?

Круто! Сам мне представил юз-кейс, где это не нужно, в надежде, что я буду говорить «но конечно же на ЧПУ это нужно», ага. :) Но только уловки тролей я все давно изучил. На ЧПУ это не нужно, выдыхай.

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

Наркоман, в кайре есть поддержка source из картинки. Зачем ты сочиняешь. Она работала ещё во времена когда я на к6-2 сидел на фряхе и не знал как отключить декорацию окон деревом. Там нет поворота текстур так а зачем оно там где нет gpu?

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

Наркоман, в кайре есть поддержка source из картинки.

Круто! Загрузить картинку на сурфейс - это, нынче, зовётся поддержкой текстур? :)

Там нет поворота текстур так а зачем оно там где нет gpu?

Действительно, особо ни зачем, так как поворот, обычно, нужен именно на 3д-сценах. А юз-кейсы данной либы на 3д-графике, скорее всего, и правда минимальны. Хотя я даже тут приводил в пример операционки без проприетарных дров. Но всё же рассматривать стоит только 2д.

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

Объясни зачем поддержка текстур там где нету аппаратного ускорения? Объясни вот реально зачем?

Где нету аппаратного ускорения там работают древние тулкиты с программной отрисовкой. Там не нужен opengl даже близко.

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

ckotctvo
()
Ответ на: комментарий от KivApple

Как оно реализует шейдеры? JIT/AOT в нативный код (самостоятельно или через какой-нибудь LLVM?)?

Нет.

Интерпретация SPIR-V?

Нет.

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

https://github.com/rswinkle/PortableGL/blob/master/portablegl.h#L2946-L2990

...
// TODO separate structs for vertex and fragment shader builtins?
// input vs output?
typedef struct Shader_Builtins
{
	// vertex inputs
	GLint gl_InstanceID;
	GLint gl_BaseInstance; // 4.6 feature

	// vertex outputs
	vec4 gl_Position;
	//float gl_PointSize;
	//float gl_ClipDistance[6]

	// fragment inputs
	vec4 gl_FragCoord;
	vec2 gl_PointCoord;
	GLboolean gl_FrontFacing;  // struct packing fail I know

	// fragment outputs
	vec4 gl_FragColor;
	//vec4 gl_FragData[GL_MAX_DRAW_BUFFERS];
	float gl_FragDepth;
	GLboolean discard;

} Shader_Builtins;

// TODO GLfloat* and GLvoid*?
typedef void (*vert_func)(float* vs_output, vec4* vertex_attribs, Shader_Builtins* builtins, void* uniforms);
typedef void (*frag_func)(float* fs_input, Shader_Builtins* builtins, void* uniforms);

typedef void (*GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam);

typedef struct glProgram
{
	vert_func vertex_shader;
	frag_func fragment_shader;
	void* uniform;
	GLsizei vs_output_size;
	GLenum interpolation[GL_MAX_VERTEX_OUTPUT_COMPONENTS];

	GLboolean fragdepth_or_discard;

	GLboolean deleted;

} glProgram;
...

Как оно там парсится и биндится, сам изучай. :)

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

Объясни зачем поддержка текстур там где нету аппаратного ускорения? Объясни вот реально зачем?

По тому, что это - самый удобный способ работы с 2д-анимацией. Вы, видимо, даже и SDL ни разу в жизни не использовали, я уже давно понял уровень ваших познаний в вопросе.

Там не нужен opengl даже близко.

Текстуры != openGL. Они просто крайне удобны, хоть поверх GL, хоть поверх софтварной растеризации. Бонусом идёт их ускорение на GL.

Но ведь я понимаю что я спорю с мамкиным программистом

Спорить - это, по вашему, писать вот этот треш, вместо хотя бы 1го внятного аргумента? Боюсь, я с вами даже и не спорю.

anonmyous ★★
()
Последнее исправление: anonmyous (всего исправлений: 1)
Ответ на: комментарий от ckotctvo

Где нету аппаратного ускорения там работают древние тулкиты с программной отрисовкой. Там не нужен opengl даже близко.

Ерунду не неси, есть полно случаев ембедщины, где 3д ускорителей нет, а трехмерный графоний желателен. Вчитайся в слово «желателен» - внимательно. Несколько раз. Увидь отличие от слова «обязателен».

Пример - банкоматы и терминалы. Нужен ли там красивый графоний? Да вообще посрать. Но он там есть, клиентам приятней.

Или вот морда 3д-принтера, хотя там и lvgl используется. Нужен ли принтеру экран, а на экране 3д анимация печатаемой модели? Да вообще пох. Но когда на рынке сотня производителей, и на него хочет всунуться сто первый - ему поневоле нужны свистоперделки.

Я уже молчу за то что ты напутал текстуры с opengl, embed с отсутствием ускорителя, а встраиваемые текстуры с 3д-графикой.

Тень, блюр и полупрозрачность - тоже знаешь ли «проще» нарисовать через opengl.

Ты вообще хоть раз видел интерфейс контроллеров чпу-станков?

https://ibb.co/PvK1f7Mf - на, и не позорься.

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

есть полно случаев ембедщины, где 3д ускорителей нет, а трехмерный графоний желателен.

На самом деле, интересно было бы послушать про конкретные девайсы. Я-то, в споре с ним, больше на 2д упирал, так как его аргумент «где может понадобиться 3д - обязательно найдётся и ускоритель» - звучит для меня убедительно. Сейчас в любом АРМовом чипе есть Mali, так что про 3д в отсутствии хоть какого-то GPU - это лично для меня не очевидно. Какие процы имеются в виду?

anonmyous ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.