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 ;
 |