AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OpenGL Panel in Firemonkey

Ein Thema von Peter666 · begonnen am 20. Aug 2014 · letzter Beitrag vom 27. Aug 2014
Antwort Antwort
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

OpenGL Panel in Firemonkey

  Alt 20. Aug 2014, 14:53
Hi,

hat jemand eine Idee wie ich ein OpenGL Panel in einem Firemonkey Formular erstellen kann? Unter VCL reicht es ein TPanel Wincontrol zu erstellen und das Handle von da zu nehmen. Das geht ja unter FMX nicht und ich bräuchte das für Android, Mac und Windows.

Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: OpenGL Panel in Firemonkey

  Alt 20. Aug 2014, 15:10
Schau Dir mal die Beispiele hier an. Beim Demo TestBed Es wird per OpenGL(ES) auf dem Canvas eines Panels gezeichnet.

https://github.com/FMXExpress/box2d-firemonkey
Markus Kinzler
  Mit Zitat antworten Zitat
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#3

AW: OpenGL Panel in Firemonkey

  Alt 27. Aug 2014, 13:11
Sorry dass ich mich jetzt erst melde. Also unter Windows und Mac hab ich das recht leicht hinbekommen:
Code:
  FillChar(WindowClass, SizeOf(WindowClass), 0);
    WindowClass.Style := CS_HREDRAW or CS_VREDRAW;
    WindowClass.lpfnWndProc := @DefWindowProc;
    WindowClass.cbClsExtra := 0;
    WindowClass.cbWndExtra := 0;
    WindowClass.hInstance := hInstance;
    WindowClass.hCursor := LoadCursorW(0, PChar(IDC_ARROW));
    WindowClass.hbrBackground := GetStockObject(NULL_BRUSH);
    WindowClass.lpszMenuName := nil;
    WindowClass.lpszClassName := PChar('OpenGLWindow');
    if Winapi.Windows.RegisterClass(WindowClass) = 0 then
      RaiseLastOSError;
  end;
  FWnd := CreateWindowEx(0, WindowClass.lpszClassName, nil, WS_CHILDWINDOW, 0,
    0, 0, 0, GetDesktopWindow, 0, hInstance, nil);
  ShowWindow(FWnd, SW_HIDE);
bzw.

Code:
  FView := TNSView.Create;
  FView := TNSView.Wrap(FView.initWithFrame(MakeNSRect(0, 0, 0, 0)));
  FView.setHidden(true);
Verändert man die Größe der Komponente passe ich einfach das Subview an bzw. das Fenster. Ich glaube das macht der Mediaplayer in Firemonkey auch so.
Woran ich scheitere ist das selbe unter GLES zu machen. Theoretisch sollte ich doch durch einfaches Zeichnen mit GLES Kommandos unter Android und iOS ja auch etwas rendern können, oder?

Mein Code zum zeichnen schaut so aus:
Code:
procedure TForm1.DoRenderScene;
const
  vcolors: array [0 .. 11] of Single = (0.0, 1.0, 0.0, 0.5, 1.0, 0.0, 0.0, 0.5,
    0.0, 0.0, 1.0, 0.5);
var
  x, y: Single;
  i: integer;
  q3: array [0 .. 3] of record x, y, z: Single;
end;
begin
  FAngle := FAngle + 1;
{$IFDEF CPUARM}
  glEnableClientState(GL_VERTEX_ARRAY);
  for i := 0 to 2 do
  begin
    q3[i].x := cos((FAngle + 120 * i) * PI / 180);
    q3[i].y := sin((FAngle + 120 * i) * PI / 180);
    q3[i].z := 0;
  end;
  glVertexPointer(3, GL_FLOAT, 0, @q3[0]);
  glTexCoordPointer(4, GL_FLOAT, 0, @vcolors[0]);
  glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
  glDisableClientState(GL_VERTEX_ARRAY);
{$ELSE}
  glBegin(GL_TRIANGLES);
  for i := 0 to 2 do
  begin
    x := cos((FAngle + 120 * i) * PI / 180);
    y := sin((FAngle + 120 * i) * PI / 180);
    glVertex2F(x, y);
    glColor4F(vcolors[i * 4 + 0], vcolors[i * 4 + 1], vcolors[i * 4 + 2],
      vcolors[i * 4 + 3]);
  end;
  glEnd();
{$ENDIF}
  glFlush();
  // ---------------------------------------------------------------------------
end;
Peter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz