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