95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Factor
		
	
	
USING: accessors assocs classes destructors functors kernel
 | 
						|
lexer math parser sequences specialized-arrays.int ui.backend
 | 
						|
words ;
 | 
						|
IN: ui.pixel-formats
 | 
						|
 | 
						|
SYMBOLS:
 | 
						|
    double-buffered
 | 
						|
    stereo
 | 
						|
    offscreen
 | 
						|
    fullscreen
 | 
						|
    windowed
 | 
						|
    accelerated
 | 
						|
    software-rendered
 | 
						|
    backing-store
 | 
						|
    multisampled
 | 
						|
    supersampled 
 | 
						|
    sample-alpha
 | 
						|
    color-float ;
 | 
						|
 | 
						|
TUPLE: pixel-format-attribute { value integer } ;
 | 
						|
 | 
						|
TUPLE: color-bits < pixel-format-attribute ;
 | 
						|
TUPLE: red-bits < pixel-format-attribute ;
 | 
						|
TUPLE: green-bits < pixel-format-attribute ;
 | 
						|
TUPLE: blue-bits < pixel-format-attribute ;
 | 
						|
TUPLE: alpha-bits < pixel-format-attribute ;
 | 
						|
 | 
						|
TUPLE: accum-bits < pixel-format-attribute ;
 | 
						|
TUPLE: accum-red-bits < pixel-format-attribute ;
 | 
						|
TUPLE: accum-green-bits < pixel-format-attribute ;
 | 
						|
TUPLE: accum-blue-bits < pixel-format-attribute ;
 | 
						|
TUPLE: accum-alpha-bits < pixel-format-attribute ;
 | 
						|
 | 
						|
TUPLE: depth-bits < pixel-format-attribute ;
 | 
						|
 | 
						|
TUPLE: stencil-bits < pixel-format-attribute ;
 | 
						|
 | 
						|
TUPLE: aux-buffers < pixel-format-attribute ;
 | 
						|
 | 
						|
TUPLE: sample-buffers < pixel-format-attribute ;
 | 
						|
TUPLE: samples < pixel-format-attribute ;
 | 
						|
 | 
						|
HOOK: (make-pixel-format) ui-backend ( world attributes -- pixel-format-handle )
 | 
						|
HOOK: (free-pixel-format) ui-backend ( pixel-format -- )
 | 
						|
HOOK: (pixel-format-attribute) ui-backend ( pixel-format attribute-name -- value )
 | 
						|
 | 
						|
ERROR: invalid-pixel-format-attributes world attributes ;
 | 
						|
 | 
						|
TUPLE: pixel-format world handle ;
 | 
						|
 | 
						|
: <pixel-format> ( world attributes -- pixel-format )
 | 
						|
    2dup (make-pixel-format)
 | 
						|
    [ nip pixel-format boa ] [ invalid-pixel-format-attributes ] if* ;
 | 
						|
 | 
						|
M: pixel-format dispose
 | 
						|
    [ (free-pixel-format) ] [ f >>handle drop ] bi ;
 | 
						|
 | 
						|
: pixel-format-attribute ( pixel-format attribute-name -- value )
 | 
						|
    (pixel-format-attribute) ;
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
FUNCTOR: define-pixel-format-attribute-table ( NAME PERM TABLE -- )
 | 
						|
 | 
						|
>PFA              DEFINES >${NAME}
 | 
						|
>PFA-int-array    DEFINES >${NAME}-int-array
 | 
						|
 | 
						|
WHERE
 | 
						|
 | 
						|
GENERIC: >PFA ( attribute -- pfas )
 | 
						|
 | 
						|
M: object >PFA
 | 
						|
    drop { } ;
 | 
						|
M: word >PFA
 | 
						|
    TABLE at [ { } ] unless* ;
 | 
						|
M: pixel-format-attribute >PFA
 | 
						|
    dup class TABLE at
 | 
						|
    [ swap value>> suffix ]
 | 
						|
    [ drop { } ] if* ;
 | 
						|
 | 
						|
: >PFA-int-array ( attribute -- int-array )
 | 
						|
    [ >PFA ] map concat PERM prepend 0 suffix >int-array ;
 | 
						|
 | 
						|
;FUNCTOR
 | 
						|
 | 
						|
SYNTAX: PIXEL-FORMAT-ATTRIBUTE-TABLE:
 | 
						|
    scan scan-object scan-object define-pixel-format-attribute-table ;
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
GENERIC: world-pixel-format-attributes ( world -- attributes )
 | 
						|
 | 
						|
GENERIC# check-world-pixel-format 1 ( world pixel-format -- )
 | 
						|
 |