Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Сделал мегатекстуры (6 стр)

Сделал мегатекстуры (6 стр)

Поделиться

Страницы: 1 2 3 4 5 6

nonamezeroxПостоялецwww3 ноя. 201713:50#75
Не понимаю как вышеописанное может помочь
Иначе у тебя каждый вызов glBufferData  будет заново пересоздавать буфер и заново осуществлять выделение памяти.

glBufferData  нужно использовать РОВНО АДЫН РАЗ, сразу после того места, где ты делаешь glCreateBuffers. Дальше тебе нужно использовать только glBufferSubData.

То есть:

//где там у тебя создание этих буферов
gl::BindBuffer(..как там у вас в ваших растах..);
gl::BindBuffer(gl::PIXEL_UNPACK_BUFFER, packed_buffer_id);
gl::BufferData(gl::PIXEL_UNPACK_BUFFER, MT_PART_BYTES as isize, ::std::ptr::null(), gl::STREAM_DRAW);
gl::BindBuffer(gl::PIXEL_UNPACK_BUFFER, 0);
//а так где использование
let bytes_offset = MT_PART_BYTES * part_id;
let file_mmap = MmapOptions::new().offset(bytes_offset)
                                  .len(MT_PART_BYTES)
                                  .map(&megatex_heightnormal)
                                  .unwrap();

gl::BindBuffer(gl::PIXEL_UNPACK_BUFFER, packed_buffer_id);
gl::BufferSubData(gl::PIXEL_UNPACK_BUFFER,0, MT_PART_BYTES as isize, file_mmap.as_ptr() as *mut c_void);
gl::BindBuffer(gl::PIXEL_UNPACK_BUFFER, 0);

А вулкан, я так понял, у тебя не пойдет, раз у тебя  даже dfDX и dfDy не поддерживаются.

Правка: 3 ноя. 2017 14:07

}:+()___ [Smile]Постоялецwww3 ноя. 201713:58#76
Джек Аллигатор
> Берем тайл из мегатекстуры, пишем в буфер
Ты map/unmap PBO в каком треде делаешь?
Надо в основном, а в другом только лить данные по полученному указателю.
AndreyПостоялецwww3 ноя. 201714:03#77
Джек Аллигатор
GL_ARB_buffer_storage пробовал?
0xc0deПостоялецwww3 ноя. 201718:14#78
Попробуй вызвать glMemoryBarrier перед использованием буфера в основном потоке.
0xc0deПостоялецwww3 ноя. 201718:20#79
Проблема в том, что когда ты вызываешь MapBuffer, тебе возвращается указатель на временный кусок оперативной памяти. Заливка в видеопамять регулируется драйверами и может происходить неведомо от тебя, поэтому часть тайла может не успеть заполниться до использования. glMemoryBarrier( GL_PIXEL_BUFFER_BARRIER_BIT ) по идее должен исправить ситуацию.
Джек АллигаторПостоялецwww5 ноя. 201715:55#80
Спасибо за идеи!

nonamezerox
0xc0de
Не работает!

Идею }:+()___ [Smile] так и не попробовал.

В итоге оставил всю работу с OpenGL в одном потоке, вспомогательный подгружает куски и отправляет их целиком в основной поток.
Подгрузок не видно, лагов нет, фпс не проседает, битых тайлов нет.

nonamezerox
> А вулкан, я так понял, у тебя не пойдет, раз у тебя  даже dfDX и dfDy не
> поддерживаются.
Конечно не пойдет - то были мысли вслух о будущем. Куплю новый комп, будет вулкан.
dfDX и dfDy поддерживаются, и ещё раз напишу если раньше неясно изъяснился - мне нужно считывать из мегатекстуры в любом шейдере, а не только во фрагментном. А dfDX и dfDy годятся только для фрагментного. Потому нужен был иной подход.
К тому же это позволяет убрать абсолютно ненужный крюк с рендером во фреймбуфер.

Теперь наконец-таки возьмусь за мегафичу, о которой говорил два месяца назад, и только потом запишу видео.

Снимок экрана от 2017-11-05 15:53:05 | Сделал мегатекстуры

Правка: 5 ноя. 2017 15:55

Страницы: 1 2 3 4 5 6

/ Форум / Программирование игр / Графика

Тема закрыта.

2001—2017 © GameDev.ru — Разработка игр