From d579628d616546f17c38ab3a6cf3c53ea4e5c902 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 11 Nov 2008 02:31:56 -0600 Subject: [PATCH] More OpenGL rendering tweaks --- basis/opengl/opengl.factor | 33 ++++++++++++++++--------- basis/ui/freetype/freetype.factor | 1 + basis/ui/gadgets/buttons/buttons.factor | 10 ++++---- basis/ui/gadgets/editors/editors.factor | 18 ++++++++------ basis/ui/gadgets/worlds/worlds.factor | 4 +-- 5 files changed, 40 insertions(+), 26 deletions(-) diff --git a/basis/opengl/opengl.factor b/basis/opengl/opengl.factor index 7cf141ca6a..64326f340e 100644 --- a/basis/opengl/opengl.factor +++ b/basis/opengl/opengl.factor @@ -69,7 +69,24 @@ MACRO: all-enabled-client-state ( seq quot -- ) : gl-line ( a b -- ) line-vertices GL_LINES 0 2 glDrawArrays ; -: (rectangle-vertices) ( dim -- vertices ) +: (rect-vertices) ( dim -- vertices ) + { + [ drop 0 1 ] + [ first 1- 1 ] + [ [ first 1- ] [ second ] bi ] + [ second 0 swap ] + } cleave 8 narray >c-float-array ; + +: rect-vertices ( dim -- ) + (rect-vertices) gl-vertex-pointer ; + +: (gl-rect) ( -- ) + GL_LINE_LOOP 0 4 glDrawArrays ; + +: gl-rect ( dim -- ) + rect-vertices (gl-rect) ; + +: (fill-rect-vertices) ( dim -- vertices ) { [ drop 0 0 ] [ first 0 ] @@ -77,20 +94,14 @@ MACRO: all-enabled-client-state ( seq quot -- ) [ second 0 swap ] } cleave 8 narray >c-float-array ; -: rectangle-vertices ( dim -- ) - (rectangle-vertices) gl-vertex-pointer ; - -: (gl-rect) ( -- ) - GL_LINE_LOOP 0 4 glDrawArrays ; - -: gl-rect ( dim -- ) - rectangle-vertices (gl-rect) ; +: fill-rect-vertices ( dim -- ) + (fill-rect-vertices) gl-vertex-pointer ; : (gl-fill-rect) ( -- ) GL_QUADS 0 4 glDrawArrays ; : gl-fill-rect ( dim -- ) - rectangle-vertices (gl-fill-rect) ; + fill-rect-vertices (gl-fill-rect) ; : circle-steps ( steps -- angles ) dup length v/n 2 pi * v*n ; @@ -203,7 +214,7 @@ MEMO: (rect-texture-coords) ( -- seq ) dup loc>> gl-translate GL_TEXTURE_2D over texture>> glBindTexture init-texture rect-texture-coords - dim2>> rectangle-vertices + dim2>> fill-rect-vertices (gl-fill-rect) GL_TEXTURE_2D 0 glBindTexture ] do-enabled-client-state ; diff --git a/basis/ui/freetype/freetype.factor b/basis/ui/freetype/freetype.factor index d2dfe56ed4..5a6118fb00 100644 --- a/basis/ui/freetype/freetype.factor +++ b/basis/ui/freetype/freetype.factor @@ -196,6 +196,7 @@ M: freetype-renderer string-height ( open-font string -- h ) :: (draw-string) ( open-font sprites string loc -- ) GL_TEXTURE_2D [ loc [ + -0.5 0.5 0.0 glTranslated string open-font string char-widths scan-sums [ [ open-font sprites ] 2dip draw-char ] 2each diff --git a/basis/ui/gadgets/buttons/buttons.factor b/basis/ui/gadgets/buttons/buttons.factor index 9f3e3a8520..11fb69fc7d 100644 --- a/basis/ui/gadgets/buttons/buttons.factor +++ b/basis/ui/gadgets/buttons/buttons.factor @@ -111,8 +111,8 @@ TUPLE: checkmark-paint < caching-pen color last-vertices ; : checkmark-points ( dim -- points ) { - [ { 0 0 } v* ] - [ { 1 1 } v* ] + [ { 0 0 } v* { 0 1 } v+ ] + [ { 1 1 } v* { 0 1 } v+ ] [ { 0 1 } v* ] [ { 1 0 } v* ] } cleave 4array ; @@ -170,14 +170,14 @@ TUPLE: radio-paint < caching-pen color interior-vertices boundary-vertices ; M: radio-paint recompute-pen swap dim>> - [ { 4 4 } swap { 8 8 } v- 12 circle-vertices >>interior-vertices ] - [ { 1 1 } swap { 2 2 } v- 12 circle-vertices >>boundary-vertices ] bi + [ { 4 4 } swap { 9 9 } v- circle-steps circle-vertices >>interior-vertices ] + [ { 1 1 } swap { 3 3 } v- circle-steps circle-vertices >>boundary-vertices ] bi drop ; > [ editor get - dup caret-color>> gl-color - dup caret-loc origin get v+ - swap caret-dim over v+ - [ { 0.5 -0.5 } v+ ] bi@ gl-line + [ caret-color>> gl-color ] + [ + dup caret-loc origin get v+ + swap caret-dim over v+ + gl-line + ] bi ] when ; : line-translation ( n -- loc ) @@ -180,12 +182,14 @@ M: editor ungraft* dup editor-mark* swap editor-caret* sort-pair ; : (draw-selection) ( x1 x2 -- ) - 2dup = [ 2 + ] when - 0.0 swap editor get line-height glRectd ; + over - + dup 0 = [ 2 + ] when + [ 0.0 2array ] [ editor get line-height 2array ] bi* + swap [ gl-fill-rect ] with-translation ; : draw-selected-line ( start end n -- ) [ start/end-on-line ] keep tuck - >r >r editor get offset>x r> r> + [ editor get offset>x ] 2dip editor get offset>x (draw-selection) ; diff --git a/basis/ui/gadgets/worlds/worlds.factor b/basis/ui/gadgets/worlds/worlds.factor index ec108b4514..6f901c37ee 100644 --- a/basis/ui/gadgets/worlds/worlds.factor +++ b/basis/ui/gadgets/worlds/worlds.factor @@ -83,7 +83,6 @@ SYMBOL: ui-error-hook [ rethrow ] ui-error-hook set-global : draw-world ( world -- ) - [ dup draw-world? [ dup world [ [ @@ -95,8 +94,7 @@ SYMBOL: ui-error-hook ] with-variable ] [ drop - ] if USE: prettyprint - ] USE: tools.time benchmark global [ "timings" get-global push ] bind ; + ] if ; world H{ { T{ key-down f { C+ } "x" } [ T{ cut-action } send-action ] }