AGB  ·  Datenschutz  ·  Impressum  







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

Reihenfolge OpenGl

Ein Thema von EWeiss · begonnen am 9. Jun 2008 · letzter Beitrag vom 10. Jun 2008
 
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
 


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 14:09 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