]> gitweb.factorcode.org Git - factor.git/blob - basis/opengl/sprites/sprites.factor
Merge OneEyed's patch
[factor.git] / basis / opengl / sprites / sprites.factor
1 ! Copyright (C) 2005, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors sequences opengl opengl.gl assocs ;
4 IN: opengl.sprites
5
6 TUPLE: sprite loc dim dim2 dlist texture ;
7
8 : <sprite> ( loc dim dim2 -- sprite )
9     f f sprite boa ;
10
11 : sprite-size2 ( sprite -- w h ) dim2>> first2 ;
12
13 : sprite-width ( sprite -- w ) dim>> first ;
14
15 : draw-sprite ( sprite -- )
16     GL_TEXTURE_COORD_ARRAY [
17         dup loc>> gl-translate
18         GL_TEXTURE_2D over texture>> glBindTexture
19         init-texture rect-texture-coords
20         dim2>> fill-rect-vertices
21         (gl-fill-rect)
22         GL_TEXTURE_2D 0 glBindTexture
23     ] do-enabled-client-state ;
24
25 : make-sprite-dlist ( sprite -- id )
26     GL_MODELVIEW [
27         GL_COMPILE [ draw-sprite ] make-dlist
28     ] do-matrix ;
29
30 : init-sprite ( texture sprite -- )
31     swap >>texture
32     dup make-sprite-dlist >>dlist drop ;
33
34 : free-sprite ( sprite -- )
35     [ dlist>> delete-dlist ]
36     [ texture>> delete-texture ] bi ;
37
38 : free-sprites ( sprites -- )
39     [ nip [ free-sprite ] when* ] assoc-each ;