forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   C3D Engine (http://forum.boolean.name/showthread.php?t=16433)

pozitiffcat 13.07.2012 15:33

Ответ: C3D Engine
 
Сначала думал, что есть отличия GL/ES, вот и написал интерфейс, можно директ запилить когда нечего делать будет, но для этого надо уходить от GL синтаксиса, более абстрактно сделать класс, у меня и окошки работают на freeGlut, SDL, Android API.. на любой вкус. Хотя SDL можно выпилить, у меня freeGlut, норм работает, компилится с сорцов без либ.
Я не ищу сложных путей, по фозможности использую проверенные временем библиотеки. Юзать freeimage не стал за не надобностью, раз есть свой формат моделей, так пусть будет свой формат текстур, накрайняк можно будет потом хранить текстуры прямо в моделях.. но это так на будущее.

HolyDel 13.07.2012 15:56

Ответ: C3D Engine
 
Код:

RENDER->bindBuffer(_vbo, BT_ARRAY);
        RENDER->vertexAttribPointer(shader->getPositionAttrib(), 3, RENDER->oFLOAT(), RENDER->oFALSE(),  sizeof(Vertex), (const void*)0);
        if(shader->getNormalAttrib() != -1) RENDER->vertexAttribPointer(shader->getNormalAttrib(), 3, RENDER->oFLOAT(),  RENDER->oFALSE(),sizeof(Vertex), (const void*)12);
        if(shader->getTexcoordAttrib() != -1)RENDER->vertexAttribPointer(shader->getTexcoordAttrib(), 2, RENDER->oFLOAT(), RENDER->oFALSE(), sizeof(Vertex), (const void*)24);

        RENDER->bindBuffer(_ibo, BT_ELEMENT);
        RENDER->drawElements(RENDER->oTRIANGLES(), _icount, RENDER->oUNSIGNED_SHORT(), 0);

семь виртуальных вызовов на отрисовку вместо одного... такто спички, но всеж...

pozitiffcat 13.07.2012 16:21

Ответ: C3D Engine
 
при 60 fps, это мешать не будет, прирост будет 0.5 фпс если убрать интерфейс.
При 1000 фпс, различие может быть в 50 fps. но какая нам разница, если глаз не воспринимает 1000 фпс, можно ограничиться 100 фпс.
Зачем нам гнаться за этими 0.5 % прироста, оптимизировав код. Лучше реализовывать чувствительные к ГАПИ оптимизации.

PS. компиляторы давно научились сами оптимизировать подобный код.

pozitiffcat 16.07.2012 16:35

Ответ: C3D Engine
 
Поднял на 20% FPS - это без Frustum. Запилил тач в андроиде. Сделал нормальный шрифт.
Осталось, нормальный фрустум, конвертирование текстур прям при экспорте из макса. Проверить оптимизации, сделать нормальную доку, вытащить все в DLL, мастер для Eclipse, Visual Studio, и можно будет пощупать.
После этого собираюсь запилить наконец-то тени, point и spot освещение, пока не решил per-vertex или per-pixel

moka 16.07.2012 17:11

Ответ: C3D Engine
 
Освещение ведь на шейдерах, делай оба варианта. С возможностью переключения.
Ведь если делать толково, то deferred, а там да, пиксельное сразу лучше.

HolyDel 16.07.2012 18:09

Ответ: C3D Engine
 
Цитата:

Поднял на 20% FPS
каким образом? если не секрет ))

pozitiffcat 16.07.2012 19:39

Ответ: C3D Engine
 
один раз за кадр множу projection matrix и view matrix, в шейдер передается modelMatrix и viewprojMatrix, и множится в шейдере. Раньше у каждого объекта вычислялась modelview матрица ну и анимацию вынес в ГПУ

ABTOMAT 16.07.2012 20:54

Ответ: C3D Engine
 
Неплохо!

HolyDel 16.07.2012 20:59

Ответ: C3D Engine
 
непробывал множить матрицы на цпу, а в шейдере не множить матрицы вообще? этож мобилка, там немного шейдерных процессоров.

pozitiffcat 17.07.2012 09:13

Ответ: C3D Engine
 
гпу всегда быстрее цпу. Тем более прирост на лицо

jimon 17.07.2012 12:07

Ответ: C3D Engine
 
Цитата:

Сообщение от pozitiffcat (Сообщение 233086)
гпу всегда быстрее цпу. Тем более прирост на лицо

на мобильниках зачастую скелетка быстрее на цпу + neon, чем на гпу, потому что гпу крутится на низких частотах (~100-400 мгц) и у него всего 2-4 ядра, когда цпу под 1+ ггц работает

ps. еще memcpy через neon быстрее чем обычный :crazy:

HolyDel 17.07.2012 12:10

Ответ: C3D Engine
 
Цитата:

Тем более прирост на лицо
т.е. я правильно понимаю, что считать одну матрицу на цпу, и передавать ее на объект дороже чем передавать две матрицы на объект и считать их на мобильном гпу для КАЖДОЙ вершины?

pozitiffcat 17.07.2012 13:06

Ответ: C3D Engine
 
Ну у меня прирост в производительности дало на гигогерцовом cortexA8 проце и на 600 мегагерцовом тоже.
PS. вершин у каждой модели в среднем 1000

pozitiffcat 17.07.2012 14:28

Ответ: C3D Engine
 
Добавил файловые системы - дисковую и zip

HolyDel 17.07.2012 20:06

Ответ: C3D Engine
 
файлы советую сделать подмапленными. где тут была статья джимона. дает прирост в 15% по скорости. + ненадо создавать буфера.


Часовой пояс GMT +4, время: 13:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot