<div>
        <div>
                Dear Matthew,</div>
        <div>
                &nbsp;</div>
        <div>
                I have done a little digging. The problem is not in the gl-context.rkt in itself.</div>
        <div>
                The problem appears when you use the make-gl-bitmap and canvas% together.</div>
        <div>
                I have attached a very simple OpenGL program to this e-mail. Save it as gl-base.scm.</div>
        <div>
                If you execute it,then first it prints appropriately the context, but once the canvas% has been</div>
        <div>
                displayed the context cannot be created any more. For example in the resizing or painting function</div>
        <div>
                it cannot be created any more.</div>
        <div>
                So I suppose the GL context switching is wrong somewhere.</div>
        <div>
                (This is under Windows XP.)</div>
        <div>
                Is this any help to solve the problem?</div>
        <div>
                &nbsp;</div>
        <div>
                Best regards,</div>
        <div>
                &nbsp;</div>
        <div>
                Peter Ivanyi</div>
        <div>
                &nbsp;</div>
        <div>
                -----------------------------------------------------------------------------------------------------------------</div>
        <div>
                &nbsp;</div>
        <div>
                (module gl-base mzscheme<br />
                <br />
                (require (lib &quot;gl.ss&quot; &quot;sgl&quot;)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lib &quot;gl-vectors.ss&quot; &quot;sgl&quot;)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lib &quot;class.ss&quot;)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lib &quot;mred.ss&quot; &quot;mred&quot;)<br />
                )<br />
                <br />
                <br />
                (define (sx-bitmap-new width height)<br />
                &nbsp; ;(make-object bitmap% width height #f)<br />
                &nbsp; (let ((config (new gl-config%)))<br />
                &nbsp;&nbsp;&nbsp; (let* ((b&nbsp; (make-gl-bitmap width height config))<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dc (new bitmap-dc% (bitmap b)))<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (gl (send dc get-gl-context))<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display &quot;gl: &quot;)(display gl)(newline)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<br />
                &nbsp;&nbsp;&nbsp; )<br />
                &nbsp; )<br />
                )<br />
                &nbsp;<br />
                (define (resize w h)<br />
                &nbsp; (display &quot;resize: &quot;)<br />
                &nbsp; (sx-bitmap-new 100 100)<br />
                &nbsp; (glViewport 0 0 w h)<br />
                &nbsp; #t<br />
                )<br />
                <br />
                (define (draw-opengl)<br />
                &nbsp; (display &quot;draw: &quot;)<br />
                &nbsp; (sx-bitmap-new 100 100)<br />
                &nbsp; (glClearColor 0.0 0.0 0.0 0.0)<br />
                &nbsp; (glClear GL_COLOR_BUFFER_BIT)<br />
                &nbsp; (glColor3d 1.0 1.0 1.0)<br />
                &nbsp;<br />
                &nbsp; (glMatrixMode GL_PROJECTION)<br />
                &nbsp; (glLoadIdentity)<br />
                &nbsp; (glOrtho 0.0 1.0 0.0 1.0 -1.0 1.0)<br />
                &nbsp; (glMatrixMode GL_MODELVIEW)<br />
                &nbsp; (glLoadIdentity)<br />
                <br />
                &nbsp; (glBegin GL_QUADS)<br />
                &nbsp; (glVertex3d 0.25 0.25 0.0)<br />
                &nbsp; (glVertex3d 0.75 0.25 0.0)<br />
                &nbsp; (glVertex3d 0.75 0.75 0.0)<br />
                &nbsp; (glVertex3d 0.25 0.75 0.0)<br />
                &nbsp; (glEnd)<br />
                )<br />
                <br />
                <br />
                (define my-canvas%<br />
                &nbsp; (class* canvas% ()<br />
                &nbsp;&nbsp;&nbsp; (inherit with-gl-context swap-gl-buffers)<br />
                &nbsp;&nbsp; &nbsp;<br />
                &nbsp;&nbsp; (define/override (on-paint)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (with-gl-context<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda ()<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (draw-opengl)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (swap-gl-buffers)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
                &nbsp;&nbsp;&nbsp; )<br />
                &nbsp;&nbsp; &nbsp;<br />
                &nbsp;&nbsp;&nbsp; (define/override (on-size width height)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (with-gl-context<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda ()<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (resize width height)<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
                &nbsp;&nbsp;&nbsp; )<br />
                &nbsp;&nbsp;&nbsp; (super-instantiate () (style &#39;(gl)))<br />
                &nbsp; )<br />
                )<br />
                <br />
                <br />
                (define win (new frame% (label &quot;OpenGl Test&quot;) (min-width 200) (min-height 200)))<br />
                (define gl&nbsp; (new my-canvas% (parent win)))<br />
                <br />
                (sx-bitmap-new 100 100)<br />
                (send win show #t)<br />
                <br />
                )</div>
        <div>
                &nbsp;</div>
</div>