desromech / woden-core-game-framework

A Game Framework implemented using the Woden Core Scene Graph
MIT License
1 stars 2 forks source link

Bug: Woden Editor Example on playing the core example at second time #4

Open labordep opened 6 months ago

labordep commented 6 months ago

To reproduce :

image

No easy to have more infos because the image is freezing :/

My config:

labordep commented 6 months ago

I will try to rebuild the image from scratch to confirm with this script:

EpMonitor disableDuring: [
  Author useAuthor: 'Load' during: [
      Metacello new
         baseline: 'WodenCoreExamples';
         repository: 'github://desromech/woden-core-examples';
         onConflictUseIncoming;
         load
   ]
]
labordep commented 6 months ago

I have the problem at the first launch. Very strange :/ I will try to display the exception behind the last one.

Same problem when I'm trying to run the editor without the example.

When I'm viewing the example I haven't any textures (I suppose). So probably the first exception is a file not found exception, but very difficult to have it because of freezing. Look: image

https://github.com/desromech/woden-core-game-framework/assets/49183340/36674fe7-6219-448a-9731-8e3ffb9eab73

labordep commented 6 months ago

I succeed to have more informations using the debugguer from play level method. image

The stack:

MessageNotUnderstood(Exception)>>raiseUnhandledError
MessageNotUnderstood(Exception)>>defaultAction
MessageNotUnderstood>>defaultAction
UndefinedObject>>handleSignal:
Context>>handleSignal:
MessageNotUnderstood(Exception)>>pass
[ :e |
        self abortRecording.
        e pass
    ] in WDAGPUSceneRendererActiveFrameRenderer>>recordAndFlushCommandsOn:queue:with: in Block: [ :e |...
FullBlockClosure(BlockClosure)>>cull:
Context>>evaluateSignal:
Context>>handleSignal:
MessageNotUnderstood(Exception)>>signal
SystemDictionary(Object)>>doesNotUnderstand: #modificationCount
WDAGPUSceneRendererResourceCache>>validTextureHandleFor:
WDAGPUSceneRendererResourceCache>>validTextureViewHandleFor:
[
            | handle |
            handle := renderer resourceCache validTextureViewHandleFor: aWDTexture.
            activeResources add: handle.
            handle
        ] in WDAGPUSceneRendererActiveFrameRenderer>>validTextureViewHandleFor:fallbackTextureWith: in Block: [...
[self at: key put: aBlock value] in Dictionary>>at:ifAbsentPut: in Block: [self at: key put: aBlock value]
Dictionary>>at:ifAbsent:
Dictionary>>at:ifAbsentPut:
WDAGPUSceneRendererActiveFrameRenderer>>validTextureViewHandleFor:fallbackTextureWith:
[ 
            | binding |
            binding := renderer resourceCache rendererShaderSignature allocateMaterialState.
            binding
                writeState: material with: WDAGPUEnvironmentMapMaterialUniformBufferWriter;
                bindSampledTextureView: (self validTextureViewHandleFor: material colorTexture fallbackTextureWith: [renderer resourceCache whiteTexture2D]) inSlot: 1.

            activeSlabResource add: binding.
            binding
        ] in WDAGPUSceneRendererActiveFrameRenderer>>emitEnvironmentMapMaterialActivationCommands: in Block: [ ...
[self at: key put: aBlock value] in Dictionary>>at:ifAbsentPut: in Block: [self at: key put: aBlock value]
Dictionary>>at:ifAbsent:
Dictionary>>at:ifAbsentPut:
WDAGPUSceneRendererActiveFrameRenderer>>emitEnvironmentMapMaterialActivationCommands:
WDEnvironmentMapMaterial>>emitActivationCommandsOn:
WDAGPUSceneRendererActiveFrameRenderer>>activateMaterial:withVertexBinding:primitiveTopology:
WDAGPUSceneRendererActiveFrameRenderer>>emitRenderingCommandsForMeshPrimitive:
WDMeshPrimitive>>emitRenderingCommandsWithRenderer:
WDAGPUSceneRendererActiveFrameRenderer>>recordCommandsForRenderable:
WDAGPUSceneRendererActiveFrameRenderer>>recordCommandsForRenderingObject:
[ :each |
                self recordCommandsForRenderingObject: each
            ] in [ :eachCameraLayer |
        eachCameraLayer backgroundObjects isEmpty ifFalse: [
            self bindCameraState: (self convertedCameraState: eachCameraLayer cameraState framebufferExtent: framebufferExtent).
            eachCameraLayer backgroundObjects do: [ :each |
                self recordCommandsForRenderingObject: each
            ]
        ].
    ] in WDAGPUSceneRendererActiveFrameRenderer>>recordCommandsForRenderingBackgroundObjectsInScene:framebufferExtent: in Block: [ :each |...
OrderedCollection>>do:
[ :eachCameraLayer |
        eachCameraLayer backgroundObjects isEmpty ifFalse: [
            self bindCameraState: (self convertedCameraState: eachCameraLayer cameraState framebufferExtent: framebufferExtent).
            eachCameraLayer backgroundObjects do: [ :each |
                self recordCommandsForRenderingObject: each
            ]
        ].
    ] in WDAGPUSceneRendererActiveFrameRenderer>>recordCommandsForRenderingBackgroundObjectsInScene:framebufferExtent: in Block: [ :eachCameraLayer |...
Array(SequenceableCollection)>>do:
WDAGPUSceneRendererActiveFrameRenderer>>recordCommandsForRenderingBackgroundObjectsInScene:framebufferExtent:
WDAGPUSceneRendererActiveFrameRenderer>>recordRenderingCommandsFor:intoFramebuffer:
[ :frame |
            frame
                recordRenderingCommandsFor: renderingSceneState intoFramebuffer: framebuffer;
                renderOverlayFormSceneGraph: overlaySceneGraph intoFramebuffer: framebuffer

        ] in WDAGPUSceneRenderer>>renderSceneState:overlay:intoFramebuffer: in Block: [ :frame |...
FullBlockClosure(BlockClosure)>>cull:
[
        aBlock cull: self.
        stateTracker endRecordingAndFlushCommands
    ] in WDAGPUSceneRendererActiveFrameRenderer>>recordAndFlushCommandsOn:queue:with: in Block: [...
FullBlockClosure(BlockClosure)>>on:do:
WDAGPUSceneRendererActiveFrameRenderer>>recordAndFlushCommandsOn:queue:with:
WDAGPUSceneRenderer>>renderSceneState:overlay:intoFramebuffer:
WDGFWorldOSWindow(WDAbstractRenderingSceneStateOSWindow)>>doRender
[ 
        self doRender.
    ] in WDGFWorldOSWindow(WDAbstractRenderingSceneStateOSWindow)>>render in Block: [ ...
[
        caught := true.
        self wait.
        blockValue := mutuallyExcludedBlock value
    ] in Semaphore>>critical: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
Semaphore>>critical:
WDGFWorldOSWindow(WDAbstractRenderingSceneStateOSWindow)>>render
WDGFWorldOSWindow(WDAbstractRenderingSceneStateOSWindow)>>exposed
WDGFWorldOSWindowEventHandler(WDAbstractRenderingSceneStateOSWindowEventHandler)>>visitWindowExposeEvent:
OSWindowExposeEvent>>accept:
WDGFWorldOSWindowEventHandler(OSWindowEventVisitor)>>handleEvent:
OSWindow>>deliverEvent:
OSWindowExposeEvent(OSEvent)>>deliver
OSSDL2BackendWindow>>visitWindowEvent:
SDL_WindowEvent>>accept:
OSSDL2BackendWindow>>handleNewSDLEvent:
OSSDL2Driver>>dispatchEvent:
OSSDLPasteEventFilter>>dispatchEvent:
[
        mappedEvent := sdlEvent mapped.
        self evaluateUserInterrupt: mappedEvent.
        self eventFilter dispatchEvent: mappedEvent
    ] in OSSDL2Driver>>processEvent: in Block: [...
FullBlockClosure(BlockClosure)>>on:do:
OSSDL2Driver>>processEvent:
OSSDL2Driver>>eventLoopProcessWithoutPlugin
[ self eventLoopProcessWithoutPlugin ] in OSSDL2Driver>>setupEventLoop in Block: [ self eventLoopProcessWithoutPlugin ]
[self value.
            "IMPORTANT: Do not step over next line of code. See method comments for details"
            Processor terminateRealActive] in FullBlockClosure(BlockClosure)>>newProcess in Block: [self value....
labordep commented 6 months ago

I'm trying to debug step by step. At this point this is Ok:

image

When I click on Run this is ok and the view is working. Very strange!!

When I retry to open "classicaly" this is not working :/