Обновить

Сегодня я узнал нечто новое о GPU благодаря багу в своей игре

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели12K
Всего голосов 14: ↑14 и ↓0+20
Комментарии7

Комментарии 7

В конечном итоге я исправил это на стороне CPU; строку

(float)adjacency

в буфере экземпляров я заменил на

(float)adjacency+0.5f

Почему он сразу так не сделал? Очевидно, что при преобразовании int во float и обратно, обязательно наступит момент, когда у float появится отрицательный эпсилон.

Совсем не очевидно, если не задумываться о том, как выполняется интерполяция. В том же JavaScript ведь никто не добавляет 0.5 к длине массива при итерации, а там все числа вещественные, только 64-битные

Все решается проще через flat квалификатор. Была бы там поддержка интов, без него вообще бы шейдер не скомпилировался.

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

(float)adjacency+0.5f

	inline long int fround(float x)
    {
        return _mm_cvtss_si32(_mm_load_ss(&x));
    }

upd: у вас другая задача: сделать такой float, чтобы при отсечении дробной части всегда получался исходный int. Но да ладно, может кому пригодится функция

//структура для наглядности
#[repr(C)]
#[derive(Copy, Clone, Debug)]
pub struct Vertex {
    pub pos: [f32; 3],
    pub norm: [f32; 3],
    pub uv: [f32; 2],
    pub v_id: f32,
}
//fragment shader
if (int(v_ID + 0.5) == level.isSelected) {

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

На всякий случай: такая ситуация с деревом(бсп-браш или бвх оба по центровкам уи обьектов могут работать) хорошо вписывается в структуру мира где есть 2 дерева для уи и для обьектов, мир может быть любым, потомучто камера может работать в двух режимах орто и перспектива и их можно смешивать.

Друг. Я тут BGFX начинаю изучать не поможешь литературкой как работать с шейдерами ? а то документация самого bgfx сильно куцая

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации