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.