I found the mistake. I only had to add two lines. It works. (use-modules (gl) (glut)) (use-modules (gl contrib packed-struct))
(define-packed-struct vertices (x float) (y float) (z float) (r float) (g float) (b float)) (define vertices-square (make-packed-array vertices 4)) (pack vertices-square 0 vertices 20.0 20.0 0.0 0.0 0.0 0.0) (pack vertices-square 1 vertices 80.0 20.0 0.0 0.0 0.0 0.0) (pack vertices-square 2 vertices 80.0 80.0 0.0 0.0 0.0 0.0) (pack vertices-square 3 vertices 20.0 80.0 0.0 0.0 0.0 0.0) ;;vertices-square ;;#vu8(0 0 160 65 0 0 160 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;; 0 0 160 66 0 0 160 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;; 0 0 160 66 0 0 160 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;; 0 0 160 65 0 0 160 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (define (init) (gl-ortho 0.0 100.0 0.0 100.0 -1.0 1.0) (set-gl-clear-color 1.0 1.0 1.0 0.0)) (define (draw-scene) (gl-clear (clear-buffer-mask color-buffer)) (gl-enable-client-state (enable-cap vertex-array)) (gl-enable-client-state (enable-cap color-array)) (set-gl-vertex-array (vertex-pointer-type float) vertices-square #:stride (packed-struct-size vertices) ;; 24 #:offset (packed-struct-offset vertices x)) ;; 0 (set-gl-color-array (color-pointer-type float) vertices-square #:stride (packed-struct-size vertices) ;; 24 #:offset (packed-struct-offset vertices r)) ;; 12 (gl-draw-arrays (begin-mode quads) 0 (packed-array-length vertices-square vertices))) ;; 4 (define (on-display) (init) (draw-scene) (swap-buffers)) (initialize-glut #:window-size '(800 . 800)) (make-window "hallelujah") (set-display-callback (lambda() (on-display))) (glut-main-loop) El jue., 31 ene. 2019 a las 12:14, Luis Souto Graña (< luissoutob...@gmail.com>) escribió: > I think I almost have it. I made a minimal example with a square. It > starts but the square doesn't appear. If anyone finds where the fault is, > please let me know. > > (use-modules (gl) (glut)) > (use-modules (gl contrib packed-struct)) > > (define-packed-struct vertices > (x float) > (y float) > (z float) > (r float) > (g float) > (b float)) > > (define vertices-square (make-packed-array vertices 4)) > (pack vertices-square 0 vertices 20.0 20.0 0.0 0.0 0.0 0.0) > (pack vertices-square 1 vertices 80.0 20.0 0.0 0.0 0.0 0.0) > (pack vertices-square 2 vertices 80.0 80.0 0.0 0.0 0.0 0.0) > (pack vertices-square 3 vertices 20.0 80.0 0.0 0.0 0.0 0.0) > > ;;vertices-square > ;;#vu8(0 0 160 65 0 0 160 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > ;; 0 0 160 66 0 0 160 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > ;; 0 0 160 66 0 0 160 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > ;; 0 0 160 65 0 0 160 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) > > > (define (init) > (gl-ortho 0.0 100.0 0.0 100.0 -1.0 1.0) > (set-gl-clear-color 1.0 1.0 1.0 0.0)) > > (define (draw-scene) > (gl-clear (clear-buffer-mask color-buffer)) > (gl-color 0 0 0) > ;;(gl-begin (begin-mode polygon) > ;; (gl-vertex 20.0 20.0 0.0) > ;; (gl-vertex 80.0 20.0 0.0) > ;; (gl-vertex 80.0 80.0 0.0) > ;; (gl-vertex 20.0 80.0 0.0))) > (set-gl-vertex-array (vertex-pointer-type float) > vertices-square > #:stride (packed-struct-size vertices) ;; 24 > #:offset (packed-struct-offset vertices x)) ;; 0 > (set-gl-color-array (color-pointer-type float) > vertices-square > #:stride (packed-struct-size vertices) ;; 24 > #:offset (packed-struct-offset vertices r)) ;; 12 > > (gl-draw-arrays (begin-mode polygon) 0 (packed-array-length > vertices-square vertices))) ;; 4 > > (define (on-display) > (init) > (draw-scene) > (swap-buffers)) > > (initialize-glut #:window-size '(800 . 800)) > (make-window "page 24") > (set-display-callback (lambda() (on-display))) > (glut-main-loop) > > > El lun., 28 ene. 2019 a las 14:30, Luis Souto Graña (< > luissoutob...@gmail.com>) escribió: > >> Andy Wingo doesn't use f32vectors, he uses packed-struct.scm https:// >> github.com/guildhall/guile-ope >> ngl/blob/master/gl/contrib/packed-struct.scm . There are >> bytevector-ieee-single-native-set in it. >> >> It works because I wrote: >> >> $ cd /home/spectrumgomas/guile-opengl-01.0/examples/particle-system >> $ guile client-arrays.scm >> >> And I see the particle system. >> >> Now I just need to understand it. :) >> >> El sáb., 26 ene. 2019 a las 16:39, Daniel Llorens (< >> daniel.llor...@bluewin.ch>) escribió: >> >>> >>> >>> > On 26 Jan 2019, at 17:05, Luis Souto Graña <luissoutob...@gmail.com> >>> wrote: >>> > >>> > The structure of my byvector is: >>> > >>> > 30.0(float) --- IEE754 converter --> 0x41F00000 (hexadecimal) --- >>> little endian ---> 0000F041 --- hexadecimal to decimal converter ---> 00 00 >>> 240 65 >>> > >>> > But I didn't notice and there's a lot of zeros before the next 00 00 >>> 240 65. >>> > >>> > I have to study what is the structure of a f32vector in Guile. I don't >>> know it. >>> >>> The storage of an f32vector is exactly the same as if you declared float >>> a[n] in C, one float after another, each taking 4 bytes. Endianness doesn't >>> matter if you are producing and consuming the floats on the same machine. >>> >>> The source data is floats, OpenGL takes floats, you don't need to deal >>> with bytes. >>> >>>