]> gitweb.factorcode.org Git - factor.git/commitdiff
Refactor texture cache
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 11 Feb 2009 10:54:06 +0000 (04:54 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 11 Feb 2009 10:54:06 +0000 (04:54 -0600)
basis/opengl/opengl.factor
basis/opengl/texture-cache/texture-cache.factor
basis/ui/text/core-text/core-text.factor

index 7dea8a0cdcffeec09270d2c33017715c1ec4cb87..c95e610788ba28d2ae4aa6b5baf0d22d82ac88b7 100644 (file)
@@ -5,7 +5,7 @@
 USING: alien alien.c-types continuations kernel libc math macros
 namespaces math.vectors math.constants math.functions
 math.parser opengl.gl opengl.glu combinators arrays sequences
-splitting words byte-arrays assocs colors accessors
+splitting words byte-arrays assocs colors colors.constants accessors
 generalizations locals fry specialized-arrays.float
 specialized-arrays.uint ;
 IN: opengl
@@ -106,6 +106,31 @@ MACRO: all-enabled-client-state ( seq quot -- )
 : gl-fill-rect ( dim -- )
     fill-rect-vertices (gl-fill-rect) ;
 
+: init-texture ( -- )
+    GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR glTexParameteri
+    GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR glTexParameteri
+    GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT glTexParameterf
+    GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT glTexParameterf ;
+
+: rect-texture-coords ( -- )
+    float-array{ 0 0 1 0 1 1 0 1 } gl-texture-coord-pointer ;
+
+: do-attribs ( bits quot -- )
+    swap glPushAttrib call glPopAttrib ; inline
+
+: draw-textured-rect ( dim texture -- )
+    GL_TEXTURE_2D [
+        GL_TEXTURE_BIT [
+            GL_TEXTURE_COORD_ARRAY [
+                COLOR: white gl-color
+                GL_TEXTURE_2D swap glBindTexture
+                init-texture rect-texture-coords
+                fill-rect-vertices (gl-fill-rect)
+                GL_TEXTURE_2D 0 glBindTexture
+            ] do-enabled-client-state
+        ] do-attribs
+    ] do-enabled ;
+
 : circle-steps ( steps -- angles )
     dup length v/n 2 pi * v*n ;
 
@@ -179,9 +204,6 @@ MACRO: all-enabled-client-state ( seq quot -- )
 MACRO: set-draw-buffers ( buffers -- )
     words>values '[ _ (set-draw-buffers) ] ;
 
-: do-attribs ( bits quot -- )
-    swap glPushAttrib call glPopAttrib ; inline
-
 : gl-look-at ( eye focus up -- )
     [ first3 ] tri@ gluLookAt ;
 
@@ -206,17 +228,8 @@ MACRO: set-draw-buffers ( buffers -- )
 : make-dlist ( type quot -- id )
     [ gen-dlist ] 2dip '[ _ glNewList @ glEndList ] keep ; inline
 
-: init-texture ( -- )
-    GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR glTexParameteri
-    GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR glTexParameteri
-    GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_CLAMP glTexParameterf
-    GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP glTexParameterf ;
-
 : gl-translate ( point -- ) first2 0.0 glTranslated ;
 
-: rect-texture-coords ( -- )
-    float-array{ 0 0 1 0 1 1 0 1 } gl-texture-coord-pointer ;
-
 : delete-dlist ( id -- ) 1 glDeleteLists ;
 
 : with-translation ( loc quot -- )
index 19b4044f284c65f045a5c985d6eb77000c34450c..4a6e75cfb2ebca3ecd1e30a494ed8accebeb8da7 100644 (file)
@@ -7,19 +7,7 @@ IN: opengl.texture-cache
 TUPLE: texture texture display-list disposed ;
 
 : make-texture-display-list ( dim texture -- dlist )
-    GL_COMPILE [
-        GL_TEXTURE_2D [
-            GL_TEXTURE_BIT [
-                GL_TEXTURE_COORD_ARRAY [
-                    COLOR: white gl-color
-                    GL_TEXTURE_2D swap glBindTexture
-                    init-texture rect-texture-coords
-                    fill-rect-vertices (gl-fill-rect)
-                    GL_TEXTURE_2D 0 glBindTexture
-                ] do-enabled-client-state
-            ] do-attribs
-        ] do-enabled
-    ] make-dlist ;
+    GL_COMPILE [ draw-textured-rect ] make-dlist ;
 
 TUPLE: texture-info dim bitmap format type ;
 
@@ -45,11 +33,10 @@ TUPLE: texture-cache renderer cache disposed ;
 
 GENERIC: render-texture ( key renderer -- texture-info )
 
-: get-texture ( key texture-cache -- dlist )
+: get-texture ( key texture-cache -- texture )
     dup check-disposed
     [ cache>> ] keep
-    '[ _ renderer>> render-texture <texture> ] cache
-    display-list>> ;
+    '[ _ renderer>> render-texture <texture> ] cache ;
 
 M: texture-cache dispose*
     cache>> values dispose-each ;
index 72fcfdd8278d0734193e94e04586c447397915ab..b7213aab9bf670c901e48f12f4f98068601275c4 100644 (file)
@@ -26,11 +26,11 @@ M: core-text-renderer finish-text-rendering
     text-handle>> purge-texture-cache
     cached-lines get purge-cache ;
 
-: rendered-line ( font string -- display-list )
+: rendered-line ( font string -- texture )
     2array world get text-handle>> get-texture ;
 
 M: core-text-renderer draw-string ( font string -- )
-    rendered-line glCallList ;
+    rendered-line display-list>> glCallList ;
 
 M: core-text-renderer x>offset ( x font string -- n )
     [ 2drop 0 ] [