Войти
Вело-изобретателиФорумMXEngine - движок для VB6

MXEngine & dx_vb (23 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 122 23 24 25 26 Следующая »
#330
20:25, 16 мар. 2012

max255
> или общий с контейнером object и указанием на тип шейдера?
Object, Variant - нежелательно, тормозит.
max255
> нужно ли буферизировать bool и integer константы?
Какова принципиальная разница между bool и integer константами и обычными float? Никакой.
max255
> А если ресет по прерыванию... Скажем Alt-Tab...
Когда-то очень давно, я ещё не знал про Reset девайса :), справился с проблемой удалением DoEvents, помогло.


#331
21:05, 16 мар. 2012

Mikle
> Object, Variant - нежелательно, тормозит.
Проводил тесты... Вполне существенно... Одна выборка на 0,0000001 сек больше чем присвоение указателя своему типу... А если там 1000 выборок? ....

Mikle
> Никакой.
Предлагаешь сделать один буфер под все константы?

'размеры в байтах
[------4096f------|------64l------|------16b------]
Для записи, к примеру матрицы, в буфер использовал MemCopy... Провел тесты скорости с обычным присвоением в цикле(a=b), оказалась MemCopy - тормоз...
Как я понял его стоит использовать только на массивных объемах памяти...

Mikle
> удалением DoEvents
Наглухо вешает окно... Ведь все кнопочки и события через DoEvents и работают...

П.С. Провел расчеты... При старте двига и больших размерах кэша менеджеров сразу хавается 1-2мб памяти(зависит от кэша), хотя не загружен не один ресурс...
Попробую решить эту проблему "умным" контролем размера кэша... Т.Е. размер кэша менеджера увеличивается только при загрузке, и уменьшается(если расурс в конце памяти кэша).

#332
21:37, 16 мар. 2012

max255
> Наглухо вешает окно... Ведь все кнопочки и события через DoEvents и работают...
Я тогда опрашивал через GetAsyncKeyState. Но я не предлагаю этого, просто о том, что сворачивание полноэкранного режима мимо событий пройти не должно.

#333
21:47, 16 мар. 2012

Mikle
> Я тогда опрашивал через GetAsyncKeyState.
В смысле - кнопочки окна... Для двига есть MXInput... Там как раз все через GetKeyState.

Mikle
> сворачивание полноэкранного режима мимо событий пройти не должно.
Есть еще клик на втором мониторе, Ctrl-Alt-Del... Как то давно так из Most Wanted-а выходил что-бы не штрафовали :).
Способов много... Вывод один - вылет программы, что честно поднадоело в некоторых казуалках...

#334
21:53, 16 мар. 2012

max255
> В смысле - кнопочки окна...
Это да, но, повторю, я не предлагаю этого.
max255
> Есть еще клик на втором мониторе, Ctrl-Alt-Del...
Есть, конечно, я страховался от случайностей, не более того.

#335
18:13, 19 мар. 2012

По каким параметрам логичнее сравнивать текстуры в менеджере?
Например при попытке их повторной загрузки? Вот полный дескриптор:

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

#336
20:21, 19 мар. 2012

Все, кроме Name (раз не используется) и isTransform (потому, что есть SrcSize и TexSize). Возможно кроме Group, не понял, что это.

#337
20:29, 19 мар. 2012

Mikle
Группа использования... Собственно при загрузке можно назначить текстурам группу, а потом, к примеру всю эту группу удалить, выгрузить, ресайзить...

П.С. шейдерный менеджер готов... Доступ к константам получился как доступ к массивам класса:

ShaderManager.VertexConstF(25) = Vec4(1,2,3,4)
ShaderManager.VertexConstF(25).X = 10

#338
19:30, 22 мар. 2012

Перехожу к новой архитектуре движка, каждый нижестоящий обьект использует вышестоящий.

'[------------------Render----------------------------]
'[------Render2D----------------][------Render3D------]
'[Sprite][FontManager][---GUI---][....................]
'        [Font]       [Controls]
в результате в некоторых обьектах есть вложенные обьекты... Например Render инкапсулирует менеджер шейдеров и текстур.
Теперь удалить обьект просто так не получится... Для начала нужно, что-бы вложенные обьекты удалили ссылки на родителя... Это приведет к появлению новой функции:
Object.Relase()

#339
19:37, 22 мар. 2012

max255
> Это приведет к появлению новой функции:
> Object.Relase()
А если просто в Class_Terminate вписать всё содержимое Object.Release?

#340
21:23, 22 мар. 2012

Mikle
> А если просто в Class_Terminate вписать всё содержимое Object.Release?
В том то и дело... Class_Terminate вызовется только при удалении всех указателей... А если другие(находятся в вложенных классах) не удалены то Class_Terminate не сработает...

#341
21:40, 22 мар. 2012

Всё верно. С трудом представляю ситуацию, когда нужно будет уничтожить все вложенные объекты, не уничтожая все ссылки на объект-контейнер, то есть не уничтожая сам объект-контейнер.

#342
22:38, 22 мар. 2012

К примеру:

   Render{
      Textures{
         *Render;
      }

      Shaders{
         *Render;
      }
   }

Я хочу уничтожить Render. Делаю

Set  Render = Nothing
Но Class_Terminate обьекта не выполнится, а уменьшится рефкаунтер т.к. указатели лежат в текстурах и шейдерах...
Но если убить объекты контейнера отдельной фунцией...

#343
23:00, 22 мар. 2012

У тебя объекты хранят ссылки на собственный контейнер???

#344
23:27, 22 мар. 2012

Mikle
Да... Контейнер при запуске создает обьекты... А как им взаимодействовать между собой? Можно им прямо передавать все что им нужно(device, caps...) но это костыль имхо...

Страницы: 122 23 24 25 26 Следующая »
Вело-изобретателиФорумMXEngine - движок для VB6

Тема в архиве.