Перейти к содержанию
Fire Monkey от А до Я
  • 0

Подскажите, Почему у меня не освобождается память при выполнении 3D переворота контекста 2D формы


aleksandrguru

Вопрос

Опубликовано

Пытаюсь сделать форму по примеру ControlsDemo, как только по батону кликаю то все черный экран приложение работает скрина нет, копировал все с примера

function TControl.MakeScreenshot: TBitmap;
var
  SceneScale: Single;
begin
  if Scene <> nil then  ///// тут выскакивает ошибка
    SceneScale := Scene.GetSceneScale
  else

unit FMX.Controls;

Update 1:

Все нашел невнимательно смотрел ControlRoot

Update 2:

Теперь у меня скрин вместо программы))

// FreeAndNil(FViewport); несработало
FViewport.DisposeOf;  работает два раза потом живой скрин работает не начто не реагирует

как уничтожить его правильно??

Update 3:

Нашел ответ на форуме

FViewport.Parent:= nil;
FViewport.Free;

Update 4:

Пример заработал но память растет с каждым выполнение и фактически не очищается, испробовал все варианты но ничего не выходит

Рекомендуемые сообщения

  • 0
Опубликовано

пробовал оперативка не очищается

Update 1:

все перепробовал не помогает нечего как решить проблему , хотел добавить 3d в программу

вот код полностью

procedure TForm1.SwitchTo3D;
var
  LImg: TImage;
begin
  { Create 3D viewport and layer }
  FViewport := TViewport3D.Create(Self);
  FViewport.Parent := Self;
  FViewport.Align := TAlignLayout.Client;
  FViewport.Color := claNull;
  FContainer := TLayer3D.Create(Self);
  FContainer.Parent := FViewport;
  FContainer.Projection := TProjection.Screen;
  FContainer.Align := TAlignLayout.Client;
  LImg := TImage.Create(Self);
  LImg.Align := TAlignLayout.Client;
  LImg.Bitmap.Assign(ControlRoot.MakeScreenshot);
  LImg.Margins := ControlRoot.Margins;
  LImg.Parent := FContainer;
  ControlRoot.Visible := False;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
   TButton(Sender).Enabled := false;
   SwitchTo3D;

  if Assigned(FContainer) then
  begin
    TAnimator.AnimateFloat(FContainer, 'Position.Y', 500, 1);
    TAnimator.AnimateFloatDelay(FContainer, 'Position.Y', 0, 1, 1);
    TAnimator.AnimateFloatWait(FContainer, 'RotationAngle.Y', 360, 2, TAnimationType.InOut, TInterpolationType.Back);
  end;
   SwitchTo2D;
   TButton(Sender).Enabled := true;
end;



procedure TForm1.SwitchTo2D;
var
LImg: TImage;
begin
  TRY
  FViewport.DisposeOf;
  FViewport.Parent:= nil;
  FViewport.Free;

  FINALLY
  END;
  ControlRoot.Visible := True;
end;

Update 2:

Всего нужно уничтожить объект и очистить память не пойму почему не работает

может в манифесте разрешения какие нужны??

вот проект

test.zip

  • 0
  • Администраторы
Опубликовано

Какая платформа?

 

Если iOS или Android. Вы держите ссылки на FContainer и FViewport в форме,

var
  Form15: TForm15;
  FViewport:TViewport3D;
  FContainer:TLayer3D; 

что не дает уничтожить FViewport, так как он в чилдах держит ссылку на FContainer.

procedure TForm15.SwitchTo2D;
var
LImg: TImage;
begin
  TRY
 // FViewport.DisposeOf;
    FViewport.Parent:= nil;
    FViewport.Free; // Не будет удален FViewport, так как RefCount = 1
    FContainer.Parent:= nil;
    FContainer.Free; // Не будет удален FContainer, так как RefCount = 2
  FINALLY
  END;
  ControlRoot.Visible := True;
end;
  • 0
Опубликовано
type
  TForm15 = class(TForm)
    MultiView1: TMultiView;
    ControlRoot: TLayout;
    Button1: TButton;
    Expander1: TExpander;

    procedure Button1Click(Sender: TObject);


  private
     FViewport:TViewport3D ;
     FContainer:TLayer3D;
     procedure SwitchTo2D;
     procedure SwitchTo3D;
  public
    { Public declarations }

  end;

как в примере 

  • 0
  • Администраторы
Опубликовано

Прочитайте, пожалуйста, эти темы. И я думаю вы сами сможете ответить на свой вопрос:

  • 0
Опубликовано

да дело не в уничтожение я читал эти стать другие объекты прекрасно уничтожаются и память очищается , если использовать примеры как в статьях то форма перестает работать , значит там есть ссылки на форму или на объекты которые на форме))

я просто не вижу почему я не могу уничтожить FViewport он не связан с формой никак, я только лишь делаю скриншот формы

 

 

 

Project14_2015-01-29.zip

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...