max255
> или общий с контейнером object и указанием на тип шейдера?
Object, Variant - нежелательно, тормозит.
max255
> нужно ли буферизировать bool и integer константы?
Какова принципиальная разница между bool и integer константами и обычными float? Никакой.
max255
> А если ресет по прерыванию... Скажем Alt-Tab...
Когда-то очень давно, я ещё не знал про Reset девайса :), справился с проблемой удалением DoEvents, помогло.
Mikle
> Object, Variant - нежелательно, тормозит.
Проводил тесты... Вполне существенно... Одна выборка на 0,0000001 сек больше чем присвоение указателя своему типу... А если там 1000 выборок? ....
Mikle
> Никакой.
Предлагаешь сделать один буфер под все константы?
'размеры в байтах [------4096f------|------64l------|------16b------]
Для записи, к примеру матрицы, в буфер использовал MemCopy... Провел тесты скорости с обычным присвоением в цикле(a=b), оказалась MemCopy - тормоз...
Как я понял его стоит использовать только на массивных объемах памяти...
Mikle
> удалением DoEvents
Наглухо вешает окно... Ведь все кнопочки и события через DoEvents и работают...
П.С. Провел расчеты... При старте двига и больших размерах кэша менеджеров сразу хавается 1-2мб памяти(зависит от кэша), хотя не загружен не один ресурс...
Попробую решить эту проблему "умным" контролем размера кэша... Т.Е. размер кэша менеджера увеличивается только при загрузке, и уменьшается(если расурс в конце памяти кэша).
max255
> Наглухо вешает окно... Ведь все кнопочки и события через DoEvents и работают...
Я тогда опрашивал через GetAsyncKeyState. Но я не предлагаю этого, просто о том, что сворачивание полноэкранного режима мимо событий пройти не должно.
Mikle
> Я тогда опрашивал через GetAsyncKeyState.
В смысле - кнопочки окна... Для двига есть MXInput... Там как раз все через GetKeyState.
Mikle
> сворачивание полноэкранного режима мимо событий пройти не должно.
Есть еще клик на втором мониторе, Ctrl-Alt-Del... Как то давно так из Most Wanted-а выходил что-бы не штрафовали :).
Способов много... Вывод один - вылет программы, что честно поднадоело в некоторых казуалках...
max255
> В смысле - кнопочки окна...
Это да, но, повторю, я не предлагаю этого.
max255
> Есть еще клик на втором мониторе, Ctrl-Alt-Del...
Есть, конечно, я страховался от случайностей, не более того.
По каким параметрам логичнее сравнивать текстуры в менеджере?
Например при попытке их повторной загрузки? Вот полный дескриптор:
Public Type MX_TEXTURE_DESC MipLevels As Long ColorKey As Long Pool As D3DPOOL Usage As D3DUSAGE Format As D3DFORMAT SrcSize As D3DVECTOR2L 'размер который хотел пользователь TexSize As D3DVECTOR2L 'реальный размер File As String Name As String 'не учитывается менеджером(используется только для поиска текстур "высшими" интерфейсами) isTransform As Boolean 'флаг - текстура растянута до POW2 Group As Long 'группа использования MipFilter As D3DX_FILTER TexFilter As D3DX_FILTER End Type
Все, кроме Name (раз не используется) и isTransform (потому, что есть SrcSize и TexSize). Возможно кроме Group, не понял, что это.
Mikle
Группа использования... Собственно при загрузке можно назначить текстурам группу, а потом, к примеру всю эту группу удалить, выгрузить, ресайзить...
П.С. шейдерный менеджер готов... Доступ к константам получился как доступ к массивам класса:
ShaderManager.VertexConstF(25) = Vec4(1,2,3,4) ShaderManager.VertexConstF(25).X = 10
Перехожу к новой архитектуре движка, каждый нижестоящий обьект использует вышестоящий.
'[------------------Render----------------------------] '[------Render2D----------------][------Render3D------] '[Sprite][FontManager][---GUI---][....................] ' [Font] [Controls]
в результате в некоторых обьектах есть вложенные обьекты... Например Render инкапсулирует менеджер шейдеров и текстур.
Теперь удалить обьект просто так не получится... Для начала нужно, что-бы вложенные обьекты удалили ссылки на родителя... Это приведет к появлению новой функции:
Object.Relase()
max255
> Это приведет к появлению новой функции:
> Object.Relase()
А если просто в Class_Terminate вписать всё содержимое Object.Release?
Mikle
> А если просто в Class_Terminate вписать всё содержимое Object.Release?
В том то и дело... Class_Terminate вызовется только при удалении всех указателей... А если другие(находятся в вложенных классах) не удалены то Class_Terminate не сработает...
Всё верно. С трудом представляю ситуацию, когда нужно будет уничтожить все вложенные объекты, не уничтожая все ссылки на объект-контейнер, то есть не уничтожая сам объект-контейнер.
К примеру:
Render{
Textures{
*Render;
}
Shaders{
*Render;
}
}Я хочу уничтожить Render. Делаю
Set Render = Nothing
Но Class_Terminate обьекта не выполнится, а уменьшится рефкаунтер т.к. указатели лежат в текстурах и шейдерах...
Но если убить объекты контейнера отдельной фунцией...
У тебя объекты хранят ссылки на собственный контейнер???
Mikle
Да... Контейнер при запуске создает обьекты... А как им взаимодействовать между собой? Можно им прямо передавать все что им нужно(device, caps...) но это костыль имхо...
Тема в архиве.