39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2005, 2009 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel accessors sequences opengl opengl.gl assocs ;
 | 
						|
IN: opengl.sprites
 | 
						|
 | 
						|
TUPLE: sprite loc dim dim2 dlist texture ;
 | 
						|
 | 
						|
: <sprite> ( loc dim dim2 -- sprite )
 | 
						|
    f f sprite boa ;
 | 
						|
 | 
						|
: sprite-size2 ( sprite -- w h ) dim2>> first2 ;
 | 
						|
 | 
						|
: sprite-width ( sprite -- w ) dim>> first ;
 | 
						|
 | 
						|
: draw-sprite ( sprite -- )
 | 
						|
    GL_TEXTURE_COORD_ARRAY [
 | 
						|
        dup loc>> gl-translate
 | 
						|
        GL_TEXTURE_2D over texture>> glBindTexture
 | 
						|
        init-texture rect-texture-coords
 | 
						|
        dim2>> fill-rect-vertices
 | 
						|
        (gl-fill-rect)
 | 
						|
        GL_TEXTURE_2D 0 glBindTexture
 | 
						|
    ] do-enabled-client-state ;
 | 
						|
 | 
						|
: make-sprite-dlist ( sprite -- id )
 | 
						|
    GL_MODELVIEW [
 | 
						|
        GL_COMPILE [ draw-sprite ] make-dlist
 | 
						|
    ] do-matrix ;
 | 
						|
 | 
						|
: init-sprite ( texture sprite -- )
 | 
						|
    swap >>texture
 | 
						|
    dup make-sprite-dlist >>dlist drop ;
 | 
						|
 | 
						|
: free-sprite ( sprite -- )
 | 
						|
    [ dlist>> delete-dlist ]
 | 
						|
    [ texture>> delete-texture ] bi ;
 | 
						|
 | 
						|
: free-sprites ( sprites -- )
 | 
						|
    [ nip [ free-sprite ] when* ] assoc-each ; |