Redéfinition des paramètres de rendu OpenGL

De RAD Studio
Aller à : navigation, rechercher

Remonter à Guide des applications FireMonkey


Pour accroître les performances des applications graphiques, vous pouvez redéfinir les paramètres de rendu OpenGL sur les plates-formes iOS et Android.

Par exemple, si vous n'utilisez pas de modèles 3D, vous pouvez désactiver le tampon profondeur. De même, si vous n'utilisez pas les chemins remplis ou d'autres formes de canevas vectoriel, il est préférable de désactiver le tampon gabarit. Si vous privilégiez les performances élevées plutôt que la qualité visuelle, vous pouvez utiliser une profondeur de couleur 16 bits plutôt que 24 bits ou 32 bits.

Pour redéfinir les paramètres OpenGL, suivez les étapes ci-après :

Delphi:

  1. Ajoutez FMX.Platform.pas à la liste USES dans votre unité.
  2. Ecrivez la procédure de configuration du rendu :
    procedure RenderingSetupCallback(const Sender, Context: TObject; var ColorBits, DepthBits: Integer;
    var Stencil: Boolean; var Multisamples: Integer);
    begin
        // Override OpenGL rendering setup to use custom values.
        ColorBits := 16; // default is 24
        DepthBits := 0; // default is 24
        Stencil := False; // default is True
        Multisamples := 0; // default depends on TForm.Quality or TForm3D.Multisample
    end;
    
  3. Ecrivez la procédure d'enregistrement :
    procedure RegisterRenderingSetup;
    var
        SetupService: IFMXRenderingSetupService;
    begin
        if TPlatformServices.Current.SupportsPlatformService(IFMXRenderingSetupService, IInterface(SetupService)) then
        SetupService.Subscribe(RenderingSetupCallback);
        // There is also SetupService.Unsubscribe, which removes the hook.
    end;
    
  4. Appelez la méthode RegisterRenderingSetup dans la section initialization de l'unité.


C++:

  1. Ecrivez la procédure de rendu et d'enregistrement :
    class TCppRenderingSetupCallback : public TCppInterfacedObject<TRenderingSetupCallback>
    {
    public:
      void __fastcall Invoke(System::TObject* const Sender, System::TObject* const Context, int &ColorBits,
    						 int &DepthBits, bool &Stencil, int &Multisamples)
      {
    	// Override OpenGL rendering setup to use custom values.
    	ColorBits = 16; // default is 24
    	DepthBits = 0; // default is 24
    	Stencil = false; // default is true
    	Multisamples = 0; // default depends on TForm.Quality or TForm3D.Multisample
      }
    }; 
    
    void RegisterRenderingSetup()
    {
      _di_IFMXRenderingSetupService SetupService;
      if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXRenderingSetupService), &SetupService))
      {
    	SetupService->Subscribe(new TCppRenderingSetupCallback());
      }
    }
    
  2. La fonction RegisterRenderingSetup() doit être invoquée dans FMXmain, avant l'appel à Application->Initialize, comme suit :
    extern "C" int FMXmain()
    {
        RegisterRenderingSetup();
    	try
    	{
    		Application->Initialize();
    		Application->CreateForm(__classid(TForm8), &Form8);
    		Application->Run();
    

    Voir aussi