>Это для пиписи
а на ПеКа какой ... нужно пострадать чтобы подобное провернуть?
вроде новая плойка уже не пиписи, а хэвосемьдесятшесть, у них просто должен быть мануал и для новой )
Hybernaculum
> Внимание, ответ.
садись - тебе 2. Иди учи шейдеры. И знай, что в DX все координаты в промежутке [-1;1] и [0;1] для z. Точка 0.0 в центре
war_zes
> садись - тебе 2. Иди учи шейдеры. И знай, что в DX все координаты в промежутке
> [-1;1] и [0;1] для z. Точка 0.0 в центре
Тоже 2. Как настроишь матрицу перспективы, так и будет.
что-то war_zes суровым стал. Раньше добрее был. Вот как программирование меняет людей :(
codingmonkey
На ПеКа эта команда называется _mm_prefetch
Ещё полезно почитать про _mm_stream_pi/ps/sd/ss; _mm_sfence
bazhenovc
Вав, надо же это возможно и на ПеКа, спс за инфу )
А вообще я тут несколько посвятился 5 минут назад и выяснил что бабушка на двое сказала и надо копать тему: Lazy Evaluation vs data-oriented optimizations
...you're always able to move scene nodes and request their updated world transforms any time, which are lazy-evaluated as necessary. An optimization-focused engine might calculate the world transforms once per frame within a tightly optimized loop, in which case the updated world transforms would not be immediately available.
То что - лень это первый друг человека и его двигатель это понятно, а вот с оптимизациями сложно как-то получается.
bazhenovc
> На ПеКа эта команда называется
У amd есть ещё своя штука
Стас
> Тоже 2. Как настроишь матрицу перспективы, так и будет.
Кол, чтобы не порол чушь. XY ∈ [-1;1] и Z ∈ [0;1] - захардкожено в DX. А матрица проекции применяется до клиппинга по этим диапазонам.
bazhenovc
> Да, потому что память намного медленнее, чем процессор. Посмотри те 2 ссылки, которые я тебе скинул.
Вот только это не значит, что dirty флаг не дает выйгрыша. Посчитать матрицу не долго, долго может быть её установить/передать дальше. В его случае матрица скорее всего идет на конвеер. Так что вместо вредных советов - лучше вообще не давать их.
Ок. Детально.
Есть класс Transform. В нем есть position, orientation, scale.
Вариант с dirty:
Есть переменная matrix, куда мы пишем данные при апдейте матрицы.
glm::mat4 Transform::GetMatrix() { if( dirty) Update( ) return matrix; }
Вариант без dirty:
glm::mat4 Transform::GetMatrix() { return // типа считаю матрицу }
Дальше при рендере вызывается GetMatrix(), перемножается с View и Projection и пхается в юниформ. Все.
Что быстрее?
Dampire
быстрее будет вернуть флаг из GetMatrix и если он true - то пихать в юниформ.
bool Transform::GetMatrix(glm::mat4 m) { if( dirty){ m = Update( ); return ( true); } else return ( false) }
MrShoor
Что и где ты собрался клипать? С какого бока ты сюда отсечение приплел? Clipping(computer graphics)
функция создает матрицу проекции с указанием левой верхней точки системы координат и правой нижней, для ортогональной проекции
D3DXMatrixPerspectiveOffCenterLH
тоже самое для перспективы.
Поэтому говорить о системе координат по умолчанию, по меньшей мере не корректно.
Во вторых.
MrShoor
> bool Transform::GetMatrix(glm::mat4 m)
> {
> if(dirty){
> m = Update();
> return (true);
> }
> else return (false)
> }
Вместо одного условия ты создал два... молодец... Хорошая оптимизация, был один кеш мисс, стало два... крут.
Если ты возвращаешь флаг true предполагается, что ты собрался его проверять. Если же ты не собираешься его проверять, то вообще не понятно на кой его возвращать.
Dampire
> glm::mat4 Transform::GetMatrix()
> {
> if(dirty)
> Update()
>
> return matrix;
> }
Вообще твой вариант правильнее было бы написать:
const glm::mat4 & Transform::GetMatrix() { if( dirty) Update( ) return matrix; }
Вообще нужно смотреть, в комплексе что и как ты сделал, сказать как правильно сложно.
Dampire
То что сказал bazhenovc в принципе правда, но не целиком, дело в том что это довольно сложная история, и пользоваться этим нужно правильно, иначе вместо ускорения ты получишь слайд шоу.
Пример если твоя функция update достаточно тяжелая, то твой dirty флаг может дать серьезный буст. Однако, возможно что имеет смысл облегчить функцию апдейта, или сделать ее для работы сразу над несколькими объектами,
В этом случае избавившись от лишних проверок ты можешь получить прирост скорости.
Стас
D3DX - это не по умолчанию.
> Поэтому говорить о системе координат по умолчанию, по меньшей мере не
> корректно.
Открой для себя шейдеры наконец. В них можно вообще на матрицу не умножать, а работать сразу в пространстве [-1;1] [0;1].
> Вместо одного условия ты создал два... молодец... Хорошая оптимизация, был один кеш мисс, стало два... крут.
> Если ты возвращаешь флаг true предполагается, что ты собрался его проверять. Если же ты не собираешься его проверять, то вообще не понятно на кой его возвращать.
Да хоть 8 кешмиссов, главное, чтобы этот флаг позволил мне избежать установки на конвеер.
Тесты про поможет или не поможет dirty в студию