Thema: Delphi Reihenfolge OpenGl

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Reihenfolge OpenGl

  Alt 9. Jun 2008, 00:31
Habe da ne frage was die initialisierung und funktion von OpenGl in dieser Reihenfolge angeht

Anwendung übergibt nur das Handle eines Panel als Beispiel.
Dieses wird an eine DLL übergeben welche vorher OpenGl initialisiert
und dann das Panel zu Zeichenfläsche für OpenGl funktionsfähig macht (machen soll).

Diese DLL läd dann ein OpenGl Plugin welches dann Daten zum Rendern zur verfügung
gestellt bekommt um seine Visualisierung anzuzeigen.

Meine Frage deshalb funktioniert das überhaupt ?
Bekomme hier immer den gleichen Fehler Access Violation ntdll.dll kann da auch nichts debugen
oder an den Fehler etwas ändern da er von den in PowerBasic geschriebenen Plugins kommt.


Das ganze läuft so ab!
Anwendung schickt das Handle von Panel und weist es
BB_VisDataThread.Handle zu.

Mit diesen wird nun das Panel OpenGl fähig gemacht. (sollte zumindest)
Anschließend wird die Message BBP_CREATE gesendet welche Titel,Version usw.. zurückgibt.
Ist das erfolgreich schicke ich dem Plugin die neuen Daten.
Das ParentWindow Handle h_DC usw..

Delphi-Quellcode:
    if (BassBoxInfo^.Init) then
    begin
      // OpenGL-Funtionen initialisieren
      if not InitOpenGL then
        Halt;

      // Gerätekontext holen
      h_DC := GetDC(BB_VisDataThread.Handle);
      // Renderkontext erstellen (32 Bit Farbtiefe, 24 Bit Tiefenpuffer, Doublebuffering)
      h_RC := CreateRenderingContext(h_DC, [opDoubleBuffered], 32, 32, 0, 0, 0, 0);
      // Erstellten Renderkontext aktivieren
      ActivateRenderingContext(h_DC, h_RC, true);

      BassBoxInfo^.Msg := BBP_CREATE;
      if BBP_Plugin(BassBoxInfo^) = BBP_SUCCESS then
      begin

        BassBoxInfo^.Msg := BBP_INIT;
        BassBoxInfo^.ParentWindow := BB_VisDataThread.Handle;
        BassBoxInfo^.DC := h_DC;
        BassBoxInfo^.rc := h_RC;
        BassBoxInfo^.BackARGB := 0; //SK_AEROCOLOR()
        BassBoxInfo^.FFTsize := 256;
      end;

      if BBP_Plugin(BassBoxInfo^) = BBP_SUCCESS then
      begin

Bei zwei Plugins funktioniert das..
Hier eins davon die BBP_INIT.

Code:
    CASE %BBP_INIT
         '// Do your code initialisation there

         CALL BBP_SplitColorARGB(BBP.BackARGB, A?, R?, G?, B?)
         Alpha! = A? + 1: Red! = R? + 1: Green! = G? + 1: Blue! = B? + 1
         Call glClearColor(red! / 256, green! / 256, blue! / 256, alpha! / 256)

         CALL glEnable(%GL_DEPTH_TEST)
         CALL glShadeModel(%GL_SMOOTH)

         Call ColorInit
das ist alles was ausgeführt wird und mit OpenGl bei der initialisierung zu tun hat.
Visualisiert wird nix da ich die Message BBP_RENDER noch nicht geschickt habe.
Wird die geschickt dann habe ich ein schwarzes Panel sonst aber nix.

Die anderen welche nicht gehen.
Auch ein Beispiel!

Code:
    CASE %BBP_INIT
         '// Do your code initialisation there
         Call ColorInit

         CALL BBP_SplitColorARGB(BBP.BackARGB, A?, R?, G?, B?)
         Alpha! = A? + 1: Red! = R? + 1: Green! = G? + 1: Blue! = B? + 1
         Call glClearColor(red! / 256, green! / 256, blue! / 256, alpha! / 256)

         CALL glShadeModel(%GL_SMOOTH)
         Call glClearDepth(1#)        '// Depth Buffer Setup
         CALL glBlendFunc(%GL_ONE, %GL_ONE)
         CALL glDepthFunc(%GL_LESS)   '// The Type Of Depth Test To Do
         CALL glDisable(%GL_LIGHTING)
         CALL glEnable(%GL_BLEND)
         CALL glAlphaFunc(%GL_GREATER, 0.01)
         CALL glHint(%GL_PERSPECTIVE_CORRECTION_HINT, %GL_NICEST)

         CALL glEnable(%GL_TEXTURE_2D)

         Randomize GetTickCount()

         mt(1).FullName = $BBP_PLUGIN_FOLDER + "Texture\Flare0.jpg": mt(1).ID = 1: mt(1).Square = 0
         mt(2).FullName = $BBP_PLUGIN_FOLDER + "Texture\BassBox.png": mt(2).ID = 2: mt(2).Square = 0
         Call MakeMutipleTexture(ByVal VarPtr(mt(LBound(mt))), UBound(mt) - LBound(mt) + 1)

         'UseFont.fontName = "Arial"
         'UseFont.fontHeight = 10
         'UseFont.fontWeight = %FW_BOLD
         'CALL BBP_BuildGLfont(BBP.DC, UseFont) ' Build OpenGL font for our OpenGL window

         Call MakeColorLUT
         GoSub ResetCXCYCZ
funktionieren überhaupt nicht.
Sobald ich die Initialisiere kommt der schon genannte Fehler..
Nun meine frage ist das mit so einer ablauffolge überhaupt möglich da was auf die reihe zu bekommen ?

Habe leider kein PowerBasic so das ich das selbst mal debugen könnte was da so abgeht.

gruss Emil

PS:Wenn's generell nicht geht kann ich mir die Arbeit sparen.
  Mit Zitat antworten Zitat