ich bin neu hier und auch bei Purebasic.
Weiß nicht ob der Beitrag hier gut passt oder lieber in die Grafikabteilung sollte:
Folgendes Problem:
Main Hauptprogrammm ruft ein Unterroutine auf die dann was in 3D anzeigt. Soweit so gut:
Wenn ich dann aber die Procedure ein zweites mal aufrufe stürzt es ab ohne das ein der Fehlermeldungen im Programm ausgeführt wurden.
Das passiert genau beim "OpenWindowedScreen" Kommando:
(Hoffe das ist ein Anfängerfehler, hab' aber im Moment keine Idee)
Gruß
Onetime
PS: Unter Windows 10 mit PureBasic 5.60 (Windows - x64)
Code: Alles auswählen
;========================================================================================================
; Issue with openwindowedscreen: When calling the procedure the second time -> program crashes with error
;
; Fehler bei openwindowedscreen : Wenn die Procedure das zweite Mal gerufen wird -> stürzt das Programm ab
;
; Error: ; "The debugged executable quit unexpectedly"
;========================================================================================================
#WinMain=0
#Win3D=1
Declare _3DSub() ; 3d subroutine
Define.i Quit
If OpenWindow(0, 100, 200, 500, 500, "Main Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
; eventloop
Repeat
If MessageRequester("Press Yes to call 3D, NO to quit", " Call 3D?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
_3DSub()
Else
Quit = 1
EndIf
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
; ******************************************************************************************************************
Procedure _3DSub()
Protected.i _SubQuit=0, _event
Protected.i _Cube
DisableWindow(#WinMain, #True) ; disable main window
Debug "InitEngine3D will be done now // kommt jetzt"
If InitEngine3D(#PB_Engine3D_DebugLog) And InitSprite() And InitKeyboard()
Debug "OpenWindow will be done now // kommt jetzt"
If OpenWindow(#Win3D,50,50,500,500,"3D - Window ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Debug "OpenWindowedScreen will be done now // kommt jetzt"
If OpenWindowedScreen(WindowID(#Win3d),0,0,500,500 ,#False,0,0) ; x/y bezieht sich auf das fenster // x/y relates to window position
Debug "OpenWindowedScreen has succeded / hatte Erfolg"
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
_SubQuit=1
EndIf
Else
MessageRequester("Error", "Can't open window!", 0)
_SubQuit=1
EndIf ; openwindow
Else
_SubQuit=1
MessageRequester("Error", "Init3dengine failure!", 0)
EndIf ; initengine
If _SubQuit=0 ; All OK up to now -> perform 3d actions
_Cube=CreateCube(#PB_Any, 2)
_Entity1=CreateEntity(#PB_Any,MeshID(_Cube), #PB_Material_None, 0,0,0 )
;Create Camera
CreateCamera(0,0,0,100,100)
MoveCamera(0,0,0, 10,#PB_Absolute)
CameraLookAt(0, 0, 0, 0)
CameraBackColor(0, RGB(0,200,200))
; event loop -------------------------------------------------------------------------------------
Repeat ; main loop
ExamineKeyboard()
Repeat ; clear events
; important: Clear all events between frames?
_event= WindowEvent()
Select _event
Case #PB_Event_CloseWindow
_SubQuit = 1
EndSelect
Until _Event = 0
Delay(50)
RotateEntity(_Entity1, 0, 5, 5,#PB_Relative) ; just to do something
RenderWorld()
FlipBuffers()
Until _SubQuit=1 Or KeyboardPushed(#PB_Key_Escape)
; event loop end ----------------------------------------------------------------------------------
EndIf ; 3d actions
DisableWindow(#WinMain, #False) ; main Window enable
CloseScreen()
CloseWindow(#Win3D)
EndProcedure ; _3DSub()
End ; Program end