Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

GLScene: переключение режимов рендеринга [Delphi, Windows]


miek ©   (2004-08-20 00:05:00) 

Как менять установки рендеринга на лету? Мне нужно переключать режимы типа "high detail/low detail". Вот такая последовательность (см ниже) то работает, то падает с ошибкой Out of Memory.

 glsceneviewer1.Visible:= false;
 case setup.detail of
   low:
     begin
       glcadencer1.Enabled:= false;
       glscene1.BeginUpdate;
       gllabel6.Caption:= 'DETAIL LEVEL: LOW';
       glsceneviewer1.Enabled:= false;
       glsceneviewer1.Buffer.FogEnvironment.FogDistance:= fdEyePlane;
       glshadowplane1.Visible:= false;
       glsceneviewer1.Buffer.ColorDepth:= cd16bits;
       glsceneviewer1.Buffer.DepthPrecision:= dp16bits;
       glsceneviewer1.Buffer.AntiAliasing:= aanone;
       glsceneviewer1.Buffer.ContextOptions:=
         glsceneviewer1.Buffer.ContextOptions+[roNoColorBufferClear];
       glsceneviewer1.RecreateWnd;
       glsceneviewer1.Enabled:= true;
       glscene1.EndUpdate;
       glcadencer1.Enabled:= true;
     end;
   high:
     begin
       glcadencer1.Enabled:= false;
       glscene1.BeginUpdate;
       gllabel6.Caption:= 'DETAIL LEVEL: HIGH';
       glsceneviewer1.Enabled:= false;
       glsceneviewer1.Buffer.FogEnvironment.FogDistance:= fdEyeRadial;
       glshadowplane1.Visible:= true;
       glsceneviewer1.Buffer.ColorDepth:= cd24bits;
       glsceneviewer1.Buffer.DepthPrecision:= dp32bits;
       glsceneviewer1.Buffer.AntiAliasing:= aadefault;
       glsceneviewer1.Buffer.ContextOptions:=
         glsceneviewer1.Buffer.ContextOptions-[roNoColorBufferClear];
       glsceneviewer1.RecreateWnd;
       glsceneviewer1.Enabled:= true;
       glscene1.EndUpdate;
       glcadencer1.Enabled:= true;
     end;
 end;
 glsceneviewer1.Visible:= true;


miek   (2004-08-20 22:05:00) [1]

Свят-свят! Пропал глюк-то. Таймер там в самом деле стоят, только он ничего опасного не делает.

>зачем glsceneviewer1.visible менять
Ну типа контрольного выстрела, не знал за что хвататься, вот и поставил.


DeadMeat   (2004-08-20 01:11:00) [2]

Хз... У меня нормально работает...
Поставил это в OnProgress и посмотрел в ProcessExplorer-е на количество занимаемой памяти и всяких открытых handle-ов - держится в определенных пределах, не увеличивается и не уменьшается.
Мож у тебя в другом месте ошибка? Таймер где какой стоит, асинхронный...
Или мож на изменение AntiAliasing твой карта реагирует не стандартно? У меня та он всегда отключен...

Кстати, а зачем glsceneviewer1.visible менять? Ведь RecreateWnd вроде делает тоже самое...

---
...Death Is Only The Begining...


Наверх

Титульная страница Поиск, карта сайта Написать письмо