Überschreiben von OpenGL-Rendering-Parametern

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu FireMonkey-Anwendungshandbuch


Um die Leistung grafischer Anwendungen zu steigern, können Sie auf iOS- und Android-Plattformen die OpenGL-Rendering-Parameter überschreiben.

Wenn Sie beispielsweise keine 3D-Modelle verwenden, können Sie die Tiefenpuffer deaktivieren. Genauso können Sie gefahrlos den Schablonenpuffer deaktivieren, wenn Sie keine gefüllten Pfade oder andere Vektorenformen verwenden. Wenn Ihnen eine hohe Leistung wichtiger ist als visuelle Qualität, dann können Sie die 16-Bit-Farbtiefe anstelle der 24-Bit- oder 32-Bit-Farbtiefe verwenden.

Führen Sie zum Überschreiben der OpenGL-Parameter die folgenden Schritte aus:

Delphi:

  1. Fügen Sie der USES-Liste Ihrer Unit FMX.Platform.pas hinzu.
  2. Schreiben Sie die Prozedur für die Rendering-Konfiguration:
    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. Schreiben Sie die Registrierungsprozedur:
    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. Rufen Sie im initialization-Abschnitt der Unit RegisterRenderingSetup auf.


C++:

  1. Schreiben Sie die Prozedur für die Rendering-Konfiguration und die Registrierung:
    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. Die Funktion RegisterRenderingSetup() sollte in FMXmain vor dem Aufruf von Application->Initialize wie folgt aufgerufen werden:
    extern "C" int FMXmain()
    {
        RegisterRenderingSetup();
    	try
    	{
    		Application->Initialize();
    		Application->CreateForm(__classid(TForm8), &Form8);
    		Application->Run();
    

    Siehe auch