On 26 June 2013 21:06, Alexandre Bergel <[email protected]> wrote:
> Hi!
>
> Apparently, it happens that we get an error "Frame buffer status: Unknown 
> error". The error comes from the method checkStatus:
>
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> NBGLFrameBuffer>>checkStatus
>         | status |
>         self bind.
>         status := gl checkFramebufferStatusEXT: GL_FRAMEBUFFER.
>
>         status = GL_FRAMEBUFFER_COMPLETE ifFalse: [
>                 #(
>                         #GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
>                         #GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
>                         #GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER
>                         #GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER
>                         #GL_FRAMEBUFFER_UNSUPPORTED
>                         #GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
>                         #GL_FRAMEBUFFER_UNDEFINED
>                 ) do: [:sym |
>                         (self class bindingOf: sym) ifNotNil: [:b |
>                                 status = b value ifTrue: [ ^ self error: 
> 'Frame buffer is incomplete: ', b key ]        ].
>                 ].
>                 ^ self error: 'Frame buffer status: Unknown error'.
>         ].
>         ^ true "ok"
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>
> Any idea what's going on?
>
> We took a Pharo 2.0, loaded Athens, NBOpenGL, SourceCity, and roassal3d. 
> Running the test of roassal3d shows this.
> I suspect this error comes from some interaction between the tests. Closing 
> an opengl window is enough to desallocate the opengl resources?
>

If i remember , you should close and force GC.
But of course, it would be preferable , if on window close event you
explicitly deallocate things immediately,
then you don't have to wait for GC to clean it for you.

The problem, i think, is interference between two different opengl contexts.
OpenGL is built so, that you need to actiave different context
(glMakeCurrent) between using any functions for it
(otherwise you would need to pass extra argument - a context handle,
to each function)..
Now i think the code that allocates/deallocates things in opengl
assumes that a valid context is currently selected (or only single
context )..
because apparently, if current context is different than where you did
allocated the resources , you will get an error.

> Cheers,
> Alexandre
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>


-- 
Best regards,
Igor Stasenko.

Reply via email to