Рисуй треугольник!Треугольник сам себя не нарисует!Спрашиваем, сами же решаем проблему, сами же отписываемся. Постим книжечки, гуглим, учим математику. Посылаем нахуй за легаси.Читаем шапку перед тем как задать очередной тупорылый вопрос.Добро пожаловать. Снова.Шапка треда:https://gist.github.com/2ch-gd-opengl/26b94fc6f16100af730d84a3d8bbd557
>>551141Поверх десктопа - никак, только через шиндовсапи. На питухос/пидорос свои заморочки с иксами и композитором. Если ты про внутриигровые - то ставишь режим блендинга, натягиваешь полупрозрачную текстуру на квад и рендеришь в порядке z-ordera твоих окошек.
>>551185Внутриигровые. С полупрозрачными понятно, а может ли шейдер считывать из текущего fb уже выведенные пиксели, причем не строго в той же позиции, но и соседние?
Возможно ли в шейдере прочитать из интеджер текстуры(TBO) например флоат. Ну то-есть прочитать сырые байты как другой тип. В Си я бы просто сделал так ((int*)floatArr)[10]. Хочу засунуть в одну текстуру много разных структур и читать их из разных шейдеров, SSBO не подойдёт, так как нельзя дать смещение.
Какого хуя glBindBufferRange не работает c GL_ARRAY_BUFFER?Я хочу засунуть вершины, индексы, юниформы и вообще всё говно в один буффер, как в вулкане.
Кстати вот еще вопрос есть ли смысл в OGLе выделить один vbo для всего и распределять память в нем вручную? Одни говорят стоит, потому что смена vbo это дорого, другие говорят не еби мозг, выделяй кусками сколько хочешь, все равно этим занимается драйвер на хост сайде. Кому верить?
>>551445Стрельба по воробьям из танка. Если так хочется ебаться с памятью - юзай вулкан или dx12. OGL суть понятный и простой.
glGet* функции дешевые? Ну драйвер не лезет далеко, чтобы узнать например какой текстурный юнит или буффер сейчас забинден? Логика мне подсказывает что это хранится где-то в юзермоде на хосте и тормозить не должно.Блядь эти хождения по граблям на ощупь подзаебали. Уже паранойа от того что что-то не так сделаешь и фрейм рейт дропнется к хуям.
>>552098> Ну драйвер не лезет далеко, чтобы узнать например какой текстурный юнит или буффер сейчас забинден? Скорее всего нет и лучше делать какие-то свои обёртки над этим.https://github.com/id-Software/DOOM-3-BFG/blob/1caba1979589971b5ed44e315d9ead30b278d8b4/neo/renderer/tr_local.h#L612
Есть ли исходники оригинального fxaa? Не то мыльное говно на гитхабах из гугла, а именно реализация как в дровах нвидии?
>>551445Смысл есть.https://www.youtube.com/watch?v=K70QbvzB6IIhttps://developer.nvidia.com/opengl-vulkan
>>551445Чтобы эта шарманка полностью работала нужны SSBO, glMultiDrawXXXXXXIndirect, glDrawID и texture array, то бишь версия не ниже 4.5. И еще шейдер сабрутины если ты вообще хочешь рендерить все материалы в одном батче. Фактически же всё зависит от input layout, который в реальных проектах разный для разных типов геометрии - где то есть скелетка, где то морф таргеты, где -то просто статическая геометрия. Всё упихать в один батч не получится один хуй.Это раз.Второе - пердолить отдельные униформы быстрее чем мапить и заливать UBO/SSBO и тут ещё вопрос где ты отсосёшь больше. >>551220>Внутриигровые. С полупрозрачными понятно, а может ли шейдер считывать из текущего fb уже выведенные пиксели, причем не строго в той же позиции, но и соседние?Из fb не может, придется пердолить SSBO.В описании расширения где-то в конце есть пример кода:https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_storage_buffer_object.txt
Если я передаю из шейдера дальше в шейдер in out переменные взаимоисключающими блоками(если передал a,b не передаю c,d и наоборот), то имеет ли смысл делать общие переменные(ac, bd), или всё же если я в конце не проинициализирую один блок, gpu и небудет его пересылать? Блоки большие и их много.
>>558459Uniform`ы ж для передачи с cpu, а уменя верт. шейдер рождает переменные и передаёт в пикс. шейдер. Просто как я понимаю in out переменные предаются по какой-то быстрой памяти между шейдерами, в отличии от общей памяти.
>>558465> между шейдерамиНихрена не понял.Твои шейдеры (вершинный и фрагментный) компилируются в одну программу, грубо говоря.Между ними ничего не передаются, переменные по крайней мере uniform как бы общие.Ну а если у тебя этих шейдеров много и чтобы для каждого тебе не устанавливать свои значения, ты можешь в начале кадра uniform block заполнить нужными данными и всё.По поводу in/out лучше почитать в сторонней литературе, а не гадать как оно там.
>>558467Есть ссылки на почитать про inout, что-то не нахожу.У меня один убершейдер, в котом case`ы разделяют логику(типо маленькие подшейдеры), соответственно эти подшейдеры пересылают дальше свои перменные, то-есть никогда не пересылаются все сразу пременные из всех подшейдеров.Кстати если всё объединется в одну программу, у неё есть предельный размер?
>>558471> Кстати если всё объединется в одну программу, у неё есть предельный размер?Ты это о чём?Почитай в книжках что такое шейдер.> Есть ссылки на почитать про inout, что-то не нахожу.Зайди в гугол и введи "glsl in out parameter"
>>558474Да, но так лучше не делать.Ветвления и циклы, ну по крайней мере раньше говорили, это не очень хорошо для шейдера.Плюс, также, от версии драйвера может зависить и от карточки. Вроде ограничений на количество переменных и тп
>>558480Так у меня всё по отдельным файлам как обычно, потом просто пред компиляцией в один текст соединяю.
>>558477>>558474>>558471>Есть ссылки на почитать про inout, что-то не нахожу.>У меня один убершейдер, в котом case`ы разделяют логику(типо маленькие подшейдеры), соответственно эти подшейдеры пересылают дальше свои перменные, то-есть никогда не пересылаются все сразу пременные из всех подшейдеров.Если ты и решил упарывать убершейдер, то делай это правильно:https://www.khronos.org/opengl/wiki/Shader_Subroutine
>>558542Вот здесь, выводы про них неочень:http://vbomesh.blogspot.com/2017/07/shader-subroutines-1.htmlhttp://vbomesh.blogspot.com/2017/07/shader-subroutines-2.html
>>558548И в догонку. Стоит ли ориентироваться на OGL 4.6? Там полезные gl_BaseVertex и gl_BaseInstance. Но он мало ещё распространён или?
>>558551GTX 500+ за исключением некоторых младших карточек, у амд из тех же годов примерно. Если ты делаешь что-то с графоном выше уровня /gd/ - у тебя один хуй в минималках карты новее будут. Для чего-то проще я бы остался на 3.3.
Почему сайт khronos.org практически никогда не открывается? Это только у меня так или у всех? Я блять уже в роутере DNS разные ставил, вручную вводил ip 104.236.24.254 в hosts файл, нифига не помогает. Подобные сайты https://isitdown.site/khronos.org показывают, что страница онлайн. Я не могу понять в чем проблема.
Как блендингом сделать такое пересечение двух альф?>>558698У меня через гугл кеш открывается, но грузится около двух минут.
Объясните зачем нужен deferred шейдинг? Разве форварде я не могу сразу передать все источники света в фрагментный шейдер и в цикле за один проход все посчитать?
>>557838Дефолтный FXAA реализованный в последних дровах nvidia очень качественный практически не мылит в отличие от например от того что есть в открытом доступе https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126Вот жеж жадные ублюдки, могли бы и поделиться.
Написал шейдер для наложения текстуры из ssbo(да, я извращаюсь). Вопрос: нормально ли, что текстура в формате R8bit пикселизирована больше чем R32bit, а не просто цвета беднее. Или я где-то с алгоритмом наплошал?
>>561371Просто интерполирую между четырьмя пикселямиtw, th --ширина\высота текстуры//Вертекс.ш.-----------coor= vec2( texcoor.x tw (1- 1f/tw), //(1- 1f/tw)-- stretch to extrude artifacts texcoor.y th (1- 1f/th) );//Фраг.ш.----------- float u= coor.x, v= coor.y; uint x= uint(u), y= uint(v); float fx= fract(u), fy= fract(v);outcol= gtex_r8(tex, x, y, tw) ((1-fx) (1-fy)) +gtex_r8(tex, x+1, y , tw) (( fx) (1-fy)) +gtex_r8(tex, x+1, y+1, tw) (( fx) ( fy)) +gtex_r8(tex, x , y+1, tw) ((1-fx) ( fy));//------------vec4 gtex_r8(uint tex, uint x, uint y, uint w){ uint o= x/4 +y/4w, f= x%4, m= 255 <<(f8); float col= float((ussbo[ tex +o ] &m) >>(f*8)) /255; return vec4(col,col,col,1);}
>>561379Ж-звезда//Вертекс.ш.-----------coor= vec2(texcoor.x Ж tw Ж (1- 1f/tw), //(1- 1f/tw)-- stretch to extrude artifactstexcoor.y Ж th Ж (1- 1f/th));//Фраг.ш.-----------float u= coor.x,v= coor.y;uint x= uint(u),y= uint(v);float fx= fract(u),fy= fract(v);outcol=gtex_r8(tex, x, y, tw) Ж((1-fx) Ж(1-fy))+gtex_r8(tex, x+1, y , tw) Ж(( fx) Ж(1-fy))+gtex_r8(tex, x+1, y+1, tw) Ж(( fx) Ж( fy))+gtex_r8(tex, x , y+1, tw) Ж((1-fx) Ж( fy));//------------vec4 gtex_r8(uint tex, uint x, uint y, uint w){uint o= x/4 +y/4Жw,f= x%4,m= 255 <<(fЖ8);float col= float((ussbo[ tex +o ] &m) >>(fЖ8)) /255;return vec4(col,col,col,1);}
>>561379Выложи на https://pastebin.com/ там даже подстветку для языка можешь выбрать (OpenGL Shading)
>>561380Функци конвертации из BGRA32 в R8INLINE void convcol_r8(byte d, int wh, byte e){ loop(wh) e= (d[i4+0] + d[i4+1] + d[i*4+2]) /3;}
>>561386Что за фигня в функции convcol_r8(), это вообще какой ЯП? Обозначай параметры и переменные яснее. Ты вот если откроешь свой код через год, ты сам уже забудешь, что они значат. Я так понимаю d это инпут, e аутпут, wh количество пикселей? А что за loop() еще за хуйня? И ты уверен что у тебя текстура находится в формате BGRA32? То есть каждый канал по 32 бит и все вместе 128 бит (16 байт)? Насколько я понял, ты хочешь конвертировать цветную (или многоканальную чернобелую) текстру в однуканальную чернобелую, правильно? Хз что у тебя за язык и цикл такой, но в C++ я бы написал так https://pastebin.com/vbWfTMTK
>>561436Пардон я тупанул, это же интегеры а не флоаты, тогда надо еще будет разделить на 4294967295 и умножить на 255;
>>561587Я сейчас побуду луддитом, но побитовые операции в GLSL впизду. Жопа помнит, как эта хуйня выдавала диаметрально противоположные результаты от карты к карте.
Есть ли какие-то алгоритмы для бесплатного 2D рендера с разными материалами(шейдеры/текстуры)?Есть желание рисовать спрайты с минимальным расходом сил процессора и видюхи.Пока как-то логично выглядит только батчинг, но количество телодвижений не окупает результат.Есть ли бумажка, которую можно почитать по этому вопросу?
>>562586Ты можешь сейчас рисовать сотни тысяч треугольников вообще без какой-то просадки.Если навыков и ума хватает, то в основном тебе надо то что исполняется на процессоре оптимизировать
Что делать если компилятор не видит glGetTextureHandleARB()?GLFW 3.2.1 должен ведь сам дать указатели на все все функции?
Как правильно писать в ssbo из шейдера? Допустим в вертекс шейдере делаю ssbo += 0.5f, вроде как эта переменная должна постоянно расти, а выходит будто создаётся локальная копия ssbo и к ней добавляется 0.5f, а настоящая остаётся неизменной. Пишут, что надо ставить барьеры; есть ли пример простой записи в ssbo?
что делать с ебучими ворнингами вродеwarning C4267: 'argument': conversion from 'size_t' to 'GLuint', possible loss of dataкомпилируя под win64?
>>563304Да я в курсе этого зоопарка лп ллп. Нагородили костылей. Я спрашиваю что луше - выключить сообщение нахуй или понаставить принудительных кастов?
>>550538 (OP)извините не подскажете игровой движок на OpenGL ?? Я конечно знаю есть leadwerks и OGRE, но есть ли ещё какие нибудь. Для игродела одиночки. Вопрост денег в принципе имеет значение но желательно не более 10 000 руб(Знаю что есть UNIGINE но он также и виндовый Икс использует)
>>563511И Unity, и UnrealEngine могут в OpenGL. Я тебе советую не парится над графическими API, если ты действительно хочешь делать игры, а юзать один из стульев выше. В этом треде мы играемся с треугольниками и другими приколюхами, а не делаем игры.
>>560043для этого есть Forward+ и Clustered Forward. Первый используется в Quake Champions, второй в DOOM и вообще они тащат.Суть класерного рендера в том, что у тебя View Frustum разбивается на сетку из MxNxK сегментов (в думе вроде 16х8х24), потом берется список из ВСЕХ источников света и проситывается, какие из них влияют на отдельные кластеры, и если они как-то влияют, их записывают в этот кластер (в кластерах также хранится информация о декалях и кубмапах). В думе лимит вроде 256 источников света. Кластеры хранят эти данные и их количество. Все это добро упаковывается в SSBO/UBO/текстуры и передается в каждый шейдер. В шейдере считается для каждого пикселя, в каком он находится кластере. Берутся данные из этого кластера и все расчитывается, как подобает. В этом подходе есть преимущества, что нет оверхеда на шину от деферред подхода, при этом если какой-то объект (или кусок объекта) ничего не освещает, в нем не произойдет никаких вычислений. Расчеты самой кластерной сетки и упаковывание в них информации можно отдать Compute Shader (дум вроде так и делает).Forward+ Rendering сильно схож с кластерным, только там не 3д-сетка по фрустуму, а 2д-сетка в экранном пространстве (каждая ячейка имеет размер например 16х16 пикселей). Точно так же расчитывается для каждой ячейки список источников света (это тоже можно скормить в вычислительные шейдеры), примерно так же происходят расчеты в шейдере (определяется, в какой ячейке лежит пиксель, пробегается по всем источникам света и расчитывает свет. Если источников нет - свет не считается).Как итог, такие системы рендеринга просты, работают везде, нетребовательны, дают высокую производительность с отсутствием оверхеда и практически неограниченное количество источников света в кадре.Для них, кстати, не обязательно нужны вычислительные шейдеры, можно все расчеты проводить на CPU, данные пихать по текстурам и использовать в шейдерах (работать будет везде).В своем движке хочу внедрить кластерный рендеринг, но пока что-то времени не хватает и руки не доходят. В данный момент у меня тупо и криво сделанный форвард с лимитом в 4 источника света на объект.
А еще в кластерном или форвард+ рендеринге можно делать нормальное освещение частиц, как DOOM и делает. Каждая частица разбивается на некоторое количество "пикселей", которое зависит от расстояния: 32x32 вблизи, 16x16, 8x8 и т.д. на больших дистанциях, а вычислительный шейдер, используя данные из кластеров, составляет атлас из карт освещения для частиц (в этом статическом разрешении), которая смешивается с цветом самой частицы и получается красиво.Они так сделали, потому что повершинное освещение оказалось слишком грубым для больших частиц, если использовать повершинное освещение с тесселяцией, выходит большое количество вершин, а если считать попиксельно, выходит большая нагрузка (частицы прозрачные, как никак), поэтому сделали такую уловку.
>>563511Есть же Godot Engine, Unreal Engine, Unity. Они все умеют в OGL (Godot вроде ни во что другое не умеет).
Ананасы, такой вопрос.Как в 3д редакторах рисуют кисятми как в фш по поверхности? Например, делают делают каменную дорожку по траве.Как это потом сохраняется для последующей отрисовки в игре?К примеру https://www.youtube.com/watch?v=9xfnJn80DEU
>>564376https://www.gamedev.net/articles/programming/general-and-gameplay-programming/texture-splatting-in-direct3d-r2238/
Что лучше - апдейтить убо по кусочкам (речь идет о mvp матрицах, lightpos и т.д. небольшой объем, короче) или держать копию в оперативке, апдейтить ее и загонять в видеопамять сразу всю? Некоторые переменные не изменяются между кадрами.
>>564706>держать копию в оперативке, апдейтить ее и загонять в видеопамять сразу всю? Некоторые переменные не изменяются между кадрамиЕсли чо, это есть в ванильном огл.https://www.khronos.org/opengl/wiki/Buffer_Object#Mappinghttps://www.khronos.org/opengl/wiki/Buffer_Object_Streaming
Нужно ли делать отдельные шейдеры для моделей без света, анимации и т.д, или писать условия в одном шейдере? Это влияет на производительность моего персонального компьютера в расчетах графики, или условия не требовательны?
>>564738>>564743Есть буфер с данными. Красным выделены участки которые обновились. Есть два варианта: 1 Через BufferSubData\MapBuffer обновлять каждый участок сразу в видеопамяти по отдельности. 2 Держать буфер в оперативе, там обновлять его, и одним вызовом BufferData отправлять в видеопамять. В первом случае много api вызовов. Во втором один, но копировать сразу весь буфер.
>>565014Смотри, тут такая тема: новички, обычно, начинают с OGL - поэтому тут этот тред и есть. А если знаешь OGL - то в остальном сможешь разобраться своими силами, были бы доки. Если ты хочешь вкатываться с D3D - ты явно где-то не там повернул.
По идее если установить количество вершин в патче в tess control шейдере, например, layout (vertices = 4) out; то вызывать glPatchParameteri(GL_PATCH_VERTICES, 4); вроде бы не нужно. Но на практике не работает, приходится менять рендер стейт все равно. Или я что-то упускаю?
>>565079я наоборот считаю, что лучше начинать вкатываться с D3D (желательно 11), он дает более общее представление о графике, как мне кажется. Потом плавно переходить на D3D12/Vulkan, а OpenGL изучить разве что для ознакомления с историей. OpenGL пусть и хорош, но уже стар, и ему пора на заслуженный покой.
>>550538 (OP)я только начал изучать OpenGL, и мне непонятен один вопрос. Допустим мы загружаем 3d модель в формате .obj с файлом .mtl в программу. 3d модель состоит из нескольких мешей с разными материалами, например на часть модели наложены текстуры, а цвет другой части модели задан просто вектором цвета. Вся эта модель, которая состоит из нескольких мешей с разными типами текстур отрисовывается с помощью разных шейдеров для разных мешей? Или же вся модель отрисовывается с помощью одного вершинного и одного фрагментного шейдера для всей модели? Я только начал знакомиться с OpenGL, поэтому объясните пожалуйста этот момент.
Как запекаются статические лайтмапы? Есть какой нибудь туториал с объяснением алгоритма как формируются uv развертки для геометрии?
>>569382>на часть модели наложены текстуры, а цвет другой части модели задан просто вектором цветаНе знаю как "принято", но такое вполне можно нарисовать одной парой шейдеров в один draw call.Засунуть вектора цвета и текстурные координаты в один vbo типа vec3, так что у текстурных координат 3-ья компонента равна например -1.0f. И потом во фрагментном шейдере в зависимости от её значения или использовать тот vec3 напрямую, или делать lookup в текстуру по его первым двум компонентам.
>>569430Можешь посмотреть исходники утилит для первого Квейкаhttps://github.com/id-Software/Quake-Tools/tree/master/qutils/LIGHTИли гугли q3map2 это комплиятор карт для Квейка 3. Он и лайтмапы создаёт тоже.
Какая последовательность действий для удаления замапленного VAO. Мне вообще надо увеличить размер прежнего , но сперва понять бы как его полностью пересоздать?
>>574914Чего блядь? В OpenGL термины "замапленный" и "VAO" друг с другом не связаны. Если тебе нужно удалить замапленный буффер, то обычный glDeleteBuffers работает. Но можешь сперва вызвать glUnmapBuffer, чтобы уж на 146%.
>>575062>>575063Да вроде разобрался. Мне надо было удалить vao и его vbo. Просто пытался удалить vao с glDeleteBuffers, а надо было с glDeleteVertexArrays. Но как я понял, можно не удалять vao, а пересоздать его vbo нужного размера.
>>575117Буфферы отвечают на вопрос "Что?", а VAO - на вопрос "Как?". В проекте обычно не больше пары десятков VAO вне зависимости от количества буфферов. Если у тебя в проекте появились одинаковые по разметке VAO - значит, что-то пошло не так.
>>575124У меня один vao с одним vbo, я его использую для посылания команд для инстансинга(рисую за один drawcall). Мне просто нужно было организовать для него расширение в случае рисования большого числа объектов.
Как текст выводить? Есть нормальное что-то? Как это делают?Когда делаю вывод текста мне очень не нравится как это выглядит в коде. Я рендерю символы через gdi+ со сглаживанием (но без cleartype), потом анализирую размеры символов (там внутри gdi какой-то чудовищный алгоритм, который сдвигает символы вверх-вниз неопределённым образом) и по ним определяю необходимо расстояние между строк и символов. По хорошему, чтобы это вручную отрендерить, нужно каким-то адекватным образом получить смещение, размер символа и ещё всякое, а не пиксели на прозрачность проверять. Помимо этого, есть куча ебанутых символов по типу zalgo - если их рендерить в квадратики 24х24, то они в них могут не попасть и каким образом получить их параметры переноса и как это учитывать - не очень понятно, нужно ежа родить чтобы во все эти тонкости векторных и растровых символов вникнуть. Собственно говоря с таким символами даже сам хромиум хреново справляется, хотя его разрабатывают куча людей значительно более подготовленных в плане рендеринга текста.Для русской-английских символов ещё более-менее приемлимо получилось, но эстетическое неудовольствие дикое. Символов несколько десятков тысяч, и я просто без каких-либо оптимизаций подгружаю страницы по 256 символов по мере необходимости, и в остальном код отвратительного качества с этим текстом, какие-то костыли для символа переноса каретки (у остальных символов есть только ширина, относительное смещение насколько нужно сдвинуть следующий символ, а тут особый случай с абсолютным смещением который через if работает).По сути, мне нужна всего одна функция, которая принимает текст, шрифт и выдаёт мне список координат/текстурных координат. Повернуть, обрезать, раскрасить, вписать в прямоугольник и прочее я сам доделаю. И контейнер, который в каком-то виде этот шрифт загружает и хранит, естественно.>Посылаем нахуй за легаси.За что? Разницы же почти нет, ну, шейдеры стало поприятнее писать без тысячи встроенных переменных с непонятными именами, но зачем делать заново всякие вполне удобные pushmatrix когда они есть в легаси - мне не очень понятно.
>>583632> По сути, мне нужна всего одна функция, которая принимает текст, шрифт и выдаёт мне список координат/текстурных координат. Повернуть, обрезать, раскрасить, вписать в прямоугольник и прочее я сам доделаю. И контейнер, который в каком-то виде этот шрифт загружает и хранит, естественно.stb_truetypehttps://github.com/0xc0dec/demos
>>568969Опенсорц не имеет возраста. Когда есть большое комьюнити, оно оперативно вычищает легаси из кода, усовершенствует старые фишки, добавляет новые плюшки.Если комьюнити нет, то проект кажется мёртвым, на самом деле, он фактически заморожен, как только данный "мёртвый-старый" проект кому-то понадобится, то вокруг него разовьётся комьюнити и см. п. 1.В этом волшебная сила опенсорца!
Я правильно понимаю, что glTexImage2D это устарелая функция, и лучше пользоваться glTexStorage2D? А ещё я слышал о каких-то bindless текстурах.
Существуют ли какие-нибудь годные книги по opengl на русском или придётся задрачивать Superbible через переводчик?
>>568969А как же Линукс ? А всякие там любительские токарные и фрезерные станки, которые работают на Raspberry PI , но разработчики хотят прорисовки в 3D на двенадцатидюймовом дисплее? А встроенные видеокарты? Intel GMA? А пользователи, у которых компьютер работает с 2010 и им нормас?
>>565014Я начал с OpenGL, перекатился на DX11. Они похожи, но DX удобнее. Плюс, в Visual Studio есть отладчик графики.
>>593443А нахуя изучать мертвое апи, которое кроме шиндовса нигде никогда не пригодится?Ни мобилки, ни консоли, ни куча других платформ.
>>583846И как оно, наверно опенсорсных игр полно? слежу за сдохшим Rigs of Rods, который сначала тащил один человек, потом другой, а теперь никто не тащит
Как на win10 включать вертикальную синхронизацию?wglSwapIntervalEXT не оказывает никакого влияния, как и принудительной выставление в настройках от нвидии. На win7 всё работало. При этом драйвер исправный, тому что в чужих программах вертикальная синхронизация работает.Я не использую двойную буферизацию (рисую всё в GL_FRONT), то есть вызовов SwapBuffers не происходит. Если его поставить, то всё работает выдавая 60/30/20 фпс согласно теории.Может быть появился какой-то нормальный способ получить сообщение о новом кадреб чтобы можно было просто сразу после этого сообщения начинать рисовать в передний буфер избегая разрывов?Может быть стоит создать второй контекст с честной двойной буферизацией просто чтобы сообщения от новых кадрах таким образом получать? Бред какой-то.
>>594302>Как на win10>OpenGLТы ещё дос-прерывания попробуй вызывать. Какое оупен джи эль, 2019 год на дворе.Радуйся что новая винда хоть как-то его поддерживает.Огл это ведь устаревшая срань, ну так в винде стоят драйвера какие-то для минимальной совместимости. Не более того.
>>594312А где тогда есть нормальный способ получить нужное мне событие от экрана?>Какое оупен джи эль, 2019 год на дворе.А ещё у меня 90% кода на легаси-функциях, кроме совсем тяжёлых вещей.Как будто есть какая-то разница. Всё-равно всё сводится к более-менее одним и тем же вызовам функций в видеодрайвере.
>>594316>Как будто есть какая-то разница.Разница есть в том что держат операционки. Насколько рабочие и актуальные драйвера установлены по умолчанию.Сейчас большие игры отказываются от огл в пользу вулкана и дх. Значит операционки последуют за ними.Поддержка огля будет падать.>А ещё у меня 90% кода на легаси-функцияхТы вкладываешь свой опыт в то что перестанет работать. К примеру лет через пять ты надрочишься хорошо делать всё на огл, а его перестанет держать новая винда\линукс\смартфон. И всё, пять лет твоих знаний уходят в зрительный зал.
>>594302>вертикальную синхронизацию>Я не использую двойную буферизациюТы ку-ку? vsync основан на буферизации, без back-буффера она не работает в принципе.Front Buffer это прямой вывод на экран.
>>594322>пять лет твоих знаний >Не знает как работает вертикальная синхронизация.Да и я не думаю, что api вулкана или dx серьёзно ушли от огл. Концепции вроде бы одни и те же, такие же буферы, такие же шейдеры.>>594345А каким тогда образом это работало в win7? Задний буфер я создаю (без него инициализация opengl занимала около 30 секунд только, лол), просто не переключаю его. Но да, всё как ты сказал, блокировка возникает в SwapBuffers, то есть это могло работать в win7, только если система посылает wm_paint правильным образом.>Front Buffer это прямой вывод на экран. Теперь уже не совсем. В win7 задержка была 0-2 кадра на 120фпс видео (то есть от 0 до 1 экранного кадра, всё согласно теории), а в win10 уже 2-4 и никакое DwmEnableComposition(false) уже не помогает из-за принудительной двойной буферизации всех приложений (разрывов в оконном режиме мне получить не удалось). 0-2 кадра осталось только в полноэкранном режиме.Ладно, как по нормальному то сделать? Всего то нужно получить событие от экрана.
Без юниформа это сделать никак нельзя? Что за маразм, как вообще можно было догадаться сделать такое? У меня же одни и те же текстурные блоки и я не могу представить ситуацию, где необходимо менять их номера во время работы. Почему нельзя просто в шейдере прописать texture(0/2/4, ...) или uniform sampler2D texture1=0/2/4 на худой конец? Угу, в 4.2 можно, но долго же они соображали.
>>594816> У меня же одни и те же текстурные блоки и я не могу представить ситуацию, где необходимо менять их номера во время работыТекстурные блоки и перменные устанавливает драйвер и нельзя узнать заранее какие он присвоит индексы.
>>594821Но по факту я один раз при инициализации указываю номер и больше этот юниформ не трогаю. Если там что-то и меняется в индексах, то api/драйвер сами переставляют индексы, то есть с тем же успехом я мог бы сразу в шейдере указать 0 и api/драйвер в той же степени переставляло бы индексы. Очень странно, что потребовалось дойти аж до версии 4.2, прежде чем они догадались. Я бы в первой же версии сделал бы или возможность задания номера из шейдера, или глобальный legacy-юниформ как все остальные переменные состояния. Но почему-то глобальный legacy-юниформ для gl_LightSourceParameters есть, хотя, наверное, никто никогда в жизни не использовал legacy-освещение и функции для него вместе с glsl-шейдером.
>>594957А есть какой-то список с кратким описанием расширений сгруппированным каким-либо образом, чтобы не открывать каждую из 195 (это для arb-расширений) статей?Типа, расширение GL_ARB_texture_storage, позволяет выделять память для текстур за один вызов (или что оно там возволяет), можно использовать для того-то-то.И так далее, по две строчки на каждое.
>>597048Хуян. На хуяне заебешься даже сраный треугольник выводить, плюс этот треугольник будет работать только на топовых видеокартах.
>>597091>только на топовых видеокартахНу извини, что твою мочу за 2к рубля с Авито не поддерживает, авось ещё на xp тут сидишь
>>597043Конечно. Это лишь api для общения с видеокартой. Пиксели всё-равно считает видеокарта, производительность может улучшиться только из-за минимизации накладных расходов внутри этого api, но они в любом случае составляют не слишком крупную часть.
>>597098Причем тут конкретно я? Если речь идет об охвате аудитории.Есть неигровые ноуты, есть бюджетные компы с интегрированными видюхами. Не у всех юзеров есть деньги на видюху за 50 косарей.Было бы странно, если бы юзер спокойно играл в игры на юнити на своём неигровом ноуте с интеловским процем и встроенной видюхой, а твой шедерв на пукане бы жидко пукал и обмякал при запуске. Особенно если этот шедевр в 2д.
>>597043В случае эмляторов всяких маняконсолей opengl иногда сильно посасывал у directx примерно на 5-20 фпс, в других случаях всё зависело от видеокарты и/или пряморукости разрабов эмуляторов. Вот примеры с эмулятором андроида и докой 2 (спойлер: огл снова соснул)https://www.youtube.com/watch?v=54oU4XAWmM8https://www.youtube.com/watch?v=04tXQ_o02Hs
>>597223>огл снова соснулМожно попробую угадать почему? В случае с дотой. Игра изначально была на dx9, и opengl они просто за уши притянули, не вникая в opengl подменили функции, там где это можно было. Написали какой-нибудь враппер кривой, прослойку. В пользу этого говорит то что в dx9 режиме оно потребляет меньше всего памяти почти на гигабайт, лол. Они просто ogl не осилили, потому что в остальных режимах видеопамять запита на 1.5 гб - а в случае ogl на 900 мб, какой-то режим забыли указать, не загружают какой-нибудь буфер на видеокарту или ещё что-то.И ещё я полистал моменты, во всех открывках кроме начала фпс хуже всего у dx11, что соответствует моему опыту игры в доту на разных api. Разница в 5-10 фпс при общем фпс в 200 довольно смешна.
>>597226Тем не менее, не один ааа разраб пока не подтянул ОГЛ на godlevel, а это значит, что на то есть причины
Фрагментный шейдер имеет возможность прочитать содержимое буфера цвета/глубины? Каким образом лучше организовать раскрашивание с учётом уже имеющейся информации? Точно сработает несколько проходов рендера в текстуру (там не так много слоёв, не больше 20) с передачей этой текстуры в шейдер, но не очень бы хотелось 20 раз перерисовывать всё, особенно если учесть, что для 75% пикселей хватит первого прохода и потом они просто висеть будут.
>>602378> Фрагментный шейдер имеет возможность прочитать содержимое буфера цвета/глубины?Сам себя — нет. Другие — да. Глубину рендери сам. А дальше бред бессвязный.
>>602378https://www.khronos.org/opengl/wiki/Built-in_Variable_(GLSL)in vec4 gl_FragCoord;gl_FragCoord.z -- то, что тебе нужно!можно ещё вывести из шейдера какую хочешь глубину, например, gl_FragDepth = 1.;
>>602547>>602378это если о глубине, цвет вроде никак! в зависимости от того, что ты хочешь, лежащим там цветом можно через блендинг воспользоваться
>>602550перечитал вопрос и понял, что про глубину немного не то написал :( анон выше хорошо написал, из самого себя не прочтешь. довольно очевидно, если представлять себе, как оно там внутри может быть устроено
>>602553>довольно очевидно, если представлять себе, как оно там внутри может быть устроеноНе очень то. Когда блендинг происходит, оно же читает буфер цвета. Но смешивает только по каким-то фиксированным уравнениям блендинга. Информация из соседних пикселей не требуется. Только тот же самый, который перекрашивается.https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_shader_framebuffer_fetch.txt
>>602571мне кажется, блендинг происходит немного после вычисления цвета, как будто бы типа пиксели посчитал, а потом прикладываешь к фреймбуферу. поэтому я бы не сказал, что когда блендишь, оно читает буфер цвета
>>602616>мне кажется, блендинг происходит немного после вычисления цвета, как будто бы типа пиксели посчитал, а потом прикладываешь к фреймбуферуЯ нарисую красный, поверх него полупрозрачный синий, сверху зелёный и потом ещё несколько. И он сохранит след от изначального красного. Если он вычисляет цвета потом - каким образом он хранит вот эти накладываемые поверх цвета? В стеке, лол? Даже если по каким-то причинам он в самом это делает, почему нельзя считать вот временное сохранение в шейдере?Для чего хранить буфер цвета/глубины и результаты работы шейдера (причём, возможно по несколько раз на пиксель) отдельно, которые потом замешаются - если можно сразу провести несложную операцию сложения&умножения, что, как мне кажется, куда эффективнее, чем вводить дополнительный неявный буфер и какую-то сложную фиготу вокруг него.
>>602712не, "потом" это типа после отрисовки одного примитива(треугольника). а вообще, можно и хранить все цвета вместе, замешивая в конце, так получится что-то вроде order-independent transparency.
Кто юзал layered rendering? Хочу каскадные шадоумапы за один проход рисовать, но прикинул и понял что сосну с одним буфером глубины. Кто-нибудь делал подобное?
>>605840Блядь я понял, слои фреймбуфера и слои текстуры это разные вещи. Чтобы сделать слоеный фреймбуфер надо texture array биндить сразу весь через glFramebufferTexture, а не вызывать glFramebufferTextureLayer по отдельности. Тех, кто писал спеки, надо раскаленной кочергой изнасиловать.
Фишка sampler object в том, что можно создать один сэмплер glGenSamplers() и один раз выставить параметры с glSamplerParameter() и пользоваться ним с любой текстурой? То есть при создании новой текстуры не нужно больше вызывать glTexParameter()? А потом на отрисовке просто биндить этот сэмплер glBindSampler(), вместо glUniform1i(), верно?
>>615743> glBindSampler(), вместо glUniform1i(), верно? Sampler меняет настройки текстур, например, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_T и тдglUniform1 всё равно нужно использовать
>>615992Серьезно? На директе я делал такое за 200 с чем-то строк.А вообще знания подобной оккультистики пригождаются? Работу можно найти?
>>615992https://gamedev.ru/code/articles/VulkanTriangleИ как на этом умудряются писать огромные проекты? Это же пиздец! Я просто в ахуе.
>>616034>Легче найти работу на js-фронтенде.То что найти работу легче, думаю, понятно всем. Насколько вообще возможно найти работу? Существует ли вакансии на рынке?
>>616043>На Direct3D 11 наверное?Это было вообще на 10 давным-давно. 12 что ли вулканизировали, тоже стал низкоуровневым?
>>615996Серьёзно, вот например.https://github.com/SaschaWillems/Vulkan/blob/master/examples/triangle/triangle.cpp>А вообще знания подобной оккультистики пригождаются? Работу можно найти?В ДС спеца по вулкану с руками оторвут на шестизначную з/п, но нужно знать овердохуя всего, надо понимать, как работает gpu, как профилировать код, как пилить шейдеры.>>616055Директ нахуй не нужен, будущее за вулканом. Директ - это только шиндовс, вулкан - это самые разные девайсы, кроме десктопных систем, мобилки, планшеты и прочее.
>>616065>В ДС спеца по вулкану с руками оторвут на шестизначную з/п, но нужно знать овердохуя всего, надо понимать, как работает gpu, как профилировать код, как пилить шейдеры.Это только в ДС наблюдается такой казус или вангуешь везде такой спрос на знатоков вулкана в индустрии?>Директ нахуй не нужен, будущее за вулканом.Очевидно ты прав, но насколько близко это будущее - хз. Директ будет долго дохнуть точно.
Здравствуйте профи, скажите, сколько примерно строк кода займёт пересадка годота на десктопный GL рендер с тупого мобильного GLES?
>>616065С каким наслаждением я бы бил ебальники умникам выкатившим "графический апи нового поколения". Просто расхуярил бы в мясо нахуй. Это же надо догадаться - развернуть GL кишками наружу - типа жрите, новье же, блядь. Разве что нвидия подсуетилась со своим rtx экстеншеном на уровне модификации пайплайна. Нихуя нового. Ровным счетом.Только тысячи, миллионы, миллиарды бесконечного бойлерплейта, которые теперь ночами снятся.
>>616032узнай о такой замечательной вещи как ООП.Все это скрывается обертками и забывается. Дальше твой треугольник выводится все той же одной строкой
>>616036а кто по твоему пишет все эти юнити, ue, крайэнджины, дайсы, etc?(эх, всегда завидовал что сегодня какой-нибудь чел пилит никому не нужный движок, а завтра он уже работает в epic над UE4)
Антонуэны, пожалуйста, не обоссыте за тупой вопрос.Как я понял, когда мы берем определенную модель и выводим ее посредством опенгл, мы добавляем каждую её точку в массив вершин и затем описываем в каком порядке какие треугольники там заебенить, да?
>>616969Сделай у себя в программе перезагрузку шейдеров по нажатии кнопки, и пиши их в блокноте.>>616036В США есть. За пределами не особо.>>616902Хороший пример - handmade quake. Чел начал писать первый квейк с нуля и делать видео на ютубе, его взяли на работу в какую-то топовую компанию, после чего он удалил канал.
>>617096Не знаю. Возможно, по неопытности он писал не самый лучший код и не хотел, чтобы его имя ассоциировалось с этой поделкой новичка в будущем.Отдельные видео вроде как можно найти на других каналах.
>>617098Ты связываешь написание квейка и приглашение на работу в эпик? Может его мама порекомендовала знакомым.
>>617113>эпикНасколько знаю это вообще ебанутая структура. Читал несколько отзывов на реддите и там как-будто филиал Россиюшки в США.>Сделай у себя в программе перезагрузку шейдеров по нажатии кнопки, и пиши их в блокноте.Справедливо сказано.
>>617113Может быть. Но обычно для человека без опыта главная проблема, чтобы его вообще заметили и пригласили на собеседование. Его проект мог помочь.>>617117На реддите когда пишут про Epic часто имеют ввиду Epic Systems, большая компания, пишет медицинский софт.
>>617195На одной из моих работ со мной работал бывший программист рендера в UE. Вроде не жаловался. Говорил, у них никого никогда не увольняют, если человек совсем идиот, ему поручают делать ненужную работу.
>>617201Он сам ушел. Вероятно, на нашей работе ему дали сильно больше денег хотя сама работа была не очень, я думаю, он пожалел
>>617214Я тоже в штатах.Давно экспериментирую с компьютерной графикой и симуляцией физики, планирую следующие несколько лет подналечь на учебу серьезнее, написать движок на вулкане, и попробовать найти работу в этой области.Вот еще один источник вдохновения: два брата делают симулятор гонок (без использования движков), уже 10 лет. Один моделит, другой код пишет. Смотрится очень круто.https://polycount.com/discussion/comment/2700286
>>617220>Я тоже в штатах.Каким способом сцыганился туда? Кем работаешь там? Через год переезжаю в Германию по учебе и оттуда хочу в штаты перебраться по работе.>два брата делают симулятор гонок (без использования движков), уже 10 летСильно. Выглядит очень круто, особенно, если учитывать то, что это пишут всего два брата-акробата.
>>617227Программистом работаю, по работе и переехал по L-1B. Сейчас переезжать стало заметно сложнее из-за дефицита H-1B, но в целом перебраться можно. Самые рабочие варианты - всякие гуглы-амазоны и финансовые компании.В целом подумой, США не такая уж и класная страна для жизни, хотя с работой для программистов тут все очень хорошо.
>>617228Спасибо что отвечаешь. Надеюсь у меня все получится. Главное, язык выучить, а он, сука, не дается.>хотя с работой для программистов тут все очень хорошоВ том то и дело. Кажется, нигде больше нет таких условий для программистов. А что касается Германии, то там даже хуже чем у Россиян дела обстоят.
>>617231Переезжайте на запад, пацаны, там вы будете "ахуенно" работать, плотить налоги (ура-ура, всю жизнь мечтал), плотить за медицину (надоела бесплатная) и получать копейки (по тамошним меркам).
>>617306Уехать в Глазго-вот вариант,У них там честные все, как Дональд Дак и Санта,Всем подряд, за так, машины, бриллианты,В окно кинул бакс, тебе два бумерангом.
>>617306В Европе бесплатная медицина и высшее образование, а также платят иногда пособия. Зависит от страны и твоей ситуации. Но проблема в том, что средняя зп разраба 11К баксов в год. В СНГ это заебись деньги, многие зарабатывают по 3-4К в год. В Европе люди делают больше, от 20К в год. Поэтому ты там будешь нищим будучи инди.
Расскажите про буфер трафарета.Хочется получить число ненулевых значений (в идеале "гистограмму", какое число сколько раз встречается).И граничные координаты (xmin, xmax - соответствующий самому левому/правому фрагменту с ненулевым значением). Чтобы прямоугольниками обрезать нужные области, и их размер был меньше размера всего кадра. Есть для этого функции какие? Как это делается? Я просто даже не знаю какие слова гуглить.Я совершенно точно видел где-то метод позволяющий узнать количество закрашенных пикселей, но способ был древний и видел я его лет 10 назад - наверное это что-то из легаси.А вручную это сделать я могу только на процессоре и наверное тогда будет быстрее просто без прямоугольников брать весь экран.
glUniform3f(colLoc, 1.0, 0.0, 0.0);Так всё работает, треугольник красный.GLfloat myCol[] = {1.0, 0.0, 0.0};glUniform3fv(colLoc, 3, myCol);Так ничего не работает, никакого треугольника я не вижу.В чём разница и ЧЯДНТ?
>>624827Спасибо, добрый человек! Заработало.Я в вашем английском не понимаю ничего, поэтому умные буквы "The vector form loads count sets of values into the uniform variable's starting location." я пропустил, и прочитал только "If location is the start of an array, count sequential elements of the array are loaded."Эти два предложения противоречат друг другу, нет?
>>624868Я тоже ничего не понимаю в лунном, но у тебя в команде уже написано 3fv из-за чего возникает закономерный вопрос - что бы могла обозначать вторая тройка и зачем ты вообще её туда поставил. Я бы попробовал 0, 1 и 12 (по размеру данных) - если бы методом тыка подбирал.>поэтому умные буквыНе представляю откуда ты эти умные буквы достал. У меня вот: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glUniform.xhtmlИ там написано "should be 1" во всех случаях если униформ не массив. Довольно понятно и однозначно.
>>624874>Не представляю откуда ты эти умные буквы досталRedBook, восьмое издание, стр.48. В девятом издании такая же формулировка осталась.Спасибо, начинаю осознавать. По мне так и на Кроновском сайте не понятно - но там хоть явно написано значение 1 использовать, я только 0 и 2, 3 попробовал (индекс, ласт индекс и size). Что count значит, я до сих пор не понимаю) Поживём-увидем, дойдёт ещё.Я не понимал, что наш Vec3 - это single uniform variable, по мне так его тип - Вектор, тобишь массив по нашенски. Ну и бог со мной.
>>624901А оно ещё переиздаётся, лол? Тут нужно картинку со слоупоком. Я видел только супер-древнию с glutessellation, которая из прошлого века. И читать её сейчас совсем нет смысла, там даже не классическое легаси - там что-то ещё более древнее.>Что count значит, я до сих пор не понимаю)Там можно написать что-то типа uniform vec3 test[16] в шейдере, и тогда заполнять его нужно будет указывая 16 в том месте. Вроде бы.
>>624926Redbook довольно актуальна (на мой слоупочный взгляд) - восьмое издание было неслабо переписано чтобы перейти с 3й версии на 4.3, в девятом издании отличий мало, но есть - в бумаге у меня восьмое, к сожалению - и приходится так же поглядывать в девятое издание, оно 4.5. 4.6 ещё не вышла книжка, это да.То же самое и с синей superbible - пытаются держать актуальной, жаль что последняя книжка в 15 году вышла.А так, чтобы вкатиться - самое то, лучше чем opengl-tutorial.org с его 3.3. Ну как по мне - откуда ж мне знать, в самом деле.
>>625043>лучше чем opengl-tutorial.org с его 3.3Не думаю. Я до глубины души убеждён что 97% лучше все вкатываться с 1.4 легаси - потому что оно интуитивно понятнее, чем создавать буфер, чтобы треугольник ебучий нарисовать. То есть так ньюфаг может зайти и написать gluLookAt/gluPerspective и рисовать свой куб. И крутить его в объёме как хочется. А все шейдеры подключать постепенно как расширения.А тут значит 4 версия. Чтобы сделать хотя бы что-то, ему нужно понимать концепцию буферов, обоих шейдеров, хуйню про линейную алгебру и однородные координаты. Да у него просто руки опустятся и он пойдёт в юнити или годот. Или что там сейчас используют. Так можно сделать, только ты бородатый программист с 10 годами опыта в других областях - тогда запросто, можно сразу четвёртую версию.А если бы ньюфаг изучал начиная с 1.4 - он бы уже знал и видел изнутри уже один способ как можно рисовать куб и как можно сделать свою обёртку для матриц и всего остального - он бы просто немного времени потратил и перекатился бы на четвёрку без субъективных изменений.
>>625227Не соглашусь.Ну во-первых, между 3.3 и 4.5 лучше вкатываться с 4.5 - благо direct state access появился.Но Вы предалагаете выбор не 3.3, а 1.4, так что отсюда - во-вторых: Так и в 4.5 есть волшебная портянка на два экрана, просто используй её (если сможешь скомпилировать, ха-ха!) - и рисуй свои треугольнички так же, как и в immediate mode, в портянку не заглядывай, просто используй волшебные функции. Вкатываться с 1.х плохо тем, что как мне опыт говорит, люди привыкают, и когда их пытаешься на другую концепцию пересадить потом плюются и годами не могут привыкнуть к "новому". Без субъективных? Именно что с субъективными))) Зачем этот барьер своими руками создавать? Чтобы в Юнити не ушли? Да пусть идут, смежную профессию изучают.А то, что нуб без линала в графику лезет - ну да, ему 1.4 хватит. На всю жизнь.
>>625227для поделок типа змейка 3d или содомирующих кубов хватит и 1.4для программирования графики надо учить современный OpenGLэто разные областидругое дело, что ничего не мешает даже школьнику понять концепцию буфферов и написать 30 лишних строчек
Умные вы тут такие собрались. А вот за что новичку лучше взяться - за OpenGL или за Vulkan - не знаете.
>>625964>2k20 >изучать закрытое анальное апи, работающее только под одной платформой вместо открытого и свободного, открывающего доступ на все платформы, от мобилок и веба до консолей и пекарен
>>625972Качественные апи в любой год лучше кросплатформенных и то не особо-то, только виндоус линукс и андроид поделок.
>>625941Для новичка OpenGL конечно. Вулкан это не про графику, а скорее про программирование гетерогенных вычислительных систем. Тут даже серьезные дяди с опытом 5-10 лет директов\опенжэлей на вулкан переходят натужно и с кровавым поносом.
>>625989Так я потому и спрашиваю - может пропустить OpenGL, и сразу так: Оп-ля, и я готовый спец по Вулкану. А на ГЛ посматривать как на дремучее легаси. Не тратя 5-10, треугольники я и так нарисую как-нибудь.Главное - а нужен тот Вулкан на рынке-то?Вот если я его годик поучу, а потом пойду работу искать?
>>625989Причем тут гетерогенные вычислительные системы? Такое обычно говорят, когда имеется несколько вычислительных устройств с разными архитектурами, типа цпу, гпу, плис, и между ними надо как-то параллелить работу. Вулкан вроде как нацеливается только на графику, как замена опенгл. Вот опенЦЛ можно сказать, что он про гетерогенные вычисления.>>626090Если планируешь работать по какому-то определенному направлению, то представь, что ты уже сейчас ищешь работу, смотри вакансии, мб даже пытайся устраиваться на какую-то стажировку, проходи собесы, узнавай какие вопросы спрашивают.Опенгл по крайней мере даст понимание общих принципов и подходов, которые используются в графоне, типа шейдеры, пайплайн, буферы, 3д геометрия/линал и все такое.
>>626143Мне некогда на стажировку ходить, я на работу хожу фуллтайм. Шейдеры, пайплайн, буферы и линал я в общих чертах понимаю, а нормально осознать думаю уже в Вулкане. Так зачем мне OpenGL? Только если с ним работу легче найти намного, чем с Вулканом. Вот я и спрашиваю, на рынке вулкан нужен? Какие-то вакансии висят, но может это так, словечко модное написали - а на самом деле он не нужен никому?
>>626150Зайди на сайты с вакансиями и посмотри. На хх 160 вакансий с опенгл, 25 с упоминанием вулкана, причем зачастую указано "будет плюсом знать вулкан/директх/опенгл", и зачастую это позиции с довольно высокими требованиями на уровне мидла/сениора конкретно в графике (ну и зарплаты там соответствующие). Первое означает, что они мб даже не обязательно будут юзать вулкан, или им будет достаточно от тебя норм знания опенгла, а они мб дотянут тебя по вулкану если надо. Второе означает, что скорее всего от тебя будут требовать коммерческий опыт (1-3 года или больше) использования чего-то из перечисленного, с конкретными примерами разработанных программ, т.е. самописные поделки уровня лаба1 не прокатят.Короч, я думаю, что резона не слишком много.
>>626156Ну то бишь в резюме он нужен только в виде "А ещё и в Вулкан умею! Чуть-чуть правда, но не важно." И без OpenGL лезть работать смысла никакого. ОК, жаль - я уж размечтался каким я уникальным незаменимым спецом буду)
Вкачусь в тред на постоянную основу. Месяц назад начал изучать огл в свободное от работы время и писать свой графический движок. Учу по туториалам ogldev и learnopengl, как закончу туториалы перекачусь в штудирование книг.Стараюсь движок аккуратно писать, с деревом сцены, автоматическим управлением юниформами в шейдерах и т.д.Сейчас начал реализовывать отложенный рендеринг, после имплементации попробую ввинтить его во всю остальную архитектуру, чтоб удобно переключать с помощью фактори паттерна и т.д.Выше в треде прочитал про forward+ и clustered forward. До этого о них не слышал, по описанию сильно сложнее чес deffered rendering, но попробовать хочется, чтоб прям вообще на любой вкус рендеринг был. Интересно что у этих методов с рендерингом прозрачных объектов. Тоже нужно совмещать с прямым проходом именно для таких объектов?Пишу на C# с использованием обёртки OpenTK, т.к. в C++ опыта не особо много, а к .net питаю очень тёплые чувства. Хотя вот wpf с огл не особо дружит.Вообще самое тяжёлое с чем сталкивался до сих пор - это кватернионы. Много времени потратил на изучение и попытки визуализировать у себя в голове и на реализацию всех поворотов в движке через эти кватернионы. Вроде что-то прлучилось и какое-то понимание пришло, но периодически возвращаюсь к этой теме, зачётная хуйня.
>>626851В шапке, кстати, увидел ссылку на канал thebennybox. С него я как раз и начал, годный чувак, слушать интересно и приятно, жаль он делает вилосы раз в полгода сейчас.А вообще, подскажите, пожалуйста, насколько информация из его роликов и из туториала learnopengl устарела на текущий момент. Всё сильно поменялось и нужно доставать последнее издание какой-нибудь книги и навёрстывать упущенное или принципиально конвеер и другие основные вещи не особо изменились и имеет смысл продолжать обучение как есть с расчётом на то, что по мере изучения новых вещей движок я буду модернизировать?
>>626851> эти кватернионы. Вроде что-то прлучилось и какое-то понимание пришлоА я до сих пор не понимаю.Главное, не могу понять, в чём разница между К. и матрицей вращения (поворота/направляющих косинусов).
>>626873Никакой разницы. Кватернион можно представлять матрицей с обычными операциями над матрицей. Только что матрицы перемножать дольше, для 3х3 - это вроде как 7х9 (4 умножения, 3 сложения) операций, а для кватерниона 7х4.А ещё кватернионы можно складывать покомпонентно получая промежуточное значение. А вот если у тебя есть матрица поворота и тебе нужно получить поворот в 74.1% от поворота этой матрицы, то что ты будешь делать? А с кватернионами достаточно просто посчитать новый кватернион равный (1,0,0,0)0.259+0.741(<исходный поворот>)
>>626852> А вообще, подскажите, пожалуйста, насколько информация из его роликов и из туториала learnopengl устарела на текущий моментВсё что 3.3 версии и выше это нормальная информация.
>>626948Можно на компатибилити профиле сидеть и 1.1 хуярить, пока не заработает и просветление не придёт. Мне кажется, он с ума сойдёт, если сразу станет хеллоуворлд на гл3+ адаптировать под свои костыли.
>>626873>А я до сих пор не понимаю.А их ещё и понимать надо? Я вот когда исправил баг в самописном модуле управления матрицами, так и не заглядывал туда уже несколько месяцев...>>627235>Мне кажется, он с ума сойдёт, если сразу станет хеллоуворлд на гл3+ адаптировать под свои костыли.+1, версия 3 добавила столько лишнего, не понятно, на что нужно в первую очередь смотреть, чтобы разобраться. Даже хелловорлд выглядит как стена бессмысленного текста, а не программа...
Тупа:wget http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z7z x jogamp-all-platforms.7zcd jogamp-all-platformsmkdir -p demos/es2cd demos/es2wget https://raw.github.com/xranby/jogl-demos/master/src/demos/es2/RawGL2ES2demo.javacd ../..javac -cp jar/jogl-all.jar:jar/gluegen-rt.jar demos/es2/RawGL2ES2demo.javajava -cp jar/jogl-all.jar:jar/gluegen-rt.jar:. demos.es2.RawGL2ES2demoИ никакой ебли со студией, glew и прочими glfw. Ебашь хоть в блокноте.
>>627389Да не, в 3 версии кокрастыке всё очень чётенько и понятно, и всё очевиднее, чем в 1.1. Просто дебажить опенгл это ад, тут квады воткнул вместо треугольников, тут VAO забиндить забыл, тут на sizeof(float) у страйда забыл умножить и всё разваливается, а сам опенгл будет молчать в тряпочку, пока ты GetError после каждой строчки не засунешь.
>>627404Надо юзать отладчики типа CodeXL которые работают если повезетВ этом прелесть директ3д, у тебя сразу в студии есть отличный отладчик, можно смотреть все вызовы, состояние внутренних объектов, входные-выходные данные шейдеров, кучу всего.
>>627404>Просто дебажить опенгл это адОоо, знакомая ситуация, я в своё время замучился, пытаясь нарисовать хоть что-то, кроме пустого окошка. Но хуже всего когда что-то происходит и никакой ошибки нет, но ты не видишь результат работы, потому что он сместился куда-то не туда и ты не можешь его найти, потому что ещё не прикрутил камеру... или оно рисуется прозрачным цветом, или отрезается не там, где ты этого ожидаешь, и в итоге вертишь все эти треугольники, но ничего не видишь. Ужасно.>>627494>директ3дИМХО, названия команд у OpenGL как-то проще для понимания, D3D сложнее осваивать (но я давно пытался и ничего не помню). А ещё OpenGL не прибит гвоздями к виндувс.Да и не все ж сидят в студии, OGL/D3D можно использовать из самых разных ЯП.
Меши в буферы рисовать, как оказалось, просто. Нужно бы теперь вокруг источников света отрендерить сферы / конусы, чтоб знать, какие пиксели они задевают и можно тогда уже считать освещение.