Войти
ПрограммированиеФорумГрафика

Можно ли в OpenGL 4.5 сделать SSBO-s массивы ? (2 стр)

Страницы: 1 2
#15
13:54, 25 июля 2018

nonamezerox 

glMultiDrawIndirect и в шейдере у тебя glDrawid модели, не?

Не могу уловить к чему ты меня хочешь подвести ?

Да есть glDrawID и glMultiDrawIndirect.
Но не могу понять как к модели в таком случае привязать свой SSBO буфер матриц костей(это animation keys то есть у меня для 1 модели в SSBO все её позы анимации. То есть бег\удар\смерть\прыжок\сидит\стоит\идет\лезит по лестнице\блок от удара\колдует).
И такой один SSBO обычно выходит в 7 метров.

И таких SSBO буферов 10 штук, так как 10 разных анимированных персонажей.
Личь-маг,крестьянин,главный герой , скелет, колдун, орк, собака, паук, зомби и Програмина :)

#16
15:28, 25 июля 2018

Доподлинно не известно какой аналог UAV из DirectX есть у Vulkan API и OpenGL, я лиш слышал что они ввели SSBO в свое время (и да, функциональность схожая, вернее в том что можно записывать/считывать), и больше ни слухом ни духом...

#17
15:30, 25 июля 2018

ronniko
>Но не могу понять как к модели в таком случае привязать свой SSBO буфер матриц костей
хранить все в 1 SSBO и рисовать со смещением заполняя в OpenCL/compute шейдере Indirect buffer для glMultiDrawIndirect  ?
>И таких SSBO буферов 10 штук, так как 10 разных анимированных персонажей.
glMultiDrawIndirect вроде ожидает один буфер, но зато он может рисовать его кусками с учетом разных смещений и другие параметров, это его преимущество перед glDrawElementsIndirect, там нужно обновлять Instance/SSBO/UBO буфер в OpenCL/compute шейдерах.

#18
15:35, 25 июля 2018

Andrey на АМД SSBO max size 16 метров если можно верить OpenGL4.5 glGetIntegerv !
У меня AMD Radeon HD 7950
Я бы с удовольствием ! На NVIDIA хоть 500 метров SSBO можно.

#19
15:43, 25 июля 2018

Упс ! :)))
Сорри пацаны ! Я прогнал.

GLint size;
glGetIntegerv(GL_MAX_SHADER_STORAGE_BLOCK_SIZE, &size);


Только что решил проверить и проверил.
В size вернулось 2147483647 bytes.


Ох ! Я перепутал constant buffer с SSBO !
У АМД constant buffer можно больше 64 килобайт сделать ! На NVIDIA ругается если constant buffer > 64 kb.

#20
15:49, 25 июля 2018

Да уж я и прогнал :)))

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#21
16:02, 25 июля 2018

ronniko
> У АМД constant buffer можно больше 64 килобайт сделать ! На NVIDIA ругается если constant buffer > 64 kb.
идить! серьезно что-ли больше 64к мона?
покажи GPU Caps Viewer для AMD Radeon HD 7950
nVidia GT 610:
gpu_caps_gl | Можно ли в OpenGL 4.5 сделать SSBO-s массивы ?

#22
16:21, 25 июля 2018

Andrey
Если я правильно понял то размер constant buffera:

glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &size);


Вернул в size = 572657868 !

Хотя возможно(наверное) это надо понимать как 572657868/65535 = числу constant buffer-ов которое можно создать.

Моя видяха AMD Radeon Sapphire 7950 видеопамяти 3 гига. 2012 года выпуска.


Сейчас скачаю и поставлю. Скрин через 10 минут выложу.
Изображение

#23
16:36, 25 июля 2018

Я весной тестил у одного на NVIDIA свой OpenGL 4.5 пример и у него не запустился, потому что вершинный шейдер у него ругнулся что констант буфер больше 64 кб !

#24
19:53, 25 июля 2018

ronniko
> Если я правильно понял то размер constant buffera:
> glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &size);
>
>
> Вернул в size = 572657868 !
AMD R7 240 - такой же размер
> Хотя возможно(наверное) это надо понимать как 572657868/65535 = числу constant
> buffer-ов которое можно создать.
Нет. Это размер 1 UBO
Сколько можно выставить в Вершинный и пиксельный что GL_MAX_VERTEX_UNIFORM_BLOCKS/GL_MAX_FRAGMENT_UNIFORM_BLOCKS
сколько можно максимум создать нету констант вроде

#25
19:59, 25 июля 2018

Просто возникает вопрос, а можно ли доверять этому показателю 572657868 ?
Фиг их знает как там АМД выдает эту инфу OpenGL-ю.

#26
21:57, 25 июля 2018

ronniko
>Просто возникает вопрос, а можно ли доверять этому показателю 572657868 ?
>Фиг их знает как там АМД выдает эту инфу OpenGL-ю.
Нужно пробовать. Но как с другими GPU быть то где только 65к

#27
22:13, 25 июля 2018

Определять вендора и glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &size) и создавать больше 64 или 64 кb
Или придерживаться постулата констант буфер только 64 кб ! Как это делает DX11

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.