Сообщения на форуме пользователя Andrey (22 стр.)
Время расчета скелетной анимации. | 5 апр. 2012 | 10:26 | #1 |
---|
Я бы QPC использовал все таки он точнее.
Криво интерполируются нормали в шейдере | 5 апр. 2012 | 10:23 | #22 |
---|
> D3DXMatrixPerspectiveFovRH(
> mProj,
> (float)D3DX_PI * _FOV / 180,
> _screenWidth / _screenHeight,
> _zNear,
> _zFar);
>
Сомнительно не на всякий случай напишу, если _screenWidth и _screenHeight не float, то следует сделать так:
D3DXMatrixPerspectiveFovRH( mProj, (float)D3DX_PI * _FOV / 180, static_cast<float>(_screenWidth) / _screenHeight, _zNear, _zFar);
Kernel-mode драйвер. Как прочитать данные с девайса? | 4 апр. 2012 | 17:04 | #14 |
---|
>RtlMoveMemory
а memove разве нельзя, как интристика быстрее может будет.
Косметика на OpenGL | 4 апр. 2012 | 9:44 | #1 |
---|
> Может есть идеи по алгоритму в целом? Мне кажется, что без адских циклов тут
> не обойтись...
Если тебе производительность не важна то залочь текстуру и сделай реализацию на CPU
glBlendFuncSeparate вылетает на OpenGL ES 2.0 | 3 апр. 2012 | 11:45 | #21 |
---|
>java не понимает. Функции красным подчеркивает :(
убогий недоязык...
>>innuendo
>> подозрения падают на стык java + gles
>Есть ли идеи как можно обойти?
>хм... Может мой телефон не поддерживает какое-то нужное расширение?
напиши функцию на C++ для проверки assert что я написал в 9 посте. Или как-то в логе/отладке попробуй на java проверить что функция имеет не нулевой указатель, я не в курсах как на этом отстое это делать. Расширения по ходу дела тут не причем. Судя по списку расширений(GL_OES_get_program_binary и т.д. ) твой аппарат частично держит OpenGL 3.0 и точно по идее должен держать glBlendFuncSeparate.
И еще упрости код оставь только инициализации через EGL, и отрисовку:
glClear(...); glBlendFuncSeparate(...); eglSwapBuffers(...);
OpenGL vs Direct3D | 28 мар. 2012 | 18:04 | #350 |
---|
glBlendFuncSeparate вылетает на OpenGL ES 2.0 | 26 мар. 2012 | 20:42 | #9 |
---|
assert(glBlendFuncSeparate && "NULL Pointer") assert(glBlendEquation && "NULL Pointer") assert(glBlendEquationSeparate&& "NULL Pointer")
VBO glVertexPointer | 26 мар. 2012 | 20:35 | #49 |
---|
судя по времени выполнения мне кажется это просто сохранение текущего id внутри реализации драйвера.
glBlendFuncSeparate вылетает на OpenGL ES 2.0 | 26 мар. 2012 | 18:32 | #3 |
---|
>glBlendFunc работает хорошо.
естественно...
>Читал что в OpenGL 2.0 эта функция встроена.
OpenGL ES 2.0 и OpenGL 2.0 всего лишь похожи по синтаксису. Но это не значит что порт с PC пойдет сразу на мобильную платформу и наоборот. Читай спецификацию по OpenGL ES 2.0, возможно нету там такого расширения либо его нужно инициализировать отдельно, чего наверное ты и не сделал.
VBO glVertexPointer | 26 мар. 2012 | 18:24 | #47 |
---|
> я так понимаю - и отвязка после вызова glDraw ?
ну вряд ли. зачем отвязывать буфер ? поставится новый, отвяжется старый.
RPG
> И как, намного VAO быстрее VBO?
ну если у тебя много установок поинтеров то считай для стандартной вершины normal + texcoord + vertex экономишь 6 вызовов(3 glVertexAttribPointer и 3 glEnableVertexAttribArray)
BoundsChecker не дружит с DirectX ? фэйлится CreateDevice -2005530518 | 22 мар. 2012 | 15:35 | #1 |
---|
А под DX Debug ?
OpenGL vs Direct3D | 22 мар. 2012 | 11:31 | #272 |
---|
> Чем тебе не нравится 90FPS?
DIP много, Сцена слабая в кадре меньше десяти объектов.
>Каждый инстанс считаю за батч, дипов там порядка сотни.
Кусты за 10 dip максимум все можно все вывести.
а вот тебе и твои порядка сотни DIP:
BATCH11274 я так понимаю это "порядка сотни"? или я неправильно понял? наверняка это подсчет glDrawArrays,glDrawElements
Вот с тенями, тут вообще 15000, кстати глючат они, это пожалуй единственное что бросается в глаза. А так картинка красивая но арт подкачал, ну тут не твоя вина.
Кстати вывел бы число поликов в кадре. я думаю там 50000 не больше, заодно число установленных буферов, шейдеров текстур рендер таргетов.
Если ты добавишь им анимацию то подсядет еще FPS, т.е. нормальной организации сцены у тебя никакой нету. Далее, отключаю анизотропку(так -же смотрю на пол как на первом скрине) FPS растет до 120. Ну все правильно любуемся анизотропной фильтрацией для всех дальних объектов для которых она нафиг не нужна. Итого пиксельный конвейер у тебя загружен по самое нибалуйся из-за отсутствия опыта проектирования движков, далее постпроцесс и тени убивают производительность до 20 FPS....
Кстати чего грузится твоя сцена так долго? переборщил c STL и частыми выделениями памяти? неэффективный формат моделей/загрузчик? зачем тебе там std::string кстати?
Ну как и большинство графических программистов бьющих в грудь и кричащих о совершенном АПИ, нарисуют грубо говоря кубик на сцене с шейдерами и эффектами. Причем причем больше постпроцесса воткнуть ибо большинство этих эффектов это проще сделать(ну с dof там понятно чуток сложнее) и сразу дает красивую картинку.
Серьезную загруженную сложную сцену я еще ни у кого не видел.
>как это влияет на зависания рейдж?
>но игра работает стабильно на всём железе, которое поддерживает OpenGL 3.2, и
Это будет стабильно работать неужели не понятно?
>используются все те же технологии, которые используются в рейдж (UBO, TBO, geometry_shaders, >instancing, texture_rg, float/int, texture_arrays, множественная линковка и т.д. и т.п.).
Ты используешь UBO не для всех шейдеров есть glUniform* и в 1 шейдере видел UBO блок.
>Что виснет у кармака и почему по глючному рейджу делают выводы об OpenGL?
А теперь при твоем подходе загрузи сцену уровня Rage в свой движок и догадайся что будет дальше.
У тебя 1 поток, нету стриминга данных, нету большого числа сложных объектов. Код проще, объем данных меньше меньше комбинаций вызовов к ядрам CPU дисковой системе оперативной памяти, видеокарте т.е. грубо что то типа этого: поток1->синхронизация...->потокn/ RAM/VRAM/CPU1/CPU2/OpenGL Call и т.д.
У тебя используется современный OpenGL в коде Rage ест еще устаревшие функции, т.е. зайдействована комбинация старого кода и нового.
К примеру там есть хлам glColor4f, glShadeModel у тебя этого нету. Ну и в Rage есть wglShareList, это говорит уже о многопоточной работе с OpenGL надеюсь, ты понимаешь что Rage'у d разы проще снести крышу графическим дровам.
Кстати музыка классная, и да, OpenAL работает естественно.
Мое мнение виноваты дрова от AMD. Но их поправили я думаю на ATI 5670 пойдет нормально.
OpenGL vs Direct3D | 22 мар. 2012 | 0:13 | #227 |
---|

По поводу твоего проекта сравниваемого с Rage, значит отключаю все эффекты оставляю только анизотропку.
Смотрю в пол. В кадре 3 куста, 2 полика ландшафта и машинка. Получаю 90 FPS на ATI 5670. Объясни мне как ты умудрился так движок написать что он тормозит на такой сцене и да еще 600 DIP в кадре!!! И ты это сравниваешь с уровнем Rage ??
Если не в пол смотреть там вообще за 10000 DIP переваливает. Ты по 1 кустику риcуешь ?
Где на твое примитивнейшей сцене. лям геометрии в кадре, скелетная анимация, сложные сцены частиц, огромный ландшафт с эффективным стриммингом с диска, сотни мегабайт текстур, тысячи объектов в кадре анимация деревьев, травы ???
Твоя сцена это кубик с сложным освещением и пост эффектами. Тут все кравиво, не спорю. Но это кубик! и это врядли где будет бажить OpenGL.
Zefick
+100 за 183 пост.
OpenGL VBO glDrawElements со смещением | 20 мар. 2012 | 11:36 | #1 |
---|
glDrawElements(GL_TRIANGLE_LIST, 6, GL_UNSIGNED_SHORT, 0); .. glDrawElements(GL_TRIANGLE_LIST, 6, GL_UNSIGNED_SHORT, sizeof(unsigned short) * 6); .. glDrawElements(GL_TRIANGLE_LIST, 6, GL_UNSIGNED_SHORT, sizeof(unsigned short) * 12); .. glDrawElements(GL_TRIANGLE_LIST, 6, GL_UNSIGNED_SHORT, sizeof(unsigned short) * 18); |
Разбор Id Tech 4, Doom 3 Source | 20 мар. 2012 | 11:32 | #229 |
---|
>чем лучше? когда будет удалён d3dDevice?
Меньше дерганий для выделения памяти, к тому-же обработка исключения от bad_alloc, фрагментация и т.д., проще код.
Для удаления зовем ему некий написанный метод D3DDevice->Release(); или нечто подобное в конце работы.