Suslik
> гораздо интереснее, как потом эту функциональность обернуть, чтобы ей можно
> было пользоваться, не простреливая себе ноги из пулемёта с дулом вниз.
Вроде в oglplus я видел что таргет буфера указывается шаблонным параметром, дальше смотреть не стал.
Все равно если хорошо знаешь ОГЛ то проще написать свою обертку, времени уйдет максимум неделя.
/A\
> Вроде в oglplus я видел что таргет буфера указывается шаблонным параметром,
> дальше смотреть не стал.
что это значит? какая разница? я нашёл байндинг только через аргумент, но меня всё равно жутко раздражает концепция, когда что-то сначала куда-то Bind(), а потом туда же отправляется Data(). куда байндится? что происходит в случае нескольких контекстов? кто последним установил какой контекст? в каком потоке? полностью избежать таких ситуаций трудно, потому что весь OpenGL на них построен, но пока что OOGL с этим лучше всех справляется, но с шейдерами у них точно так же глобальные состояния хранятся.
GLfloat triangle_verts[9] = { 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,-1.0f, 0.0f }; // bind the VBO for the triangle vertices verts.Bind(Buffer::Target::Array); // upload the data // since triangle_vertices is a static array // it is not necessary to specify its element count Buffer::Data( Buffer::Target::Array, triangle_verts);
Suslik
Да, видимо другую обертку смотрел.
А в какой-нибудь обертке проверяется например что при включении тесселяции надо менять тип примитива на GL_PATCHES ? Или проверяется совпадает ли вершинные атрибуты с входными данными шейдера? Или выходные данные шейдера с рендер таргетами? Или когда фильтрация текстур стоит с мипмэпами, а у текстуры нет мипмэпов и она из-за этого рисуется черной, где-то это проверяется?
OOGL не умеет в такие базовые вещи как MRT.
/A\
> А в какой-нибудь обертке проверяется например что при включении тесселяции надо
> менять тип примитива на GL_PATCHES ? Или проверяется совпадает ли вершинные
> атрибуты с входными данными шейдера?
пойнт не в том, чтобы в рантайме проверять, есть в шейдере атрибут или нет, а в том, чтобы нельзя было передать, например, id'шник vbo как значение соответствующего юниформа. для этого нужно проектировать интерфейс обёртки так, чтобы это было невозможно сделать by design. спроктировать код так, чтобы он работал правильно, если скомпилируется, невозможно, но к этому можно достаточно близко подойти.
viennahd
> Выходит мой последний концепт оберток очень хреновый?
если тебе нравится, пользуйся ради бога.
Выходит мой последний концепт оберток очень хреновый?
Да, от оригинально примера есть определенные отклонения.
Кстати, я первый кто написал OpenGL треугольник сам, на обертке.
Теперь собираемся перевести на трассировку.
Кстати, я первый кто написал OpenGL треугольник сам, на обертке.
viennahd
Из цикла "Цитаты великих людей".
viennahd
> Выходит мой последний концепт оберток очень хреновый?
Suslik
> чтобы нельзя было передать, например, id'шник vbo как значение соответствующего юниформа
Это полезно, но такие ошибки случаются достаточно редко. По мне так обертка должна обнаруживать как можно больше ошибок и в компайл тайме и в рантайме, хотя со многим справится профайлер...
ещё наблюдение. OpenGL — не настолько массивная библиотека, чтобы запариваться над поиском обёртки. реально её проще самому написать, причём для тех частей, которые понадобятся в проекте, а не для всего мусора, который в нём есть.
Suslik
> OpenGL — не настолько массивная библиотека
Я делаю все как есть, что нужно то и делаю. Я не собираюсь включать Full Stack OpenGL, только те фичи что может DirectX 11.
Я стараюсь сделать достаточно реалистичный OpenGL. Вот сейчас убираю весь тот мусор, хлам, и прочую трепуху.
Что касается моего опыта, то я изначально был JS программистом.
Тема в архиве.