From 7d8c59edebb74579a68be523ff8dddb5aae5918b Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 20 Jun 2009 19:30:34 -0500 Subject: [PATCH 01/27] more action gestures. btw "redo" is ^y (not ^Z) outside of OS X --- basis/ui/gestures/gestures-docs.factor | 41 ++++++++++++++++++++++++-- basis/ui/gestures/gestures.factor | 15 ++++++++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/basis/ui/gestures/gestures-docs.factor b/basis/ui/gestures/gestures-docs.factor index ebffb0bfbc..91c5ea8312 100644 --- a/basis/ui/gestures/gestures-docs.factor +++ b/basis/ui/gestures/gestures-docs.factor @@ -86,6 +86,30 @@ HELP: select-all-action { $class-description "Gesture sent when the " { $emphasis "select all" } " standard window system action is invoked." } { $examples { $code "select-all-action" } } ; +HELP: new-action +{ $class-description "Gesture sent when the " { $emphasis "new" } " standard window system action is invoked." } +{ $examples { $code "new-action" } } ; + +HELP: open-action +{ $class-description "Gesture sent when the " { $emphasis "open" } " standard window system action is invoked." } +{ $examples { $code "open-action" } } ; + +HELP: save-action +{ $class-description "Gesture sent when the " { $emphasis "save" } " standard window system action is invoked." } +{ $examples { $code "save-action" } } ; + +HELP: save-as-action +{ $class-description "Gesture sent when the " { $emphasis "save as" } " standard window system action is invoked." } +{ $examples { $code "save-as-action" } } ; + +HELP: revert-action +{ $class-description "Gesture sent when the " { $emphasis "revert" } " standard window system action is invoked." } +{ $examples { $code "revert-action" } } ; + +HELP: close-action +{ $class-description "Gesture sent when the " { $emphasis "close" } " standard window system action is invoked." } +{ $examples { $code "close-action" } } ; + HELP: C+ { $description "Control key modifier." } ; @@ -350,21 +374,34 @@ $nl { $subsection zoom-out-action } ; ARTICLE: "action-gestures" "Action gestures" -"Action gestures exist to keep keyboard shortcuts for common clipboard operations consistent." +"Action gestures exist to keep keyboard shortcuts for common application operations consistent." +{ $subsection undo-action } +{ $subsection redo-action } { $subsection cut-action } { $subsection copy-action } { $subsection paste-action } { $subsection delete-action } { $subsection select-all-action } +{ $subsection new-action } +{ $subsection open-action } +{ $subsection save-action } +{ $subsection save-as-action } +{ $subsection revert-action } +{ $subsection close-action } "The following keyboard gestures, if not handled directly, send action gestures:" { $table { { $strong "Keyboard gesture" } { $strong "Action gesture" } } { { $snippet "T{ key-down f { C+ } \"z\" }" } { $snippet "undo-action" } } - { { $snippet "T{ key-down f { C+ } \"Z\" }" } { $snippet "redo-action" } } + { { $snippet "T{ key-down f { C+ } \"y\" }" } { $snippet "redo-action" } } { { $snippet "T{ key-down f { C+ } \"x\" }" } { $snippet "cut-action" } } { { $snippet "T{ key-down f { C+ } \"c\" }" } { $snippet "copy-action" } } { { $snippet "T{ key-down f { C+ } \"v\" }" } { $snippet "paste-action" } } { { $snippet "T{ key-down f { C+ } \"a\" }" } { $snippet "select-all-action" } } + { { $snippet "T{ key-down f { C+ } \"n\" }" } { $snippet "new-action" } } + { { $snippet "T{ key-down f { C+ } \"o\" }" } { $snippet "open-action" } } + { { $snippet "T{ key-down f { C+ } \"s\" }" } { $snippet "save-action" } } + { { $snippet "T{ key-down f { C+ } \"S\" }" } { $snippet "save-as-action" } } + { { $snippet "T{ key-down f { C+ } \"w\" }" } { $snippet "close-action" } } } "Action gestures should be used in place of the above keyboard gestures if possible. For example, on Mac OS X, the standard " { $strong "Edit" } " menu items send action gestures." ; diff --git a/basis/ui/gestures/gestures.factor b/basis/ui/gestures/gestures.factor index 073b2d5e26..dcfb8d4d66 100644 --- a/basis/ui/gestures/gestures.factor +++ b/basis/ui/gestures/gestures.factor @@ -82,23 +82,32 @@ undo-action redo-action cut-action copy-action paste-action delete-action select-all-action left-action right-action up-action down-action -zoom-in-action zoom-out-action ; +zoom-in-action zoom-out-action +new-action open-action save-action save-as-action +revert-action close-action ; UNION: action undo-action redo-action cut-action copy-action paste-action delete-action select-all-action left-action right-action up-action down-action -zoom-in-action zoom-out-action ; +zoom-in-action zoom-out-action +new-action open-action save-action save-as-action +revert-action close-action ; CONSTANT: action-gestures { { "z" undo-action } - { "Z" redo-action } + { "y" redo-action } { "x" cut-action } { "c" copy-action } { "v" paste-action } { "a" select-all-action } + { "n" new-action } + { "o" open-action } + { "s" save-action } + { "S" save-as-action } + { "w" close-action } } ! Modifiers From 032b5e7835c8ead68bc4bca5868ae65afd33c56d Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 20 Jun 2009 21:26:39 -0500 Subject: [PATCH 02/27] give Factor.app a typical File menu --- .../English.lproj/Factor.nib/info.nib | 6 +-- .../English.lproj/Factor.nib/keyedobjects.nib | Bin 14002 -> 14018 bytes .../English.lproj/MiniFactor.nib/classes.nib | 49 ++++++++++++------ .../English.lproj/MiniFactor.nib/info.nib | 19 +++---- .../MiniFactor.nib/keyedobjects.nib | Bin 9369 -> 12505 bytes 5 files changed, 43 insertions(+), 31 deletions(-) diff --git a/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib b/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib index 1096a1224a..03b5496717 100644 --- a/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib +++ b/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib @@ -3,15 +3,15 @@ IBFramework Version - 629 + 677 IBOldestOS 5 IBOpenObjects - 305 + 344 IBSystem Version - 9G55 + 9J61 targetFramework IBCocoaFramework diff --git a/Factor.app/Contents/Resources/English.lproj/Factor.nib/keyedobjects.nib b/Factor.app/Contents/Resources/English.lproj/Factor.nib/keyedobjects.nib index c30c9e4bfda079b3069b7a323ccf59063fcf199f..52d86b9b0751c321b0ed2d750a70112ff59a35a2 100644 GIT binary patch literal 14018 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 Pn9x;TFLVumr}p?i7^$gq literal 14002 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 L9y`|j&Ft|%$gN+f diff --git a/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/classes.nib b/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/classes.nib index bf3d2a6560..34be3452ee 100644 --- a/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/classes.nib +++ b/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/classes.nib @@ -1,17 +1,32 @@ -{ - IBClasses = ( - { - ACTIONS = { - newFactorWorkspace = id; - runFactorFile = id; - saveFactorImage = id; - saveFactorImageAs = id; - showFactorHelp = id; - }; - CLASS = FirstResponder; - LANGUAGE = ObjC; - SUPERCLASS = NSObject; - } - ); - IBVersion = 1; -} \ No newline at end of file + + + + + IBClasses + + + ACTIONS + + newFactorWorkspace + id + runFactorFile + id + saveFactorImage + id + saveFactorImageAs + id + showFactorHelp + id + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + IBVersion + 1 + + diff --git a/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/info.nib b/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/info.nib index 3a18202826..86277eb8a8 100644 --- a/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/info.nib +++ b/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/info.nib @@ -1,21 +1,18 @@ - + - IBDocumentLocation - 1266 155 525 491 0 0 2560 1578 - IBEditorPositions - - 29 - 326 905 270 44 0 0 2560 1578 - IBFramework Version - 439.0 + 677 + IBOldestOS + 5 IBOpenObjects - 29 + 293 IBSystem Version - 8R218 + 9J61 + targetFramework + IBCocoaFramework diff --git a/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/keyedobjects.nib b/Factor.app/Contents/Resources/English.lproj/MiniFactor.nib/keyedobjects.nib index 34abd139a62216d6d80944a25f3cb7b027239b57..992911439538aa237cb641d2cf23174faa42deb0 100644 GIT binary patch literal 12505 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 literal 9369 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 Date: Sun, 21 Jun 2009 00:20:01 -0500 Subject: [PATCH 03/27] compiler.cfg.linear-scan: Working on resolve pass --- .../linear-scan/assignment/assignment.factor | 28 +- .../cfg/linear-scan/linear-scan-tests.factor | 636 +++++++++--------- .../cfg/linear-scan/linear-scan.factor | 16 +- .../cfg/linear-scan/resolve/resolve.factor | 104 ++- 4 files changed, 429 insertions(+), 355 deletions(-) diff --git a/basis/compiler/cfg/linear-scan/assignment/assignment.factor b/basis/compiler/cfg/linear-scan/assignment/assignment.factor index bf2a56adbd..e55f42e774 100644 --- a/basis/compiler/cfg/linear-scan/assignment/assignment.factor +++ b/basis/compiler/cfg/linear-scan/assignment/assignment.factor @@ -40,16 +40,23 @@ ERROR: already-spilled ; 2dup key? [ already-spilled ] [ set-at ] if ; : insert-spill ( live-interval -- ) - [ reg>> ] [ vreg>> reg-class>> ] [ spill-to>> ] tri _spill ; + { + [ reg>> ] + [ vreg>> reg-class>> ] + [ spill-to>> ] + [ end>> ] + } cleave f swap \ _spill boa , ; : handle-spill ( live-interval -- ) dup spill-to>> [ [ record-spill ] [ insert-spill ] bi ] [ drop ] if ; : insert-copy ( live-interval -- ) - [ split-next>> reg>> ] - [ reg>> ] - [ vreg>> reg-class>> ] - tri _copy ; + { + [ split-next>> reg>> ] + [ reg>> ] + [ vreg>> reg-class>> ] + [ end>> ] + } cleave f swap \ _copy boa , ; : handle-copy ( live-interval -- ) dup [ spill-to>> not ] [ split-next>> ] bi and @@ -68,7 +75,12 @@ ERROR: already-reloaded ; 2dup key? [ delete-at ] [ already-reloaded ] if ; : insert-reload ( live-interval -- ) - [ reg>> ] [ vreg>> reg-class>> ] [ reload-from>> ] tri _reload ; + { + [ reg>> ] + [ vreg>> reg-class>> ] + [ reload-from>> ] + [ end>> ] + } cleave f swap \ _reload boa , ; : handle-reload ( live-interval -- ) dup reload-from>> [ [ record-reload ] [ insert-reload ] bi ] [ drop ] if ; @@ -141,6 +153,6 @@ M: insn assign-registers-in-insn drop ; ] V{ } make ] change-instructions drop ; -: assign-registers ( rpo live-intervals -- ) - init-assignment +: assign-registers ( live-intervals rpo -- ) + [ init-assignment ] dip [ assign-registers-in-block ] each ; diff --git a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor index b43294818b..b4f6302049 100644 --- a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor +++ b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor @@ -10,6 +10,8 @@ compiler.cfg.registers compiler.cfg.liveness compiler.cfg.predecessors compiler.cfg.rpo +compiler.cfg.linearization +compiler.cfg.debugger compiler.cfg.linear-scan compiler.cfg.linear-scan.live-intervals compiler.cfg.linear-scan.allocation @@ -410,7 +412,7 @@ SYMBOL: max-uses [ ] [ 10 20 2 400 random-test ] unit-test [ ] [ 10 20 4 300 random-test ] unit-test -USING: math.private compiler.cfg.debugger ; +USING: math.private ; [ ] [ [ float+ float>fixnum 3 fixnum*fast ] @@ -1415,196 +1417,152 @@ USING: math.private compiler.cfg.debugger ; intersect-inactive ] unit-test +: test-bb ( insns n -- ) + [ swap >>number swap >>instructions ] keep set ; + ! Bug in live spill slots calculation -T{ basic-block - { id 205651 } - { number 0 } - { instructions V{ T{ ##prologue } T{ ##branch } } } -} 0 set +V{ T{ ##prologue } T{ ##branch } } 0 test-bb -T{ basic-block - { id 205652 } - { number 1 } - { instructions - V{ - T{ ##peek - { dst V int-regs 703128 } - { loc D 1 } - } - T{ ##peek - { dst V int-regs 703129 } - { loc D 0 } - } - T{ ##copy - { dst V int-regs 703134 } - { src V int-regs 703128 } - } - T{ ##copy - { dst V int-regs 703135 } - { src V int-regs 703129 } - } - T{ ##compare-imm-branch - { src1 V int-regs 703128 } - { src2 5 } - { cc cc/= } - } - } - } -} 1 set +V{ + T{ ##peek + { dst V int-regs 703128 } + { loc D 1 } + } + T{ ##peek + { dst V int-regs 703129 } + { loc D 0 } + } + T{ ##copy + { dst V int-regs 703134 } + { src V int-regs 703128 } + } + T{ ##copy + { dst V int-regs 703135 } + { src V int-regs 703129 } + } + T{ ##compare-imm-branch + { src1 V int-regs 703128 } + { src2 5 } + { cc cc/= } + } +} 1 test-bb -T{ basic-block - { id 205653 } - { number 2 } - { instructions - V{ - T{ ##copy - { dst V int-regs 703134 } - { src V int-regs 703129 } - } - T{ ##copy - { dst V int-regs 703135 } - { src V int-regs 703128 } - } - T{ ##branch } - } - } -} 2 set +V{ + T{ ##copy + { dst V int-regs 703134 } + { src V int-regs 703129 } + } + T{ ##copy + { dst V int-regs 703135 } + { src V int-regs 703128 } + } + T{ ##branch } +} 2 test-bb -T{ basic-block - { id 205655 } - { number 3 } - { instructions - V{ - T{ ##replace - { src V int-regs 703134 } - { loc D 0 } - } - T{ ##replace - { src V int-regs 703135 } - { loc D 1 } - } - T{ ##epilogue } - T{ ##return } - } - } -} 3 set +V{ + T{ ##replace + { src V int-regs 703134 } + { loc D 0 } + } + T{ ##replace + { src V int-regs 703135 } + { loc D 1 } + } + T{ ##epilogue } + T{ ##return } +} 3 test-bb 1 get 1vector 0 get (>>successors) 2 get 3 get V{ } 2sequence 1 get (>>successors) 3 get 1vector 2 get (>>successors) +SYMBOL: linear-scan-result + :: test-linear-scan-on-cfg ( regs -- ) [ ] [ cfg new 0 get >>entry compute-predecessors compute-liveness - reverse-post-order + dup reverse-post-order { { int-regs regs } } (linear-scan) + flatten-cfg 1array mr. ] unit-test ; { 1 2 } test-linear-scan-on-cfg ! Bug in inactive interval handling ! [ rot dup [ -rot ] when ] -T{ basic-block - { id 201486 } - { number 0 } - { instructions V{ T{ ##prologue } T{ ##branch } } } -} 0 set +V{ T{ ##prologue } T{ ##branch } } 0 test-bb -T{ basic-block - { id 201487 } - { number 1 } - { instructions - V{ - T{ ##peek - { dst V int-regs 689473 } - { loc D 2 } - } - T{ ##peek - { dst V int-regs 689474 } - { loc D 1 } - } - T{ ##peek - { dst V int-regs 689475 } - { loc D 0 } - } - T{ ##compare-imm-branch - { src1 V int-regs 689473 } - { src2 5 } - { cc cc/= } - } - } - } -} 1 set +V{ + T{ ##peek + { dst V int-regs 689473 } + { loc D 2 } + } + T{ ##peek + { dst V int-regs 689474 } + { loc D 1 } + } + T{ ##peek + { dst V int-regs 689475 } + { loc D 0 } + } + T{ ##compare-imm-branch + { src1 V int-regs 689473 } + { src2 5 } + { cc cc/= } + } +} 1 test-bb -T{ basic-block - { id 201488 } - { number 2 } - { instructions - V{ - T{ ##copy - { dst V int-regs 689481 } - { src V int-regs 689475 } - } - T{ ##copy - { dst V int-regs 689482 } - { src V int-regs 689474 } - } - T{ ##copy - { dst V int-regs 689483 } - { src V int-regs 689473 } - } - T{ ##branch } - } - } -} 2 set +V{ + T{ ##copy + { dst V int-regs 689481 } + { src V int-regs 689475 } + } + T{ ##copy + { dst V int-regs 689482 } + { src V int-regs 689474 } + } + T{ ##copy + { dst V int-regs 689483 } + { src V int-regs 689473 } + } + T{ ##branch } +} 2 test-bb -T{ basic-block - { id 201489 } - { number 3 } - { instructions - V{ - T{ ##copy - { dst V int-regs 689481 } - { src V int-regs 689473 } - } - T{ ##copy - { dst V int-regs 689482 } - { src V int-regs 689475 } - } - T{ ##copy - { dst V int-regs 689483 } - { src V int-regs 689474 } - } - T{ ##branch } - } - } -} 3 set +V{ + T{ ##copy + { dst V int-regs 689481 } + { src V int-regs 689473 } + } + T{ ##copy + { dst V int-regs 689482 } + { src V int-regs 689475 } + } + T{ ##copy + { dst V int-regs 689483 } + { src V int-regs 689474 } + } + T{ ##branch } +} 3 test-bb -T{ basic-block - { id 201490 } - { number 4 } - { instructions - V{ - T{ ##replace - { src V int-regs 689481 } - { loc D 0 } - } - T{ ##replace - { src V int-regs 689482 } - { loc D 1 } - } - T{ ##replace - { src V int-regs 689483 } - { loc D 2 } - } - T{ ##epilogue } - T{ ##return } - } - } -} 4 set +V{ + T{ ##replace + { src V int-regs 689481 } + { loc D 0 } + } + T{ ##replace + { src V int-regs 689482 } + { loc D 1 } + } + T{ ##replace + { src V int-regs 689483 } + { loc D 2 } + } + T{ ##epilogue } + T{ ##return } +} 4 test-bb : test-diamond ( -- ) 1 get 1vector 0 get (>>successors) @@ -1625,102 +1583,78 @@ T{ basic-block { instructions V{ T{ ##prologue } T{ ##branch } } } } 0 set -T{ basic-block - { id 201538 } - { number 1 } - { instructions - V{ - T{ ##peek - { dst V int-regs 689600 } - { loc D 1 } - } - T{ ##peek - { dst V int-regs 689601 } - { loc D 0 } - } - T{ ##compare-imm-branch - { src1 V int-regs 689600 } - { src2 5 } - { cc cc/= } - } - } - } -} 1 set +V{ + T{ ##peek + { dst V int-regs 689600 } + { loc D 1 } + } + T{ ##peek + { dst V int-regs 689601 } + { loc D 0 } + } + T{ ##compare-imm-branch + { src1 V int-regs 689600 } + { src2 5 } + { cc cc/= } + } +} 1 test-bb -T{ basic-block - { id 201539 } - { number 2 } - { instructions - V{ - T{ ##peek - { dst V int-regs 689604 } - { loc D 2 } - } - T{ ##copy - { dst V int-regs 689607 } - { src V int-regs 689604 } - } - T{ ##copy - { dst V int-regs 689608 } - { src V int-regs 689600 } - } - T{ ##copy - { dst V int-regs 689610 } - { src V int-regs 689601 } - } - T{ ##branch } - } - } -} 2 set +V{ + T{ ##peek + { dst V int-regs 689604 } + { loc D 2 } + } + T{ ##copy + { dst V int-regs 689607 } + { src V int-regs 689604 } + } + T{ ##copy + { dst V int-regs 689608 } + { src V int-regs 689600 } + } + T{ ##copy + { dst V int-regs 689610 } + { src V int-regs 689601 } + } + T{ ##branch } +} 2 test-bb -T{ basic-block - { id 201540 } - { number 3 } - { instructions - V{ - T{ ##peek - { dst V int-regs 689609 } - { loc D 2 } - } - T{ ##copy - { dst V int-regs 689607 } - { src V int-regs 689600 } - } - T{ ##copy - { dst V int-regs 689608 } - { src V int-regs 689601 } - } - T{ ##copy - { dst V int-regs 689610 } - { src V int-regs 689609 } - } - T{ ##branch } - } - } -} 3 set +V{ + T{ ##peek + { dst V int-regs 689609 } + { loc D 2 } + } + T{ ##copy + { dst V int-regs 689607 } + { src V int-regs 689600 } + } + T{ ##copy + { dst V int-regs 689608 } + { src V int-regs 689601 } + } + T{ ##copy + { dst V int-regs 689610 } + { src V int-regs 689609 } + } + T{ ##branch } +} 3 test-bb -T{ basic-block - { id 201541 } - { number 4 } - { instructions - V{ - T{ ##replace - { src V int-regs 689607 } - { loc D 0 } - } - T{ ##replace - { src V int-regs 689608 } - { loc D 1 } - } - T{ ##replace - { src V int-regs 689610 } - { loc D 2 } - } - T{ ##epilogue } - T{ ##return } - } - } -} 4 set +V{ + T{ ##replace + { src V int-regs 689607 } + { loc D 0 } + } + T{ ##replace + { src V int-regs 689608 } + { loc D 1 } + } + T{ ##replace + { src V int-regs 689610 } + { loc D 2 } + } + T{ ##epilogue } + T{ ##return } +} 4 test-bb test-diamond @@ -1729,76 +1663,130 @@ test-diamond ! compute-live-registers was inaccurate since it didn't take ! lifetime holes into account -T{ basic-block - { id 0 } - { number 0 } - { instructions V{ T{ ##prologue } T{ ##branch } } } -} 0 set +V{ T{ ##prologue } T{ ##branch } } 0 test-bb -T{ basic-block - { id 1 } - { instructions - V{ - T{ ##peek - { dst V int-regs 0 } - { loc D 0 } - } - T{ ##compare-imm-branch - { src1 V int-regs 0 } - { src2 5 } - { cc cc/= } - } - } - } -} 1 set +V{ + T{ ##peek + { dst V int-regs 0 } + { loc D 0 } + } + T{ ##compare-imm-branch + { src1 V int-regs 0 } + { src2 5 } + { cc cc/= } + } +} 1 test-bb -T{ basic-block - { id 2 } - { instructions - V{ - T{ ##peek - { dst V int-regs 1 } - { loc D 1 } - } - T{ ##copy - { dst V int-regs 2 } - { src V int-regs 1 } - } - T{ ##branch } - } - } -} 2 set +V{ + T{ ##peek + { dst V int-regs 1 } + { loc D 1 } + } + T{ ##copy + { dst V int-regs 2 } + { src V int-regs 1 } + } + T{ ##branch } +} 2 test-bb -T{ basic-block - { id 3 } - { instructions - V{ - T{ ##peek - { dst V int-regs 3 } - { loc D 2 } - } - T{ ##copy - { dst V int-regs 2 } - { src V int-regs 3 } - } - T{ ##branch } - } - } -} 3 set +V{ + T{ ##peek + { dst V int-regs 3 } + { loc D 2 } + } + T{ ##copy + { dst V int-regs 2 } + { src V int-regs 3 } + } + T{ ##branch } +} 3 test-bb -T{ basic-block - { id 4 } - { instructions - V{ - T{ ##replace - { src V int-regs 2 } - { loc D 0 } - } - T{ ##return } - } - } -} 4 set +V{ + T{ ##replace + { src V int-regs 2 } + { loc D 0 } + } + T{ ##return } +} 4 test-bb test-diamond -{ 1 2 3 4 } test-linear-scan-on-cfg \ No newline at end of file +{ 1 2 3 4 } test-linear-scan-on-cfg + +! Inactive interval handling: splitting active interval +! if it fits in lifetime hole only partially + +V{ T{ ##peek f V int-regs 3 R 1 } T{ ##branch } } 0 test-bb + +V{ + T{ ##peek f V int-regs 2 R 0 } + T{ ##compare-imm-branch f V int-regs 2 5 cc= } +} 1 test-bb + +V{ + T{ ##peek f V int-regs 0 D 0 } + T{ ##branch } +} 2 test-bb + + +V{ + T{ ##peek f V int-regs 1 D 1 } + T{ ##peek f V int-regs 0 D 0 } + T{ ##replace f V int-regs 1 D 2 } + T{ ##branch } +} 3 test-bb + +V{ + T{ ##replace f V int-regs 3 R 2 } + T{ ##replace f V int-regs 0 D 0 } + T{ ##return } +} 4 test-bb + +test-diamond + +{ 1 2 } test-linear-scan-on-cfg + +USING: classes ; + +[ ] [ + 1 get instructions>> first regs>> V int-regs 0 swap at + 2 get instructions>> first regs>> V int-regs 1 swap at assert= +] unit-test + +[ _copy ] [ 3 get instructions>> second class ] unit-test + +! Resolve pass; make sure the spilling is done correctly +V{ T{ ##peek f V int-regs 3 R 1 } T{ ##branch } } 0 test-bb + +V{ + T{ ##peek f V int-regs 2 R 0 } + T{ ##compare-imm-branch f V int-regs 2 5 cc= } +} 1 test-bb + +V{ + T{ ##branch } +} 2 test-bb + +V{ + T{ ##replace f V int-regs 3 R 1 } + T{ ##peek f V int-regs 1 D 1 } + T{ ##peek f V int-regs 0 D 0 } + T{ ##replace f V int-regs 1 D 2 } + T{ ##replace f V int-regs 0 D 2 } + T{ ##branch } +} 3 test-bb + +V{ + T{ ##replace f V int-regs 3 R 2 } + T{ ##return } +} 4 test-bb + +test-diamond + +{ 1 2 } test-linear-scan-on-cfg + +[ _spill ] [ 2 get instructions>> first class ] unit-test + +[ _spill ] [ 3 get instructions>> second class ] unit-test + +[ _reload ] [ 4 get instructions>> first class ] unit-test \ No newline at end of file diff --git a/basis/compiler/cfg/linear-scan/linear-scan.factor b/basis/compiler/cfg/linear-scan/linear-scan.factor index 3a0a7f8770..2d3ad41b22 100644 --- a/basis/compiler/cfg/linear-scan/linear-scan.factor +++ b/basis/compiler/cfg/linear-scan/linear-scan.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel accessors namespaces make +USING: kernel accessors namespaces make locals cpu.architecture compiler.cfg compiler.cfg.rpo @@ -9,7 +9,8 @@ compiler.cfg.linear-scan.numbering compiler.cfg.linear-scan.live-intervals compiler.cfg.linear-scan.allocation compiler.cfg.linear-scan.allocation.state -compiler.cfg.linear-scan.assignment ; +compiler.cfg.linear-scan.assignment +compiler.cfg.linear-scan.resolve ; IN: compiler.cfg.linear-scan ! References: @@ -26,12 +27,11 @@ IN: compiler.cfg.linear-scan ! by Omri Traub, Glenn Holloway, Michael D. Smith ! http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.8435 -: (linear-scan) ( rpo machine-registers -- ) - [ - dup number-instructions - dup compute-live-intervals - ] dip - allocate-registers assign-registers ; +:: (linear-scan) ( rpo machine-registers -- ) + rpo number-instructions + rpo compute-live-intervals machine-registers allocate-registers + rpo assign-registers + rpo resolve-data-flow ; : linear-scan ( cfg -- cfg' ) [ diff --git a/basis/compiler/cfg/linear-scan/resolve/resolve.factor b/basis/compiler/cfg/linear-scan/resolve/resolve.factor index df2dbb1198..002914cd7b 100644 --- a/basis/compiler/cfg/linear-scan/resolve/resolve.factor +++ b/basis/compiler/cfg/linear-scan/resolve/resolve.factor @@ -1,34 +1,108 @@ ! Copyright (C) 2009 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs kernel math namespaces sequences -compiler.cfg.linear-scan.live-intervals compiler.cfg.liveness ; +classes.tuple classes.parser parser fry words make arrays +combinators compiler.cfg.linear-scan.live-intervals +compiler.cfg.liveness compiler.cfg.instructions ; IN: compiler.cfg.linear-scan.resolve +<< + +TUPLE: operation from to reg-class ; + +SYNTAX: OPERATION: + CREATE-CLASS dup save-location + [ operation { } define-tuple-class ] + [ + [ scan-word scan-word ] keep + '[ + [ [ _ execute ] [ _ execute ] bi* ] + [ vreg>> reg-class>> ] + bi _ boa , + ] (( from to -- )) define-declared + ] bi ; + +>> + +OPERATION: memory->memory spill-to>> reload-from>> +OPERATION: register->memory reg>> reload-from>> +OPERATION: memory->register spill-to>> reg>> +OPERATION: register->register reg>> reg>> + : add-mapping ( from to -- ) - 2drop - ; + dup reload-from>> [ + over spill-to>> [ memory->memory ] [ register->memory ] if + ] [ + over spill-to>> [ memory->register ] [ register->register ] if + ] if ; : resolve-value-data-flow ( bb to vreg -- ) live-intervals get at [ [ block-to ] dip child-interval-at ] [ [ block-from ] dip child-interval-at ] - bi-curry bi* 2dup = [ 2drop ] [ - add-mapping + bi-curry bi* 2dup eq? [ 2drop ] [ add-mapping ] if ; + +: compute-mappings ( bb to -- mappings ) + [ + dup live-in keys + [ resolve-value-data-flow ] with with each + ] { } make ; + +GENERIC: >insn ( operation -- ) + +: >operation< ( operation -- from to reg-class ) + [ from>> ] [ to>> ] [ reg-class>> ] tri ; inline + +M: memory->memory >insn + [ from>> ] [ to>> ] bi = [ "Not allowed" throw ] unless ; + +M: register->memory >insn + [ from>> ] [ reg-class>> ] [ to>> ] tri _spill ; + +M: memory->register >insn + [ to>> ] [ reg-class>> ] [ from>> ] tri _reload ; + +M: register->register >insn + [ to>> ] [ from>> ] [ reg-class>> ] tri _copy ; + +: mapping-instructions ( mappings -- insns ) + [ [ >insn ] each ] { } make ; + +: fork? ( from to -- ? ) + [ successors>> length 1 >= ] + [ predecessors>> length 1 = ] bi* and ; inline + +: insert-position/fork ( from to -- before after ) + nip instructions>> [ >array ] [ dup delete-all ] bi swap ; + +: join? ( from to -- ? ) + [ successors>> length 1 = ] + [ predecessors>> length 1 >= ] bi* and ; inline + +: insert-position/join ( from to -- before after ) + drop instructions>> { } ; + +: insert-position ( bb to -- before after ) + { + { [ 2dup fork? ] [ insert-position/fork ] } + { [ 2dup join? ] [ insert-position/join ] } + } cond ; + +: 3append-here ( seq2 seq1 seq3 -- ) + #! Mutate seq1 + swap '[ _ push-all ] bi@ ; + +: perform-mappings ( mappings bb to -- ) + pick empty? [ 3drop ] [ + [ mapping-instructions ] 2dip + insert-position 3append-here ] if ; -: resolve-mappings ( bb to -- ) - 2drop - ; - : resolve-edge-data-flow ( bb to -- ) - [ dup live-in [ resolve-value-data-flow ] with with each ] - [ resolve-mappings ] - 2bi ; + [ compute-mappings ] [ perform-mappings ] 2bi ; : resolve-block-data-flow ( bb -- ) - dup successors>> [ - resolve-edge-data-flow - ] with each ; + dup successors>> [ resolve-edge-data-flow ] with each ; : resolve-data-flow ( rpo -- ) [ resolve-block-data-flow ] each ; \ No newline at end of file From 330bea3cc2e9f3de9436e5039c9bc1ce3e642f67 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 21 Jun 2009 00:23:34 -0500 Subject: [PATCH 04/27] compiler.cfg.linear-scan.resolve: unit tests --- basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor diff --git a/basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor b/basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor new file mode 100644 index 0000000000..475e8ea167 --- /dev/null +++ b/basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor @@ -0,0 +1,6 @@ +IN: compiler.cfg.linear-scan.resolve.tests +USING: compiler.cfg.linear-scan.resolve tools.test arrays kernel ; + +[ { 1 2 3 4 5 6 } ] [ + { 3 4 } V{ 1 2 } clone [ { 5 6 } 3append-here ] keep >array +] unit-test \ No newline at end of file From 0068a3d965c12f9bf8bc82d3ef0c1c620a09dbbe Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 21 Jun 2009 15:11:41 -0500 Subject: [PATCH 05/27] stack-checker: fix doc typo reported by OneEyed --- basis/stack-checker/stack-checker-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/stack-checker/stack-checker-docs.factor b/basis/stack-checker/stack-checker-docs.factor index 7d18482bff..afdaccc896 100644 --- a/basis/stack-checker/stack-checker-docs.factor +++ b/basis/stack-checker/stack-checker-docs.factor @@ -74,7 +74,7 @@ $nl "Combinators which are recursive require additional care. In addition to being declared " { $link POSTPONE: inline } ", they must be declared " { $link POSTPONE: recursive } ". There are three restrictions that only apply to combinators with this declaration:" { $heading "Input quotation declaration" } "Input parameters which are quotations must be annotated as much in the stack effect. For example, the following will not infer:" -{ $example ": bad ( quot -- ) [ call ] keep foo ; inline recursive" "[ [ ] bad ] infer." "Got a computed value where a literal quotation was expected\n\nType :help for debugging help." } +{ $example ": bad ( quot -- ) [ call ] keep bad ; inline recursive" "[ [ ] bad ] infer." "Got a computed value where a literal quotation was expected\n\nType :help for debugging help." } "The following is correct:" { $example ": good ( quot: ( -- ) -- ) [ call ] keep good ; inline recursive" "[ [ ] good ] infer." "( -- )" } "The effect of the nested quotation itself is only present for documentation purposes; the mere presence of a nested effect is sufficient to mark that value as a quotation parameter." From 16c977491b520d3e6c3bc5018a79883f7ab5a598 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 21 Jun 2009 20:53:11 -0500 Subject: [PATCH 06/27] bind file management action gestures to standard cocoa menu items --- basis/ui/backend/cocoa/views/views.factor | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/basis/ui/backend/cocoa/views/views.factor b/basis/ui/backend/cocoa/views/views.factor index a9568d4f75..9fb83e4865 100644 --- a/basis/ui/backend/cocoa/views/views.factor +++ b/basis/ui/backend/cocoa/views/views.factor @@ -225,6 +225,26 @@ CLASS: { [ nip select-all-action send-action$ ] } +{ "newDocument:" "id" { "id" "SEL" "id" } + [ nip new-action send-action$ ] +} + +{ "openDocument:" "id" { "id" "SEL" "id" } + [ nip open-action send-action$ ] +} + +{ "saveDocument:" "id" { "id" "SEL" "id" } + [ nip save-action send-action$ ] +} + +{ "saveDocumentAs:" "id" { "id" "SEL" "id" } + [ nip save-as-action send-action$ ] +} + +{ "revertDocumentToSaved:" "id" { "id" "SEL" "id" } + [ nip revert-action send-action$ ] +} + ! Multi-touch gestures: this is undocumented. ! http://cocoadex.com/2008/02/nsevent-modifications-swipe-ro.html { "magnifyWithEvent:" "void" { "id" "SEL" "id" } From 0b990db4e58595448062393beadedcbda8f22901 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 21 Jun 2009 20:57:54 -0500 Subject: [PATCH 07/27] move "run factor file" and "save factor image" commands to application menu --- .../English.lproj/Factor.nib/info.nib | 4 +--- .../English.lproj/Factor.nib/keyedobjects.nib | Bin 14018 -> 15029 bytes 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib b/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib index 03b5496717..1d9f641c11 100644 --- a/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib +++ b/Factor.app/Contents/Resources/English.lproj/Factor.nib/info.nib @@ -7,9 +7,7 @@ IBOldestOS 5 IBOpenObjects - - 344 - + IBSystem Version 9J61 targetFramework diff --git a/Factor.app/Contents/Resources/English.lproj/Factor.nib/keyedobjects.nib b/Factor.app/Contents/Resources/English.lproj/Factor.nib/keyedobjects.nib index 52d86b9b0751c321b0ed2d750a70112ff59a35a2..1659393f2e09f2c10eeb2c37f5afe96dadbe7f1c 100644 GIT binary patch literal 15029 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 F{|C22vNr$# literal 14018 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 Pn9x;TFLVumr}p?i7^$gq From 387f6df9e5068a981dd4c5f40f4fff6f175fba3c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 22 Jun 2009 00:24:51 -0500 Subject: [PATCH 08/27] compiler.cfg.linear-scan: Debugging resolve pass --- .../cfg/linear-scan/debugger/debugger.factor | 9 ++- .../cfg/linear-scan/linear-scan-tests.factor | 7 +-- .../linear-scan/resolve/resolve-tests.factor | 61 ++++++++++++++++++- .../cfg/linear-scan/resolve/resolve.factor | 30 ++++++--- 4 files changed, 89 insertions(+), 18 deletions(-) diff --git a/basis/compiler/cfg/linear-scan/debugger/debugger.factor b/basis/compiler/cfg/linear-scan/debugger/debugger.factor index dad87b62ae..401241722f 100644 --- a/basis/compiler/cfg/linear-scan/debugger/debugger.factor +++ b/basis/compiler/cfg/linear-scan/debugger/debugger.factor @@ -1,8 +1,8 @@ -! Copyright (C) 2008 Slava Pestov. +! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel sequences sets arrays math strings fry -prettyprint compiler.cfg.linear-scan.live-intervals -compiler.cfg.linear-scan.allocation ; +namespaces prettyprint compiler.cfg.linear-scan.live-intervals +compiler.cfg.linear-scan.allocation compiler.cfg ; IN: compiler.cfg.linear-scan.debugger : check-assigned ( live-intervals -- ) @@ -34,3 +34,6 @@ IN: compiler.cfg.linear-scan.debugger : live-intervals. ( seq -- ) [ interval-picture ] map simple-table. ; + +: test-bb ( insns n -- ) + [ swap >>number swap >>instructions ] keep set ; \ No newline at end of file diff --git a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor index b4f6302049..1f8112a893 100644 --- a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor +++ b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor @@ -1417,9 +1417,6 @@ USING: math.private ; intersect-inactive ] unit-test -: test-bb ( insns n -- ) - [ swap >>number swap >>instructions ] keep set ; - ! Bug in live spill slots calculation V{ T{ ##prologue } T{ ##branch } } 0 test-bb @@ -1489,7 +1486,9 @@ SYMBOL: linear-scan-result flatten-cfg 1array mr. ] unit-test ; -{ 1 2 } test-linear-scan-on-cfg +! This test has a critical edge -- do we care about these? + +! { 1 2 } test-linear-scan-on-cfg ! Bug in inactive interval handling ! [ rot dup [ -rot ] when ] diff --git a/basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor b/basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor index 475e8ea167..3e98d6c9f0 100644 --- a/basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor +++ b/basis/compiler/cfg/linear-scan/resolve/resolve-tests.factor @@ -1,6 +1,65 @@ +USING: accessors arrays compiler.cfg compiler.cfg.instructions +compiler.cfg.linear-scan.debugger +compiler.cfg.linear-scan.live-intervals +compiler.cfg.linear-scan.numbering +compiler.cfg.linear-scan.resolve compiler.cfg.predecessors +compiler.cfg.registers compiler.cfg.rpo cpu.architecture kernel +namespaces tools.test vectors ; IN: compiler.cfg.linear-scan.resolve.tests -USING: compiler.cfg.linear-scan.resolve tools.test arrays kernel ; [ { 1 2 3 4 5 6 } ] [ { 3 4 } V{ 1 2 } clone [ { 5 6 } 3append-here ] keep >array +] unit-test + +V{ + T{ ##peek f V int-regs 0 D 0 } + T{ ##branch } +} 0 test-bb + +V{ + T{ ##replace f V int-regs 0 D 1 } + T{ ##return } +} 1 test-bb + +1 get 1vector 0 get (>>successors) + +cfg new 0 get >>entry +compute-predecessors +dup reverse-post-order number-instructions +drop + +CONSTANT: test-live-interval-1 +T{ live-interval + { start 0 } + { end 6 } + { uses V{ 0 6 } } + { ranges V{ T{ live-range f 0 2 } T{ live-range f 4 6 } } } + { spill-to 0 } + { vreg V int-regs 0 } +} + +[ f ] [ + 0 get test-live-interval-1 spill-to +] unit-test + +[ 0 ] [ + 1 get test-live-interval-1 spill-to +] unit-test + +CONSTANT: test-live-interval-2 +T{ live-interval + { start 0 } + { end 6 } + { uses V{ 0 6 } } + { ranges V{ T{ live-range f 0 2 } T{ live-range f 4 6 } } } + { reload-from 0 } + { vreg V int-regs 0 } +} + +[ 0 ] [ + 0 get test-live-interval-2 reload-from +] unit-test + +[ f ] [ + 1 get test-live-interval-2 reload-from ] unit-test \ No newline at end of file diff --git a/basis/compiler/cfg/linear-scan/resolve/resolve.factor b/basis/compiler/cfg/linear-scan/resolve/resolve.factor index 002914cd7b..55a2eab41b 100644 --- a/basis/compiler/cfg/linear-scan/resolve/resolve.factor +++ b/basis/compiler/cfg/linear-scan/resolve/resolve.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs kernel math namespaces sequences classes.tuple classes.parser parser fry words make arrays -combinators compiler.cfg.linear-scan.live-intervals +locals combinators compiler.cfg.linear-scan.live-intervals compiler.cfg.liveness compiler.cfg.instructions ; IN: compiler.cfg.linear-scan.resolve @@ -24,23 +24,36 @@ SYNTAX: OPERATION: >> +: reload-from ( bb live-interval -- n/f ) + 2dup [ block-from ] [ start>> ] bi* = + [ nip reload-from>> ] [ 2drop f ] if ; + +: spill-to ( bb live-interval -- n/f ) + 2dup [ block-to ] [ end>> ] bi* = + [ nip spill-to>> ] [ 2drop f ] if ; + OPERATION: memory->memory spill-to>> reload-from>> OPERATION: register->memory reg>> reload-from>> OPERATION: memory->register spill-to>> reg>> OPERATION: register->register reg>> reg>> -: add-mapping ( from to -- ) - dup reload-from>> [ - over spill-to>> [ memory->memory ] [ register->memory ] if +:: add-mapping ( bb1 bb2 li1 li2 -- ) + bb2 li2 reload-from [ + bb1 li1 spill-to + [ li1 li2 memory->memory ] + [ li1 li2 register->memory ] if ] [ - over spill-to>> [ memory->register ] [ register->register ] if + bb1 li1 spill-to + [ li1 li2 memory->register ] + [ li1 li2 register->register ] if ] if ; : resolve-value-data-flow ( bb to vreg -- ) + [ 2dup ] dip live-intervals get at [ [ block-to ] dip child-interval-at ] [ [ block-from ] dip child-interval-at ] - bi-curry bi* 2dup eq? [ 2drop ] [ add-mapping ] if ; + bi-curry bi* 2dup eq? [ 2drop 2drop ] [ add-mapping ] if ; : compute-mappings ( bb to -- mappings ) [ @@ -50,9 +63,6 @@ OPERATION: register->register reg>> reg>> GENERIC: >insn ( operation -- ) -: >operation< ( operation -- from to reg-class ) - [ from>> ] [ to>> ] [ reg-class>> ] tri ; inline - M: memory->memory >insn [ from>> ] [ to>> ] bi = [ "Not allowed" throw ] unless ; @@ -80,7 +90,7 @@ M: register->register >insn [ predecessors>> length 1 >= ] bi* and ; inline : insert-position/join ( from to -- before after ) - drop instructions>> { } ; + drop instructions>> dup pop 1array ; : insert-position ( bb to -- before after ) { From f2c250180cec1ac714327b2ae8e0c15acb911872 Mon Sep 17 00:00:00 2001 From: Sascha Matzke Date: Fri, 5 Jun 2009 14:31:40 +0200 Subject: [PATCH 09/27] small bson write performance enhancement, some code optimization, added type declarations --- extra/bson/reader/reader.factor | 49 +++++----- extra/bson/writer/writer.factor | 70 +++++++------- extra/mongodb/benchmark/benchmark.factor | 5 +- extra/mongodb/mmm/authors.txt | 1 - extra/mongodb/mmm/mmm.factor | 101 --------------------- extra/mongodb/mmm/summary.txt | 1 - extra/mongodb/operations/operations.factor | 50 +--------- 7 files changed, 63 insertions(+), 214 deletions(-) delete mode 100644 extra/mongodb/mmm/authors.txt delete mode 100644 extra/mongodb/mmm/mmm.factor delete mode 100644 extra/mongodb/mmm/summary.txt diff --git a/extra/bson/reader/reader.factor b/extra/bson/reader/reader.factor index 6fadcf7679..7e218fa79c 100644 --- a/extra/bson/reader/reader.factor +++ b/extra/bson/reader/reader.factor @@ -2,13 +2,16 @@ USING: accessors assocs bson.constants byte-arrays byte-vectors fry io io.binary io.encodings.string io.encodings.utf8 kernel math namespaces sequences serialize arrays calendar io.encodings ; +FROM: kernel.private => declare ; +FROM: io.encodings.private => (read-until) ; + IN: bson.reader ( exemplar -- state ) @@ -17,25 +20,25 @@ TUPLE: state clone [ >>result ] [ V{ } clone [ push ] keep >>scope ] bi V{ } clone [ T_Object "" element boa swap push ] keep >>element ; -PREDICATE: bson-eoo < integer T_EOO = ; PREDICATE: bson-not-eoo < integer T_EOO > ; +PREDICATE: bson-eoo < integer T_EOO = ; -PREDICATE: bson-double < integer T_Double = ; -PREDICATE: bson-integer < integer T_Integer = ; PREDICATE: bson-string < integer T_String = ; PREDICATE: bson-object < integer T_Object = ; +PREDICATE: bson-oid < integer T_OID = ; PREDICATE: bson-array < integer T_Array = ; +PREDICATE: bson-integer < integer T_Integer = ; +PREDICATE: bson-double < integer T_Double = ; +PREDICATE: bson-date < integer T_Date = ; PREDICATE: bson-binary < integer T_Binary = ; +PREDICATE: bson-boolean < integer T_Boolean = ; PREDICATE: bson-regexp < integer T_Regexp = ; +PREDICATE: bson-null < integer T_NULL = ; +PREDICATE: bson-ref < integer T_DBRef = ; PREDICATE: bson-binary-bytes < integer T_Binary_Bytes = ; PREDICATE: bson-binary-function < integer T_Binary_Function = ; PREDICATE: bson-binary-uuid < integer T_Binary_UUID = ; PREDICATE: bson-binary-custom < integer T_Binary_Custom = ; -PREDICATE: bson-oid < integer T_OID = ; -PREDICATE: bson-boolean < integer T_Boolean = ; -PREDICATE: bson-date < integer T_Date = ; -PREDICATE: bson-null < integer T_NULL = ; -PREDICATE: bson-ref < integer T_DBRef = ; GENERIC: element-read ( type -- cont? ) GENERIC: element-data-read ( type -- object ) @@ -47,27 +50,27 @@ GENERIC: element-binary-read ( length type -- object ) : get-state ( -- state ) state get ; inline -: count-bytes ( count -- ) - [ get-state ] dip '[ _ + ] change-read drop ; inline - : read-int32 ( -- int32 ) - 4 [ read byte-array>number ] [ count-bytes ] bi ; inline + 4 read byte-array>number ; inline : read-longlong ( -- longlong ) - 8 [ read byte-array>number ] [ count-bytes ] bi ; inline + 8 read byte-array>number ; inline : read-double ( -- double ) - 8 [ read byte-array>number bits>double ] [ count-bytes ] bi ; inline + 8 read byte-array>number bits>double ; inline : read-byte-raw ( -- byte-raw ) - 1 [ read ] [ count-bytes ] bi ; inline + 1 read ; inline : read-byte ( -- byte ) read-byte-raw first ; inline +: utf8-read-until ( seps stream encoding -- string/f sep/f ) + [ { utf8 } declare decode-char dup [ dup rot member? ] [ 2drop f t ] if ] + 3curry (read-until) ; + : read-cstring ( -- string ) - input-stream get utf8 - "\0" swap stream-read-until drop ; inline + "\0" input-stream get utf8 utf8-read-until drop ; inline : read-sized-string ( length -- string ) drop read-cstring ; inline @@ -141,13 +144,13 @@ M: bson-not-eoo element-read ( type -- cont? ) M: bson-object element-data-read ( type -- object ) (object-data-read) ; -M: bson-array element-data-read ( type -- object ) - (object-data-read) ; - M: bson-string element-data-read ( type -- object ) drop read-int32 read-sized-string ; +M: bson-array element-data-read ( type -- object ) + (object-data-read) ; + M: bson-integer element-data-read ( type -- object ) drop read-int32 ; @@ -191,7 +194,7 @@ PRIVATE> USE: tools.continuations -: stream>assoc ( exemplar -- assoc bytes-read ) +: stream>assoc ( exemplar -- assoc ) dup state [ read-int32 >>size read-elements ] with-variable - [ result>> ] [ read>> ] bi ; + result>> ; diff --git a/extra/bson/writer/writer.factor b/extra/bson/writer/writer.factor index 682257558f..5d850929ab 100644 --- a/extra/bson/writer/writer.factor +++ b/extra/bson/writer/writer.factor @@ -6,25 +6,24 @@ io.encodings.utf8 io.streams.byte-array kernel math math.parser namespaces quotations sequences sequences.private serialize strings words combinators.short-circuit literals ; +FROM: io.encodings.utf8.private => char>utf8 ; +FROM: kernel.private => declare ; + IN: bson.writer [ shared-buffer set ] keep ] unless* ; inline - -: >le-stream ( x n -- ) - swap - '[ _ swap nth-byte 0 B{ 0 } - [ set-nth-unsafe ] keep write ] each ; inline - + [ BV{ } clone [ shared-buffer set ] keep ] unless* + { byte-vector } declare ; inline + PRIVATE> : reset-buffer ( buffer -- ) @@ -33,40 +32,38 @@ PRIVATE> : ensure-buffer ( -- ) (buffer) drop ; inline -: with-buffer ( quot -- byte-vector ) +: with-buffer ( quot: ( -- ) -- byte-vector ) [ (buffer) [ reset-buffer ] keep dup ] dip - with-output-stream* dup encoder? [ stream>> ] when ; inline + with-output-stream* ; inline : with-length ( quot: ( -- ) -- bytes-written start-index ) - [ (buffer) [ length ] keep ] dip call - length swap [ - ] keep ; inline + [ (buffer) [ length ] keep ] dip + call length swap [ - ] keep ; inline + +: (with-length-prefix) ( quot: ( -- ) length-quot: ( bytes-written -- length ) -- ) + [ [ B{ 0 0 0 0 } write ] prepose with-length ] dip swap + [ call ] dip (buffer) copy ; inline : with-length-prefix ( quot: ( -- ) -- ) - [ B{ 0 0 0 0 } write ] prepose with-length - [ INT32-SIZE >le ] dip (buffer) - '[ _ over [ nth-unsafe ] dip _ + _ set-nth-unsafe ] - [ INT32-SIZE ] dip each-integer ; inline - + [ INT32-SIZE >le ] (with-length-prefix) ; inline + : with-length-prefix-excl ( quot: ( -- ) -- ) - [ B{ 0 0 0 0 } write ] prepose with-length - [ INT32-SIZE - INT32-SIZE >le ] dip (buffer) - '[ _ over [ nth-unsafe ] dip _ + _ set-nth-unsafe ] - [ INT32-SIZE ] dip each-integer ; inline + [ INT32-SIZE [ - ] keep >le ] (with-length-prefix) ; inline stream-write ; inline +: write-utf8-string ( string -- ) output-stream get '[ _ swap char>utf8 ] each ; inline -: write-byte ( byte -- ) CHAR-SIZE >le-stream ; inline -: write-int32 ( int -- ) INT32-SIZE >le-stream ; inline -: write-double ( real -- ) double>bits INT64-SIZE >le-stream ; inline +: write-byte ( byte -- ) CHAR-SIZE >le write ; inline +: write-int32 ( int -- ) INT32-SIZE >le write ; inline +: write-double ( real -- ) double>bits INT64-SIZE >le write ; inline : write-cstring ( string -- ) write-utf8-string 0 write-byte ; inline -: write-longlong ( object -- ) INT64-SIZE >le-stream ; inline +: write-longlong ( object -- ) INT64-SIZE >le write ; inline : write-eoo ( -- ) T_EOO write-byte ; inline : write-type ( obj -- obj ) [ bson-type? write-byte ] keep ; inline : write-pair ( name object -- ) write-type [ write-cstring ] dip bson-write ; inline +M: string bson-write ( obj -- ) + '[ _ write-cstring ] with-length-prefix-excl ; + M: f bson-write ( f -- ) drop 0 write-byte ; M: t bson-write ( t -- ) drop 1 write-byte ; -M: string bson-write ( obj -- ) - '[ _ write-cstring ] with-length-prefix-excl ; - M: integer bson-write ( num -- ) write-int32 ; @@ -153,8 +149,8 @@ PRIVATE> [ '[ _ bson-write ] with-buffer ] with-scope ; inline : assoc>stream ( assoc -- ) - bson-write ; inline + { assoc } declare bson-write ; inline : mdb-special-value? ( value -- ? ) { [ timestamp? ] [ quotation? ] [ mdbregexp? ] - [ oid? ] [ byte-array? ] } 1|| ; \ No newline at end of file + [ oid? ] [ byte-array? ] } 1|| ; inline \ No newline at end of file diff --git a/extra/mongodb/benchmark/benchmark.factor b/extra/mongodb/benchmark/benchmark.factor index a977224d66..5204846d03 100644 --- a/extra/mongodb/benchmark/benchmark.factor +++ b/extra/mongodb/benchmark/benchmark.factor @@ -2,6 +2,7 @@ USING: calendar math fry kernel assocs math.ranges bson.reader io.streams.byte-a sequences formatting combinators namespaces io tools.time prettyprint io.encodings.binary accessors words mongodb.driver strings math.parser bson.writer ; FROM: mongodb.driver => find ; +FROM: memory => gc ; IN: mongodb.benchmark @@ -175,7 +176,7 @@ CONSTANT: DOC-LARGE H{ { "base_url" "http://www.example.com/test-me" } : deserialize ( doc-quot: ( i -- doc ) -- quot: ( -- ) ) [ 0 ] dip call( i -- doc ) assoc>bv - '[ trial-size [ _ binary [ H{ } stream>assoc 2drop ] with-byte-reader ] times ] ; + '[ trial-size [ _ binary [ H{ } stream>assoc drop ] with-byte-reader ] times ] ; : check-for-key ( assoc key -- ) CHECK-KEY [ swap key? [ "ups... where's the key" throw ] unless ] [ 2drop ] if ; @@ -246,7 +247,7 @@ CONSTANT: DOC-LARGE H{ { "base_url" "http://www.example.com/test-me" } : [bench-quot] ( feat-seq op-word -- quot: ( doc-word -- ) ) '[ _ swap _ '[ [ [ _ execute( -- quot ) ] dip - [ execute( -- ) ] each _ execute( quot -- quot ) benchmark ] with-result ] each + [ execute( -- ) ] each _ execute( quot -- quot ) gc benchmark ] with-result ] each print-separator ] ; : run-serialization-bench ( doc-word-seq feat-seq -- ) diff --git a/extra/mongodb/mmm/authors.txt b/extra/mongodb/mmm/authors.txt deleted file mode 100644 index 5df962bfe0..0000000000 --- a/extra/mongodb/mmm/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Sascha Matzke diff --git a/extra/mongodb/mmm/mmm.factor b/extra/mongodb/mmm/mmm.factor deleted file mode 100644 index 8e56143664..0000000000 --- a/extra/mongodb/mmm/mmm.factor +++ /dev/null @@ -1,101 +0,0 @@ -USING: accessors fry io io.encodings.binary io.servers.connection -io.sockets io.streams.byte-array kernel math mongodb.msg classes formatting -namespaces prettyprint tools.walker calendar calendar.format bson.writer.private -json.writer mongodb.operations.private mongodb.operations ; - -IN: mongodb.mmm - -SYMBOLS: mmm-port mmm-server-ip mmm-server-port mmm-server mmm-dump-output mmm-t-srv ; - -GENERIC: dump-message ( message -- ) - -: check-options ( -- ) - mmm-port get [ 27040 mmm-port set ] unless - mmm-server-ip get [ "127.0.0.1" mmm-server-ip set ] unless - mmm-server-port get [ 27017 mmm-server-port set ] unless - mmm-server-ip get mmm-server-port get mmm-server set ; - -: read-msg-binary ( -- ) - read-int32 - [ write-int32 ] keep - 4 - read write ; - -: read-request-header ( -- msg-stub ) - mdb-msg new - read-int32 MSG-HEADER-SIZE - >>length - read-int32 >>req-id - read-int32 >>resp-id - read-int32 >>opcode ; - -: read-request ( -- msg-stub binary ) - binary [ read-msg-binary ] with-byte-writer - [ binary [ read-request-header ] with-byte-reader ] keep ; ! msg-stub binary - -: dump-request ( msg-stub binary -- ) - [ mmm-dump-output get ] 2dip - '[ _ drop _ binary [ read-message dump-message ] with-byte-reader ] with-output-stream ; - -: read-reply ( -- binary ) - binary [ read-msg-binary ] with-byte-writer ; - -: forward-request-read-reply ( msg-stub binary -- binary ) - [ mmm-server get binary ] 2dip - '[ _ opcode>> _ write flush - OP_Query = - [ read-reply ] - [ f ] if ] with-client ; - -: dump-reply ( binary -- ) - [ mmm-dump-output get ] dip - '[ _ binary [ read-message dump-message ] with-byte-reader ] with-output-stream ; - -: message-prefix ( message -- prefix message ) - [ now timestamp>http-string ] dip - [ class name>> ] keep - [ "%s: %s" sprintf ] dip ; inline - -M: mdb-query-msg dump-message ( message -- ) - message-prefix - [ collection>> ] keep - query>> >json - "%s -> %s: %s \n" printf ; - -M: mdb-insert-msg dump-message ( message -- ) - message-prefix - [ collection>> ] keep - objects>> >json - "%s -> %s : %s \n" printf ; - -M: mdb-reply-msg dump-message ( message -- ) - message-prefix - [ cursor>> ] keep - [ start#>> ] keep - [ returned#>> ] keep - objects>> >json - "%s -> cursor: %d, start: %d, returned#: %d, -> %s \n" printf ; - -M: mdb-msg dump-message ( message -- ) - message-prefix drop "%s \n" printf ; - -: forward-reply ( binary -- ) - write flush ; - -: handle-mmm-connection ( -- ) - read-request - [ dump-request ] 2keep - forward-request-read-reply - [ dump-reply ] keep - forward-reply ; - -: start-mmm-server ( -- ) - output-stream get mmm-dump-output set - binary [ mmm-t-srv set ] keep - "127.0.0.1" mmm-port get >>insecure - [ handle-mmm-connection ] >>handler - start-server* ; - -: run-mmm ( -- ) - check-options - start-mmm-server ; - -MAIN: run-mmm diff --git a/extra/mongodb/mmm/summary.txt b/extra/mongodb/mmm/summary.txt deleted file mode 100644 index 0670873053..0000000000 --- a/extra/mongodb/mmm/summary.txt +++ /dev/null @@ -1 +0,0 @@ -mongo-message-monitor - a small proxy to introspect messages send to MongoDB diff --git a/extra/mongodb/operations/operations.factor b/extra/mongodb/operations/operations.factor index 001e8443e4..d4ee789523 100644 --- a/extra/mongodb/operations/operations.factor +++ b/extra/mongodb/operations/operations.factor @@ -64,61 +64,13 @@ GENERIC: (read-message) ( message opcode -- message ) [ opcode>> ] keep [ >>opcode ] dip flags>> >>flags ; -M: mdb-query-op (read-message) ( msg-stub opcode -- message ) - drop - [ mdb-query-msg new ] dip copy-header - read-cstring >>collection - read-int32 >>skip# - read-int32 >>return# - H{ } stream>assoc change-bytes-read >>query - dup length>> bytes-read> > - [ H{ } stream>assoc change-bytes-read >>returnfields ] when ; - -M: mdb-insert-op (read-message) ( msg-stub opcode -- message ) - drop - [ mdb-insert-msg new ] dip copy-header - read-cstring >>collection - V{ } clone >>objects - [ '[ _ length>> bytes-read> > ] ] keep tuck - '[ H{ } stream>assoc change-bytes-read _ objects>> push ] - while ; - -M: mdb-delete-op (read-message) ( msg-stub opcode -- message ) - drop - [ mdb-delete-msg new ] dip copy-header - read-cstring >>collection - H{ } stream>assoc change-bytes-read >>selector ; - -M: mdb-getmore-op (read-message) ( msg-stub opcode -- message ) - drop - [ mdb-getmore-msg new ] dip copy-header - read-cstring >>collection - read-int32 >>return# - read-longlong >>cursor ; - -M: mdb-killcursors-op (read-message) ( msg-stub opcode -- message ) - drop - [ mdb-killcursors-msg new ] dip copy-header - read-int32 >>cursors# - V{ } clone >>cursors - [ [ cursors#>> ] keep - '[ read-longlong _ cursors>> push ] times ] keep ; - -M: mdb-update-op (read-message) ( msg-stub opcode -- message ) - drop - [ mdb-update-msg new ] dip copy-header - read-cstring >>collection - read-int32 >>upsert? - H{ } stream>assoc change-bytes-read >>selector - H{ } stream>assoc change-bytes-read >>object ; - M: mdb-reply-op (read-message) ( msg-stub opcode -- message ) drop [ ] dip copy-header read-longlong >>cursor read-int32 >>start# read-int32 [ >>returned# ] keep - [ H{ } stream>assoc drop ] accumulator [ times ] dip >>objects ; + [ H{ } stream>assoc ] accumulator [ times ] dip >>objects ; : read-header ( message -- message ) read-int32 >>length From 65e495aa66da0fc85d16dac9dce960f96edb2086 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Mon, 22 Jun 2009 18:07:58 +0200 Subject: [PATCH 10/27] Remove spurious dup in io.serial.unix/linux --- extra/io/serial/unix/linux/linux.factor | 34 ++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/extra/io/serial/unix/linux/linux.factor b/extra/io/serial/unix/linux/linux.factor index 4d1878d2a9..b0cac09b5f 100644 --- a/extra/io/serial/unix/linux/linux.factor +++ b/extra/io/serial/unix/linux/linux.factor @@ -95,23 +95,23 @@ CONSTANT: PENDIN OCT: 0040000 CONSTANT: IEXTEN OCT: 0100000 M: linux lookup-baud ( n -- n ) - dup H{ - { 0 OCT: 0000000 } - { 50 OCT: 0000001 } - { 75 OCT: 0000002 } - { 110 OCT: 0000003 } - { 134 OCT: 0000004 } - { 150 OCT: 0000005 } - { 200 OCT: 0000006 } - { 300 OCT: 0000007 } - { 600 OCT: 0000010 } - { 1200 OCT: 0000011 } - { 1800 OCT: 0000012 } - { 2400 OCT: 0000013 } - { 4800 OCT: 0000014 } - { 9600 OCT: 0000015 } - { 19200 OCT: 0000016 } - { 38400 OCT: 0000017 } + H{ + { 0 OCT: 0000000 } + { 50 OCT: 0000001 } + { 75 OCT: 0000002 } + { 110 OCT: 0000003 } + { 134 OCT: 0000004 } + { 150 OCT: 0000005 } + { 200 OCT: 0000006 } + { 300 OCT: 0000007 } + { 600 OCT: 0000010 } + { 1200 OCT: 0000011 } + { 1800 OCT: 0000012 } + { 2400 OCT: 0000013 } + { 4800 OCT: 0000014 } + { 9600 OCT: 0000015 } + { 19200 OCT: 0000016 } + { 38400 OCT: 0000017 } { 57600 OCT: 0010001 } { 115200 OCT: 0010002 } { 230400 OCT: 0010003 } From ac3ec67c6a01edd6f36d52d969c3765de0d065fb Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 22 Jun 2009 11:20:54 -0500 Subject: [PATCH 11/27] separate component format from component order in image objects --- basis/cairo/cairo.factor | 3 +- basis/core-graphics/core-graphics.factor | 3 +- basis/images/bitmap/loading/loading.factor | 2 +- basis/images/images-tests.factor | 4 +- basis/images/images.factor | 74 ++++++++++++++----- basis/images/jpeg/jpeg.factor | 1 + basis/images/png/png.factor | 2 +- basis/images/processing/processing.factor | 2 +- .../tesselation/tesselation-tests.factor | 20 ++--- basis/images/tesselation/tesselation.factor | 6 +- basis/images/tiff/tiff.factor | 18 ++--- basis/opengl/gl/gl.factor | 6 ++ basis/opengl/textures/textures.factor | 71 +++++++++++++----- .../images/normalization/normalization.factor | 32 ++++---- extra/noise/noise.factor | 3 +- extra/terrain/generation/generation.factor | 1 + 16 files changed, 168 insertions(+), 80 deletions(-) diff --git a/basis/cairo/cairo.factor b/basis/cairo/cairo.factor index 3a41f0bcf9..074798a1b2 100755 --- a/basis/cairo/cairo.factor +++ b/basis/cairo/cairo.factor @@ -31,7 +31,8 @@ ERROR: cairo-error message ; &cairo_destroy @ ] make-memory-bitmap - BGRA >>component-order ; inline + BGRA >>component-order + ubyte-components >>component-type ; inline : dummy-cairo ( -- cr ) #! Sometimes we want a dummy context; eg with Pango, we want diff --git a/basis/core-graphics/core-graphics.factor b/basis/core-graphics/core-graphics.factor index 6612a43dca..a7bec04798 100644 --- a/basis/core-graphics/core-graphics.factor +++ b/basis/core-graphics/core-graphics.factor @@ -140,4 +140,5 @@ PRIVATE> : make-bitmap-image ( dim quot -- image ) '[ &CGContextRelease @ ] make-memory-bitmap - ARGB >>component-order ; inline + ARGB >>component-order + ubyte-components >>component-type ; inline diff --git a/basis/images/bitmap/loading/loading.factor b/basis/images/bitmap/loading/loading.factor index b0bd501f09..31975fa3f0 100644 --- a/basis/images/bitmap/loading/loading.factor +++ b/basis/images/bitmap/loading/loading.factor @@ -370,5 +370,5 @@ M: bitmap-image load-image* ( path bitmap-image -- bitmap ) [ loading-bitmap>bytes >>bitmap ] [ header>> [ width>> ] [ height>> abs ] bi 2array >>dim ] [ header>> height>> 0 < not >>upside-down? ] - [ bitmap>component-order >>component-order ] + [ bitmap>component-order >>component-order ubyte-components >>component-type ] } cleave ; diff --git a/basis/images/images-tests.factor b/basis/images/images-tests.factor index 8918dcb38c..ff49834a65 100644 --- a/basis/images/images-tests.factor +++ b/basis/images/images-tests.factor @@ -3,7 +3,7 @@ USING: images tools.test kernel accessors ; IN: images.tests -[ B{ 57 57 57 255 } ] [ 1 1 T{ image f { 2 3 } RGBA f B{ +[ B{ 57 57 57 255 } ] [ 1 1 T{ image f { 2 3 } RGBA ubyte-components f B{ 0 0 0 0 0 0 0 0 0 0 0 0 @@ -19,7 +19,7 @@ IN: images.tests 57 57 57 255 0 0 0 0 0 0 0 0 -} ] [ B{ 57 57 57 255 } 1 1 T{ image f { 2 3 } RGBA f B{ +} ] [ B{ 57 57 57 255 } 1 1 T{ image f { 2 3 } RGBA ubyte-components f B{ 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/basis/images/images.factor b/basis/images/images.factor index 4c76b85459..f74233c515 100755 --- a/basis/images/images.factor +++ b/basis/images/images.factor @@ -3,12 +3,58 @@ USING: combinators kernel accessors sequences math arrays ; IN: images -SINGLETONS: L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR -R16G16B16 R32G32B32 R16G16B16A16 R32G32B32A32 ; +SINGLETONS: + L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR + ubyte-components ushort-components + half-components float-components + byte-integer-components ubyte-integer-components + short-integer-components ushort-integer-components + int-integer-components uint-integer-components ; -UNION: alpha-channel BGRA RGBA ABGR ARGB R16G16B16A16 R32G32B32A32 ; +UNION: component-order + L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR ; -: bytes-per-pixel ( component-order -- n ) +UNION: component-type + ubyte-components ushort-components + half-components float-components + byte-integer-components ubyte-integer-components + short-integer-components ushort-integer-components + int-integer-components uint-integer-components ; + +UNION: unnormalized-integer-components + byte-integer-components ubyte-integer-components + short-integer-components ushort-integer-components + int-integer-components uint-integer-components ; + +UNION: alpha-channel BGRA RGBA ABGR ARGB ; + +TUPLE: image dim component-order component-type upside-down? bitmap ; + +: ( -- image ) image new ; inline + +: has-alpha? ( image -- ? ) component-order>> alpha-channel? ; + +GENERIC: load-image* ( path class -- image ) + +DEFER: bytes-per-pixel + + ( -- image ) image new ; inline - -: has-alpha? ( image -- ? ) component-order>> alpha-channel? ; - -GENERIC: load-image* ( path class -- image ) - -> first * + ] - [ component-order>> bytes-per-pixel [ * dup ] keep + ] + [ bytes-per-pixel [ * dup ] keep + ] [ bitmap>> ] tri ; : set-subseq ( new-value from to victim -- ) @@ -48,6 +80,10 @@ GENERIC: load-image* ( path class -- image ) PRIVATE> +: bytes-per-pixel ( image -- n ) + [ component-order>> component-count ] + [ component-type>> bytes-per-component ] bi * ; + : pixel-at ( x y image -- pixel ) pixel@ subseq ; diff --git a/basis/images/jpeg/jpeg.factor b/basis/images/jpeg/jpeg.factor index f61254c3cf..ca3ea8d2b4 100644 --- a/basis/images/jpeg/jpeg.factor +++ b/basis/images/jpeg/jpeg.factor @@ -298,6 +298,7 @@ MEMO: dct-matrix-blas ( -- m ) dct-matrix >float-blas-matrix ; : setup-bitmap ( image -- ) dup dim>> 16 v/n [ ceiling ] map 16 v*n >>dim BGR >>component-order + ubyte-components >>component-type f >>upside-down? dup dim>> first2 * 3 * 0 >>bitmap drop ; diff --git a/basis/images/png/png.factor b/basis/images/png/png.factor index bb470d8dd8..2469a6a72c 100755 --- a/basis/images/png/png.factor +++ b/basis/images/png/png.factor @@ -85,7 +85,7 @@ ERROR: unimplemented-color-type image ; [ ] dip { [ png-image-bytes >>bitmap ] [ [ width>> ] [ height>> ] bi 2array >>dim ] - [ drop RGB >>component-order ] + [ drop RGB >>component-order ubyte-components >>component-type ] } cleave ; : decode-indexed-color ( loading-png -- loading-png ) diff --git a/basis/images/processing/processing.factor b/basis/images/processing/processing.factor index fc463731b3..cd6754550d 100755 --- a/basis/images/processing/processing.factor +++ b/basis/images/processing/processing.factor @@ -17,7 +17,7 @@ IN: images.processing over matrix-dim >>dim swap flip flatten [ 128 * 128 + 0 max 255 min >fixnum ] map - >byte-array >>bitmap L >>component-order ; + >byte-array >>bitmap L >>component-order ubyte-components >>component-type ; :: matrix-zoom ( m f -- m' ) m matrix-dim f v*n coord-matrix diff --git a/basis/images/tesselation/tesselation-tests.factor b/basis/images/tesselation/tesselation-tests.factor index 2ac8e37ae7..9db58649a0 100644 --- a/basis/images/tesselation/tesselation-tests.factor +++ b/basis/images/tesselation/tesselation-tests.factor @@ -10,12 +10,12 @@ IN: images.tesselation [ { { - T{ image f { 2 2 } L f B{ 1 2 5 6 } } - T{ image f { 2 2 } L f B{ 3 4 7 8 } } + T{ image f { 2 2 } L ubyte-components f B{ 1 2 5 6 } } + T{ image f { 2 2 } L ubyte-components f B{ 3 4 7 8 } } } { - T{ image f { 2 2 } L f B{ 9 10 13 14 } } - T{ image f { 2 2 } L f B{ 11 12 15 16 } } + T{ image f { 2 2 } L ubyte-components f B{ 9 10 13 14 } } + T{ image f { 2 2 } L ubyte-components f B{ 11 12 15 16 } } } } ] [ @@ -23,18 +23,19 @@ IN: images.tesselation 1 16 [a,b] >byte-array >>bitmap { 4 4 } >>dim L >>component-order + ubyte-components >>component-type { 2 2 } tesselate ] unit-test [ { { - T{ image f { 2 2 } L f B{ 1 2 4 5 } } - T{ image f { 1 2 } L f B{ 3 6 } } + T{ image f { 2 2 } L ubyte-components f B{ 1 2 4 5 } } + T{ image f { 1 2 } L ubyte-components f B{ 3 6 } } } { - T{ image f { 2 1 } L f B{ 7 8 } } - T{ image f { 1 1 } L f B{ 9 } } + T{ image f { 2 1 } L ubyte-components f B{ 7 8 } } + T{ image f { 1 1 } L ubyte-components f B{ 9 } } } } ] [ @@ -42,5 +43,6 @@ IN: images.tesselation 1 9 [a,b] >byte-array >>bitmap { 3 3 } >>dim L >>component-order + ubyte-components >>component-type { 2 2 } tesselate -] unit-test \ No newline at end of file +] unit-test diff --git a/basis/images/tesselation/tesselation.factor b/basis/images/tesselation/tesselation.factor index cbdf396b48..d01bad61ea 100644 --- a/basis/images/tesselation/tesselation.factor +++ b/basis/images/tesselation/tesselation.factor @@ -19,7 +19,7 @@ IN: images.tesselation '[ _ tesselate-columns ] map ; : tile-width ( tile-bitmap original-image -- width ) - [ first length ] [ component-order>> bytes-per-pixel ] bi* /i ; + [ first length ] [ bytes-per-pixel ] bi* /i ; : ( tile-bitmap original-image -- tile-image ) clone @@ -28,8 +28,8 @@ IN: images.tesselation [ [ over tile-width ] [ length ] bi 2array >>dim ] bi ; :: tesselate ( image tess-dim -- image-grid ) - image component-order>> bytes-per-pixel :> bpp + image bytes-per-pixel :> bpp image dim>> { bpp 1 } v* :> image-dim' tess-dim { bpp 1 } v* :> tess-dim' image bitmap>> image-dim' tess-dim' tesselate-bitmap - [ [ image ] map ] map ; \ No newline at end of file + [ [ image ] map ] map ; diff --git a/basis/images/tiff/tiff.factor b/basis/images/tiff/tiff.factor index e00b05f2e7..7e12b03c13 100755 --- a/basis/images/tiff/tiff.factor +++ b/basis/images/tiff/tiff.factor @@ -484,15 +484,15 @@ ERROR: unknown-component-order ifd ; [ unknown-component-order ] } case >>bitmap ; -: ifd-component-order ( ifd -- byte-order ) +: ifd-component-order ( ifd -- component-order component-type ) bits-per-sample find-tag { - { { 32 32 32 32 } [ R32G32B32A32 ] } - { { 32 32 32 } [ R32G32B32 ] } - { { 16 16 16 16 } [ R16G16B16A16 ] } - { { 16 16 16 } [ R16G16B16 ] } - { { 8 8 8 8 } [ RGBA ] } - { { 8 8 8 } [ RGB ] } - { 8 [ LA ] } + { { 32 32 32 32 } [ RGBA float-components ] } + { { 32 32 32 } [ RGB float-components ] } + { { 16 16 16 16 } [ RGBA ushort-components ] } + { { 16 16 16 } [ RGB ushort-components ] } + { { 8 8 8 8 } [ RGBA ubyte-components ] } + { { 8 8 8 } [ RGB ubyte-components ] } + { 8 [ LA ubyte-components ] } [ unknown-component-order ] } case ; @@ -507,7 +507,7 @@ ERROR: unknown-component-order ifd ; : ifd>image ( ifd -- image ) [ ] dip { [ [ image-width find-tag ] [ image-length find-tag ] bi 2array >>dim ] - [ ifd-component-order >>component-order ] + [ ifd-component-order [ >>component-order ] [ >>component-type ] bi* ] [ bitmap>> >>bitmap ] } cleave ; diff --git a/basis/opengl/gl/gl.factor b/basis/opengl/gl/gl.factor index be457dcd00..6136115dbb 100644 --- a/basis/opengl/gl/gl.factor +++ b/basis/opengl/gl/gl.factor @@ -1801,6 +1801,12 @@ CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT HEX: 8D56 CONSTANT: GL_MAX_SAMPLES_EXT HEX: 8D57 +! GL_ARB_half_float_pixel, GL_ARB_half_float_vertex + + +CONSTANT: GL_HALF_FLOAT_ARB HEX: 140B + + ! GL_ARB_texture_float diff --git a/basis/opengl/textures/textures.factor b/basis/opengl/textures/textures.factor index 2eabbd478b..0a8fc945bf 100755 --- a/basis/opengl/textures/textures.factor +++ b/basis/opengl/textures/textures.factor @@ -4,7 +4,7 @@ USING: accessors assocs cache colors.constants destructors kernel opengl opengl.gl opengl.capabilities combinators images images.tesselation grouping specialized-arrays.float sequences math math.vectors math.matrices generalizations fry arrays namespaces -system ; +system locals ; IN: opengl.textures SYMBOL: non-power-of-2-textures? @@ -22,16 +22,46 @@ SYMBOL: non-power-of-2-textures? : delete-texture ( id -- ) [ glDeleteTextures ] (delete-gl-object) ; -GENERIC: component-order>format ( component-order -- format type ) +GENERIC: component-type>type ( component-type -- internal-format type ) +GENERIC: component-order>format ( type component-order -- type format ) +GENERIC: component-order>integer-format ( type component-order -- type format ) -M: RGB component-order>format drop GL_RGB GL_UNSIGNED_BYTE ; -M: BGR component-order>format drop GL_BGR GL_UNSIGNED_BYTE ; -M: RGBA component-order>format drop GL_RGBA GL_UNSIGNED_BYTE ; -M: ARGB component-order>format drop GL_BGRA_EXT GL_UNSIGNED_INT_8_8_8_8_REV ; -M: BGRA component-order>format drop GL_BGRA_EXT GL_UNSIGNED_BYTE ; -M: BGRX component-order>format drop GL_BGRA_EXT GL_UNSIGNED_BYTE ; -M: LA component-order>format drop GL_LUMINANCE_ALPHA GL_UNSIGNED_BYTE ; -M: L component-order>format drop GL_LUMINANCE GL_UNSIGNED_BYTE ; +ERROR: unsupported-component-order component-order ; + +M: ubyte-components component-type>type drop GL_RGBA8 GL_UNSIGNED_BYTE ; +M: ushort-components component-type>type drop GL_RGBA16 GL_UNSIGNED_SHORT ; +M: half-components component-type>type drop GL_RGBA16F_ARB GL_HALF_FLOAT_ARB ; +M: float-components component-type>type drop GL_RGBA32F_ARB GL_FLOAT ; +M: byte-integer-components component-type>type drop GL_RGBA8I_EXT GL_BYTE ; +M: short-integer-components component-type>type drop GL_RGBA16I_EXT GL_SHORT ; +M: int-integer-components component-type>type drop GL_RGBA32I_EXT GL_INT ; +M: ubyte-integer-components component-type>type drop GL_RGBA8I_EXT GL_UNSIGNED_BYTE ; +M: ushort-integer-components component-type>type drop GL_RGBA16I_EXT GL_UNSIGNED_SHORT ; +M: uint-integer-components component-type>type drop GL_RGBA32I_EXT GL_UNSIGNED_INT ; + +M: RGB component-order>format drop GL_RGB ; +M: BGR component-order>format drop GL_BGR ; +M: RGBA component-order>format drop GL_RGBA ; +M: ARGB component-order>format + swap GL_UNSIGNED_BYTE = + [ drop GL_UNSIGNED_INT_8_8_8_8_REV GL_BGRA_EXT ] + [ unsupported-component-order ] if ; +M: BGRA component-order>format drop GL_BGRA_EXT ; +M: BGRX component-order>format drop GL_BGRA_EXT ; +M: LA component-order>format drop GL_LUMINANCE_ALPHA ; +M: L component-order>format drop GL_LUMINANCE ; + +M: object component-order>format unsupported-component-order ; + +M: RGB component-order>integer-format drop GL_RGB_INTEGER_EXT ; +M: BGR component-order>integer-format drop GL_BGR_INTEGER_EXT ; +M: RGBA component-order>integer-format drop GL_RGBA_INTEGER_EXT ; +M: BGRA component-order>integer-format drop GL_BGRA_INTEGER_EXT ; +M: BGRX component-order>integer-format drop GL_BGRA_INTEGER_EXT ; +M: LA component-order>integer-format drop GL_LUMINANCE_ALPHA_INTEGER_EXT ; +M: L component-order>integer-format drop GL_LUMINANCE_INTEGER_EXT ; + +M: object component-order>integer-format unsupported-component-order ; SLOT: display-list @@ -50,18 +80,25 @@ TUPLE: single-texture image dim loc texture-coords texture display-list disposed [ dup 1 = [ next-power-of-2 ] unless ] map ] unless ; -: tex-image ( image bitmap -- ) +: image-format ( image -- internal-format format type ) + dup component-type>> + [ nip component-type>type ] [ - [ GL_TEXTURE_2D 0 GL_RGBA ] dip - [ dim>> adjust-texture-dim first2 0 ] - [ component-order>> component-order>format ] bi - ] dip - glTexImage2D ; + unnormalized-integer-components? + [ component-order>> component-order>integer-format ] + [ component-order>> component-order>format ] if + ] 2bi swap ; + +:: tex-image ( image bitmap -- ) + image image-format :> type :> format :> internal-format + GL_TEXTURE_2D 0 internal-format + image dim>> adjust-texture-dim first2 0 + format type bitmap glTexImage2D ; : tex-sub-image ( image -- ) [ GL_TEXTURE_2D 0 0 0 ] dip [ dim>> first2 ] - [ component-order>> component-order>format ] + [ image-format [ drop ] 2dip ] [ bitmap>> ] tri glTexSubImage2D ; diff --git a/extra/images/normalization/normalization.factor b/extra/images/normalization/normalization.factor index dcdf39a53e..0f4877055a 100755 --- a/extra/images/normalization/normalization.factor +++ b/extra/images/normalization/normalization.factor @@ -3,7 +3,8 @@ USING: kernel accessors grouping sequences combinators math specialized-arrays.direct.uint byte-arrays fry specialized-arrays.direct.ushort specialized-arrays.uint -specialized-arrays.ushort specialized-arrays.float images ; +specialized-arrays.ushort specialized-arrays.float images +half-floats ; IN: images.normalization [ 255 suffix ] map concat ; -: normalize-floats ( byte-array -- byte-array ) - byte-array>float-array [ 255.0 * >integer ] B{ } map-as ; +: normalize-floats ( float-array -- byte-array ) + [ 255.0 * >integer ] B{ } map-as ; +GENERIC: normalize-component-type* ( image component-type -- image ) GENERIC: normalize-component-order* ( image component-order -- image ) : normalize-component-order ( image -- image ) + dup component-type>> '[ _ normalize-component-type* ] change-bitmap dup component-order>> '[ _ normalize-component-order* ] change-bitmap ; -M: RGBA normalize-component-order* drop ; +M: float-components normalize-component-type* + drop byte-array>float-array normalize-floats ; +M: half-components normalize-component-type* + drop byte-array>half-array normalize-floats ; -M: R32G32B32A32 normalize-component-order* - drop normalize-floats ; - -M: R32G32B32 normalize-component-order* - drop normalize-floats add-dummy-alpha ; - -: RGB16>8 ( bitmap -- bitmap' ) +: ushorts>ubytes ( bitmap -- bitmap' ) byte-array>ushort-array [ -8 shift ] B{ } map-as ; inline -M: R16G16B16A16 normalize-component-order* - drop RGB16>8 ; +M: ushort-components normalize-component-type* + drop ushorts>ubytes ; -M: R16G16B16 normalize-component-order* - drop RGB16>8 add-dummy-alpha ; +M: ubyte-components normalize-component-type* + drop ; + +M: RGBA normalize-component-order* drop ; : BGR>RGB ( bitmap -- pixels ) 3 [ ] map B{ } join ; inline diff --git a/extra/noise/noise.factor b/extra/noise/noise.factor index 3de4147835..975019bfd1 100644 --- a/extra/noise/noise.factor +++ b/extra/noise/noise.factor @@ -64,7 +64,8 @@ HINTS: hashes { byte-array fixnum fixnum fixnum } ; image new swap >>dim swap >>bitmap - L >>component-order ; + L >>component-order + ubyte-components >>component-type ; :: perlin-noise-unsafe ( table point -- value ) point unit-cube :> cube diff --git a/extra/terrain/generation/generation.factor b/extra/terrain/generation/generation.factor index 72221d7b0e..661ea88de6 100644 --- a/extra/terrain/generation/generation.factor +++ b/extra/terrain/generation/generation.factor @@ -36,6 +36,7 @@ TUPLE: segment image ; swap >>bitmap RGBA >>component-order + ubyte-components >>component-type terrain-segment-size >>dim ; : terrain-segment ( terrain at -- image ) From 7de264c0282f27a3c3ac7ac247776264a7888a09 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 22 Jun 2009 18:07:46 -0500 Subject: [PATCH 12/27] GL_BGR and GL_BGRA are standard these days --- basis/opengl/gl/gl.factor | 4 ---- basis/opengl/textures/textures.factor | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/basis/opengl/gl/gl.factor b/basis/opengl/gl/gl.factor index 6136115dbb..fb3b10354b 100644 --- a/basis/opengl/gl/gl.factor +++ b/basis/opengl/gl/gl.factor @@ -356,10 +356,6 @@ CONSTANT: GL_DITHER HEX: 0BD0 CONSTANT: GL_RGB HEX: 1907 CONSTANT: GL_RGBA HEX: 1908 -! GL_BGRA_ext: http://www.opengl.org/registry/specs/EXT/bgra.txt -CONSTANT: GL_BGR_EXT HEX: 80E0 -CONSTANT: GL_BGRA_EXT HEX: 80E1 - ! Implementation limits CONSTANT: GL_MAX_LIST_NESTING HEX: 0B31 CONSTANT: GL_MAX_ATTRIB_STACK_DEPTH HEX: 0D35 diff --git a/basis/opengl/textures/textures.factor b/basis/opengl/textures/textures.factor index 0a8fc945bf..c2fa02ac5e 100755 --- a/basis/opengl/textures/textures.factor +++ b/basis/opengl/textures/textures.factor @@ -44,10 +44,10 @@ M: BGR component-order>format drop GL_BGR ; M: RGBA component-order>format drop GL_RGBA ; M: ARGB component-order>format swap GL_UNSIGNED_BYTE = - [ drop GL_UNSIGNED_INT_8_8_8_8_REV GL_BGRA_EXT ] + [ drop GL_UNSIGNED_INT_8_8_8_8_REV GL_BGRA ] [ unsupported-component-order ] if ; -M: BGRA component-order>format drop GL_BGRA_EXT ; -M: BGRX component-order>format drop GL_BGRA_EXT ; +M: BGRA component-order>format drop GL_BGRA ; +M: BGRX component-order>format drop GL_BGRA ; M: LA component-order>format drop GL_LUMINANCE_ALPHA ; M: L component-order>format drop GL_LUMINANCE ; From 76b1f9ce03d0679b0a492a6b4c93bc6ba9801352 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 22 Jun 2009 19:01:50 -0500 Subject: [PATCH 13/27] some new UI words: handles-gesture? checks whether a gesture will be handled. topmost-window returns the topmost world object --- basis/ui/gestures/gestures-docs.factor | 15 +++++++++++++-- basis/ui/gestures/gestures.factor | 13 ++++++++++++- basis/ui/ui-docs.factor | 4 ++++ basis/ui/ui.factor | 3 +++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/basis/ui/gestures/gestures-docs.factor b/basis/ui/gestures/gestures-docs.factor index 91c5ea8312..1e5a8df1dd 100644 --- a/basis/ui/gestures/gestures-docs.factor +++ b/basis/ui/gestures/gestures-docs.factor @@ -13,9 +13,20 @@ $nl "Outputs " { $link f } " if the gesture was handled, and " { $link t } " if the gesture should be passed on to the gadget's parent." $nl "The default implementation looks at the " { $snippet "\"gestures\"" } " word property of each superclass of the gadget's class." } -{ $notes "Methods should be defined on this word if you desire to handle an arbitrary set of gestures. To define handlers for a fixed set, it is easier to use " { $link set-gestures } "." } ; +{ $notes "Methods should be defined on this word if you desire to handle an arbitrary set of gestures. To define handlers for a fixed set, it is easier to use " { $link set-gestures } ". If you define a method on " { $snippet "handle-gesture" } ", you should also override " { $link handles-gesture? } "." } ; -{ propagate-gesture handle-gesture set-gestures } related-words +HELP: handles-gesture? +{ $values { "gesture" "a gesture" } { "gadget" "the receiver of the gesture" } { "?" "a boolean" } } +{ $contract "Returns a true value if " { $snippet "gadget" } " would handle " { $snippet "gesture" } " in its " { $link handle-gesture } " method." +$nl +"The default implementation looks at the " { $snippet "\"gestures\"" } " word property of each superclass of the gadget's class and returns true if a handler is present for " { $snippet "gesture" } "." } +{ $notes "This word is used in Factor's MacOS X UI to validate menu items." } ; + +HELP: parents-handle-gesture? +{ $values { "gesture" "a gesture" } { "gadget" "the receiver of the gesture" } { "?" "a boolean" } } +{ $contract "Returns a true value if " { $snippet "gadget" } " or any of its ancestors would handle " { $snippet "gesture" } " in its " { $link handle-gesture } " method." } ; + +{ propagate-gesture handle-gesture handles-gesture? set-gestures } related-words HELP: propagate-gesture { $values { "gesture" "a gesture" } { "gadget" gadget } } diff --git a/basis/ui/gestures/gestures.factor b/basis/ui/gestures/gestures.factor index dcfb8d4d66..26eb45c8d0 100644 --- a/basis/ui/gestures/gestures.factor +++ b/basis/ui/gestures/gestures.factor @@ -7,13 +7,24 @@ sets columns fry deques ui.gadgets ui.gadgets.private ascii combinators.short-circuit ; IN: ui.gestures +: get-gesture-handler ( gesture gadget -- quot ) + class superclasses [ "gestures" word-prop ] map assoc-stack ; + GENERIC: handle-gesture ( gesture gadget -- ? ) M: object handle-gesture [ nip ] - [ class superclasses [ "gestures" word-prop ] map assoc-stack ] 2bi + [ get-gesture-handler ] 2bi dup [ call( gadget -- ) f ] [ 2drop t ] if ; +GENERIC: handles-gesture? ( gesture gadget -- ? ) + +M: object handles-gesture? ( gesture gadget -- ? ) + get-gesture-handler >boolean ; + +: parents-handle-gesture? ( gesture gadget -- ? ) + [ handles-gesture? not ] with each-parent not ; + : set-gestures ( class hash -- ) "gestures" set-word-prop ; : gesture-queue ( -- deque ) \ gesture-queue get ; diff --git a/basis/ui/ui-docs.factor b/basis/ui/ui-docs.factor index b381c4e677..43dd22cde7 100644 --- a/basis/ui/ui-docs.factor +++ b/basis/ui/ui-docs.factor @@ -81,6 +81,10 @@ HELP: with-ui HELP: beep { $description "Plays the system beep sound." } ; +HELP: topmost-window +{ $values { "world" world } } +{ $description "Returns the " { $link world } " representing the currently focused window." } ; + ARTICLE: "ui-glossary" "UI glossary" { $table { "color" { "an instance of " { $link color } } } diff --git a/basis/ui/ui.factor b/basis/ui/ui.factor index 37ec4f35b1..db05465986 100644 --- a/basis/ui/ui.factor +++ b/basis/ui/ui.factor @@ -224,6 +224,9 @@ PRIVATE> : raise-window ( gadget -- ) find-world raise-window* ; +: topmost-window ( -- world ) + windows get last second ; + HOOK: close-window ui-backend ( gadget -- ) M: object close-window From 85acbf4abc9f90578cc4e0fd2d8c66ab2f7d12e7 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 22 Jun 2009 20:16:52 -0500 Subject: [PATCH 14/27] validate cocoa menu items with handles-gesture? --- basis/ui/backend/cocoa/views/views.factor | 40 +++++++++++++++++++---- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/basis/ui/backend/cocoa/views/views.factor b/basis/ui/backend/cocoa/views/views.factor index 9fb83e4865..a7b9fd3801 100644 --- a/basis/ui/backend/cocoa/views/views.factor +++ b/basis/ui/backend/cocoa/views/views.factor @@ -1,11 +1,12 @@ ! Copyright (C) 2006, 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien alien.c-types arrays assocs cocoa kernel math -cocoa.messages cocoa.subclassing cocoa.classes cocoa.views -cocoa.application cocoa.pasteboard cocoa.types cocoa.windows sequences -ui ui.private ui.gadgets ui.gadgets.private ui.gadgets.worlds -ui.gestures core-foundation.strings core-graphics core-graphics.types -threads combinators math.rectangles ; +USING: accessors alien alien.c-types alien.strings arrays assocs +cocoa kernel math cocoa.messages cocoa.subclassing cocoa.classes +cocoa.views cocoa.application cocoa.pasteboard cocoa.types +cocoa.windows sequences io.encodings.ascii ui ui.private ui.gadgets +ui.gadgets.private ui.gadgets.worlds ui.gestures +core-foundation.strings core-graphics core-graphics.types threads +combinators math.rectangles ; IN: ui.backend.cocoa.views : send-mouse-moved ( view event -- ) @@ -121,6 +122,25 @@ CONSTANT: key-codes [ drop dim>> first2 ] 2bi ; +CONSTANT: selector>action H{ + { "undo:" undo-action } + { "redo:" redo-action } + { "cut:" cut-action } + { "copy:" copy-action } + { "paste:" paste-action } + { "delete:" delete-action } + { "selectAll:" select-all-action } + { "newDocument:" new-action } + { "openDocument:" open-action } + { "saveDocument:" save-action } + { "saveDocumentAs:" save-as-action } + { "revertDocumentToSaved:" revert-action } +} + +: validate-action ( world selector -- ? validated? ) + selector>action at + [ swap world-focus parents-handle-gesture? t ] [ drop f f ] if* ; + CLASS: { { +superclass+ "NSOpenGLView" } { +name+ "FactorView" } @@ -197,6 +217,14 @@ CLASS: { [ nip send-key-up-event ] } +{ "validateUserInterfaceItem:" "char" { "id" "SEL" "id" } + [ + nip -> action + 2dup [ window ] [ ascii alien>string ] bi* validate-action + [ [ 2drop ] dip >c-bool ] [ SUPER-> validateUserInterfaceItem: ] if + ] +} + { "undo:" "id" { "id" "SEL" "id" } [ nip undo-action send-action$ ] } From c051665efba0edf7392064770b965cb44abbee93 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Tue, 23 Jun 2009 20:01:53 -0500 Subject: [PATCH 15/27] throw in image component-orders for some more opengl formats --- basis/images/images.factor | 13 ++++++++++--- basis/opengl/gl/gl.factor | 11 +++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/basis/images/images.factor b/basis/images/images.factor index f74233c515..ecf3de26e8 100755 --- a/basis/images/images.factor +++ b/basis/images/images.factor @@ -4,7 +4,8 @@ USING: combinators kernel accessors sequences math arrays ; IN: images SINGLETONS: - L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR + A L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR + INTENSITY DEPTH R RG ubyte-components ushort-components half-components float-components byte-integer-components ubyte-integer-components @@ -12,7 +13,8 @@ SINGLETONS: int-integer-components uint-integer-components ; UNION: component-order - L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR ; + A L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR + INTENSITY DEPTH R RG ; UNION: component-type ubyte-components ushort-components @@ -26,7 +28,7 @@ UNION: unnormalized-integer-components short-integer-components ushort-integer-components int-integer-components uint-integer-components ; -UNION: alpha-channel BGRA RGBA ABGR ARGB ; +UNION: alpha-channel BGRA RGBA ABGR ARGB LA A INTENSITY ; TUPLE: image dim component-order component-type upside-down? bitmap ; @@ -56,6 +58,7 @@ DEFER: bytes-per-pixel : component-count ( component-order -- n ) { + { A [ 1 ] } { L [ 1 ] } { LA [ 2 ] } { BGR [ 3 ] } @@ -68,6 +71,10 @@ DEFER: bytes-per-pixel { XRGB [ 4 ] } { BGRX [ 4 ] } { XBGR [ 4 ] } + { INTENSITY [ 1 ] } + { DEPTH [ 1 ] } + { R [ 1 ] } + { RG [ 2 ] } } case ; : pixel@ ( x y image -- start end bitmap ) diff --git a/basis/opengl/gl/gl.factor b/basis/opengl/gl/gl.factor index fb3b10354b..382ff06dd4 100644 --- a/basis/opengl/gl/gl.factor +++ b/basis/opengl/gl/gl.factor @@ -1906,6 +1906,17 @@ CONSTANT: GL_MIN_PROGRAM_TEXEL_OFFSET_EXT HEX: 8904 CONSTANT: GL_MAX_PROGRAM_TEXEL_OFFSET_EXT HEX: 8905 +! GL_ARB_texture_rectangle + + +CONSTANT: GL_TEXTURE_RECTANGLE_ARB HEX: 84F5 +CONSTANT: GL_TEXTURE_BINDING_RECTANGLE_ARB HEX: 84F6 +CONSTANT: GL_PROXY_TEXTURE_RECTANGLE_ARB HEX: 84F7 +CONSTANT: GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB HEX: 84F8 +CONSTANT: GL_SAMPLER_2D_RECT_ARB HEX: 8B63 +CONSTANT: GL_SAMPLER_2D_RECT_SHADOW_ARB HEX: 8B64 + + ! GL_EXT_geometry_shader4 From c53aca6016316583b790171c7ad9a690de77c3fa Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 23 Jun 2009 21:32:51 -0500 Subject: [PATCH 16/27] compiler.cfg.linear-scan: fix coalescing to take lifetime holes into account --- .../linear-scan/allocation/allocation.factor | 39 ++++++------------- .../allocation/coalescing/coalescing.factor | 14 ++++++- .../live-intervals/live-intervals.factor | 22 +++++++++++ 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/basis/compiler/cfg/linear-scan/allocation/allocation.factor b/basis/compiler/cfg/linear-scan/allocation/allocation.factor index 3dcc925d7c..4425050d4b 100644 --- a/basis/compiler/cfg/linear-scan/allocation/allocation.factor +++ b/basis/compiler/cfg/linear-scan/allocation/allocation.factor @@ -2,44 +2,27 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs heaps kernel namespaces sequences fry math combinators arrays sorting compiler.utilities +compiler.cfg.linear-scan.live-intervals compiler.cfg.linear-scan.allocation.coalescing compiler.cfg.linear-scan.allocation.spilling compiler.cfg.linear-scan.allocation.splitting compiler.cfg.linear-scan.allocation.state ; IN: compiler.cfg.linear-scan.allocation -: relevant-ranges ( new inactive -- new' inactive' ) - ! Slice off all ranges of 'inactive' that precede the start of 'new' - [ [ ranges>> ] bi@ ] [ nip start>> ] 2bi '[ to>> _ >= ] filter ; +: free-positions ( new -- assoc ) + vreg>> reg-class>> registers get at [ 1/0. ] H{ } map>assoc ; -: intersect-live-range ( range1 range2 -- n/f ) - 2dup [ from>> ] bi@ > [ swap ] when - 2dup [ to>> ] [ from>> ] bi* >= [ nip from>> ] [ 2drop f ] if ; +: active-positions ( new -- assoc ) + vreg>> active-intervals-for [ reg>> 0 ] H{ } map>assoc ; -: intersect-live-ranges ( ranges1 ranges2 -- n ) - { - { [ over empty? ] [ 2drop 1/0. ] } - { [ dup empty? ] [ 2drop 1/0. ] } - [ - 2dup [ first ] bi@ intersect-live-range dup [ 2nip ] [ - drop - 2dup [ first from>> ] bi@ < - [ [ rest-slice ] dip ] [ rest-slice ] if - intersect-live-ranges - ] if - ] - } cond ; - -: intersect-inactive ( new inactive -- n ) - relevant-ranges intersect-live-ranges ; +: inactive-positions ( new -- assoc ) + dup vreg>> inactive-intervals-for + [ [ reg>> swap ] keep relevant-ranges intersect-live-ranges ] + with H{ } map>assoc ; : compute-free-pos ( new -- free-pos ) - dup vreg>> - [ nip reg-class>> registers get at [ 1/0. ] H{ } map>assoc ] - [ inactive-intervals-for [ [ reg>> swap ] keep intersect-inactive ] with H{ } map>assoc ] - [ nip active-intervals-for [ reg>> 0 ] H{ } map>assoc ] - 2tri 3array assoc-combine - >alist alist-max ; + [ free-positions ] [ inactive-positions ] [ active-positions ] tri + 3array assoc-combine >alist alist-max ; : no-free-registers? ( result -- ? ) second 0 = ; inline diff --git a/basis/compiler/cfg/linear-scan/allocation/coalescing/coalescing.factor b/basis/compiler/cfg/linear-scan/allocation/coalescing/coalescing.factor index 99ed75dcbc..b2b9202204 100644 --- a/basis/compiler/cfg/linear-scan/allocation/coalescing/coalescing.factor +++ b/basis/compiler/cfg/linear-scan/allocation/coalescing/coalescing.factor @@ -1,18 +1,28 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel sequences +combinators.short-circuit +compiler.cfg.linear-scan.live-intervals compiler.cfg.linear-scan.allocation.state ; IN: compiler.cfg.linear-scan.allocation.coalescing : active-interval ( vreg -- live-interval ) dup [ dup active-intervals-for [ vreg>> = ] with find nip ] when ; +: intersects-inactive-intervals? ( live-interval -- ? ) + dup vreg>> inactive-intervals-for + [ relevant-ranges intersect-live-ranges 1/0. = ] with all? ; + : coalesce? ( live-interval -- ? ) - [ start>> ] [ copy-from>> active-interval ] bi - dup [ end>> = ] [ 2drop f ] if ; + { + [ copy-from>> active-interval ] + [ [ start>> ] [ copy-from>> active-interval end>> ] bi = ] + [ intersects-inactive-intervals? ] + } 1&& ; : coalesce ( live-interval -- ) dup copy-from>> active-interval [ [ add-active ] [ [ delete-active ] [ add-handled ] bi ] bi* ] [ reg>> >>reg drop ] 2bi ; + \ No newline at end of file diff --git a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor index c88f7fd21b..c67a7bb021 100644 --- a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor +++ b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor @@ -144,3 +144,25 @@ M: ##copy-float compute-live-intervals* live-intervals set [ compute-live-intervals-step ] each ] keep values dup finish-live-intervals ; + +: relevant-ranges ( new inactive -- new' inactive' ) + ! Slice off all ranges of 'inactive' that precede the start of 'new' + [ [ ranges>> ] bi@ ] [ nip start>> ] 2bi '[ to>> _ >= ] filter ; + +: intersect-live-range ( range1 range2 -- n/f ) + 2dup [ from>> ] bi@ > [ swap ] when + 2dup [ to>> ] [ from>> ] bi* >= [ nip from>> ] [ 2drop f ] if ; + +: intersect-live-ranges ( ranges1 ranges2 -- n ) + { + { [ over empty? ] [ 2drop 1/0. ] } + { [ dup empty? ] [ 2drop 1/0. ] } + [ + 2dup [ first ] bi@ intersect-live-range dup [ 2nip ] [ + drop + 2dup [ first from>> ] bi@ < + [ [ rest-slice ] dip ] [ rest-slice ] if + intersect-live-ranges + ] if + ] + } cond ; From 41d804ddbd00b7041b97f98894a6b385a9ea6d3c Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 24 Jun 2009 13:04:20 +0200 Subject: [PATCH 17/27] Pack primes numbers by slices of 30 In any given 30 successive integers greater than 5, there are at most 8 prime numbers. Use this to tightly pack the result of the Eratostene sieve. This lets us store more prime numbers than before in less space. --- basis/math/primes/erato/erato-docs.factor | 10 ++--- basis/math/primes/erato/erato-tests.factor | 11 +++++- basis/math/primes/erato/erato.factor | 46 +++++++++++++++------- basis/math/primes/primes-tests.factor | 3 ++ basis/math/primes/primes.factor | 18 ++++----- 5 files changed, 56 insertions(+), 32 deletions(-) diff --git a/basis/math/primes/erato/erato-docs.factor b/basis/math/primes/erato/erato-docs.factor index b12ea45052..1e32818fe3 100644 --- a/basis/math/primes/erato/erato-docs.factor +++ b/basis/math/primes/erato/erato-docs.factor @@ -3,10 +3,8 @@ IN: math.primes.erato HELP: sieve { $values { "n" "the greatest odd number to consider" } { "arr" "a bit array" } } -{ $description "Return a bit array containing a primality bit for every odd number between 3 and " { $snippet "n" } " (inclusive). " { $snippet ">index" } " can be used to retrieve the index of an odd number to be tested." } ; +{ $description "Apply Eratostene sieve up to " { $snippet "n" } ". Primality can then be tested using " { $link sieve } "." } ; -HELP: >index -{ $values { "n" "an odd number" } { "i" "the corresponding index" } } -{ $description "Retrieve the index corresponding to the odd number on the stack." } ; - -{ sieve >index } related-words +HELP: marked-prime? +{ $values { "n" "an integer" } { "arr" "a byte array returned by " { $link sieve } } { "?" "a boolean" } } +{ $description "Check whether a number between 3 and the limit given to " { $link sieve } " has been marked as a prime number."} ; diff --git a/basis/math/primes/erato/erato-tests.factor b/basis/math/primes/erato/erato-tests.factor index 917824c9c1..e78e5210f9 100644 --- a/basis/math/primes/erato/erato-tests.factor +++ b/basis/math/primes/erato/erato-tests.factor @@ -1,3 +1,10 @@ -USING: bit-arrays math.primes.erato tools.test ; +USING: byte-arrays math math.bitwise math.primes.erato sequences tools.test ; -[ ?{ t t t f t t f t t f t f f t } ] [ 29 sieve ] unit-test +[ B{ 255 251 247 126 } ] [ 100 sieve ] unit-test +[ 1 100 sieve marked-prime? ] [ bounds-error? ] must-fail-with +[ 120 100 sieve marked-prime? ] [ bounds-error? ] must-fail-with +[ f ] [ 119 100 sieve marked-prime? ] unit-test +[ t ] [ 113 100 sieve marked-prime? ] unit-test + +! There are 25997 primes below 300000. 1 must be removed and 3 5 7 added. +[ 25997 ] [ 299999 sieve [ bit-count ] sigma 2 + ] unit-test \ No newline at end of file diff --git a/basis/math/primes/erato/erato.factor b/basis/math/primes/erato/erato.factor index 70a9c10ff5..673f9c97cd 100644 --- a/basis/math/primes/erato/erato.factor +++ b/basis/math/primes/erato/erato.factor @@ -1,25 +1,41 @@ ! Copyright (C) 2009 Samuel Tardieu. ! See http://factorcode.org/license.txt for BSD license. -USING: bit-arrays kernel math math.functions math.ranges sequences ; +USING: arrays byte-arrays kernel math math.bitwise math.functions math.order +math.ranges sequences sequences.private ; IN: math.primes.erato -: >index ( n -- i ) - 3 - 2 /i ; inline + ( i -- n ) - 2 * 3 + ; inline +CONSTANT: masks B{ 0 128 0 0 0 0 0 64 0 0 0 32 0 16 0 0 0 8 0 4 0 0 0 2 0 0 0 0 0 1 } -: mark-multiples ( i arr -- ) - [ index> [ sq >index ] keep ] dip - [ length 1 - swap f swap ] keep - [ set-nth ] curry with each ; +: bit-pos ( n -- byte/f mask/f ) + 30 /mod masks nth-unsafe dup zero? [ 2drop f f ] when ; -: maybe-mark-multiples ( i arr -- ) - 2dup nth [ mark-multiples ] [ 2drop ] if ; +: marked-unsafe? ( n arr -- ? ) + [ bit-pos ] dip swap [ [ nth-unsafe ] [ bitand zero? not ] bi* ] [ 2drop f ] if* ; -: init-sieve ( n -- arr ) - >index 1 + dup set-bits ; +: unmark ( n arr -- ) + [ bit-pos swap ] dip + over [ [ swap unmask ] change-nth-unsafe ] [ 3drop ] if ; + +: upper-bound ( arr -- n ) length 30 * 1 - ; + +: unmark-multiples ( i arr -- ) + 2dup marked-unsafe? [ + [ [ dup sq ] [ upper-bound ] bi* rot ] keep + [ unmark ] curry each + ] [ + 2drop + ] if ; + +: init-sieve ( n -- arr ) 29 + 30 /i 255 >byte-array ; + +PRIVATE> : sieve ( n -- arr ) - [ init-sieve ] [ sqrt >index [0,b] ] bi - over [ maybe-mark-multiples ] curry each ; foldable + init-sieve [ 2 swap upper-bound sqrt [a,b] ] keep + [ [ unmark-multiples ] curry each ] keep ; + +: marked-prime? ( n arr -- ? ) + 2dup upper-bound 2 swap between? [ bounds-error ] unless + over { 2 3 5 } member? [ 2drop t ] [ marked-unsafe? ] if ; \ No newline at end of file diff --git a/basis/math/primes/primes-tests.factor b/basis/math/primes/primes-tests.factor index 6580f0780e..a950395bf4 100644 --- a/basis/math/primes/primes-tests.factor +++ b/basis/math/primes/primes-tests.factor @@ -10,6 +10,9 @@ IN: math.primes.tests { { 4999963 4999999 5000011 5000077 5000081 } } [ 4999962 5000082 primes-between >array ] unit-test +{ { 8999981 8999993 9000011 9000041 } } +[ 8999980 9000045 primes-between >array ] unit-test + [ 2 ] [ 1 next-prime ] unit-test [ 3 ] [ 2 next-prime ] unit-test [ 5 ] [ 3 next-prime ] unit-test diff --git a/basis/math/primes/primes.factor b/basis/math/primes/primes.factor index e3985fc600..ea8c60508d 100644 --- a/basis/math/primes/primes.factor +++ b/basis/math/primes/primes.factor @@ -1,31 +1,31 @@ ! Copyright (C) 2007-2009 Samuel Tardieu. ! See http://factorcode.org/license.txt for BSD license. USING: combinators kernel math math.bitwise math.functions -math.order math.primes.erato math.primes.miller-rabin -math.ranges random sequences sets fry ; +math.order math.primes.erato math.primes.erato.private +math.primes.miller-rabin math.ranges literals random sequences sets ; IN: math.primes index 4999999 sieve nth ; +: look-in-bitmap ( n -- ? ) $[ 8999999 sieve ] marked-unsafe? ; inline -: really-prime? ( n -- ? ) - dup 5000000 < [ look-in-bitmap ] [ miller-rabin ] if ; foldable +: (prime?) ( n -- ? ) + dup 8999999 <= [ look-in-bitmap ] [ miller-rabin ] if ; PRIVATE> : prime? ( n -- ? ) { - { [ dup 2 < ] [ drop f ] } + { [ dup 7 < ] [ { 2 3 5 } member? ] } { [ dup even? ] [ 2 = ] } - [ really-prime? ] + [ (prime?) ] } cond ; foldable : next-prime ( n -- p ) dup 2 < [ drop 2 ] [ - next-odd [ dup really-prime? ] [ 2 + ] until + next-odd [ dup prime? ] [ 2 + ] until ] if ; foldable : primes-between ( low high -- seq ) @@ -65,5 +65,5 @@ ERROR: too-few-primes n numbits ; : unique-primes ( n numbits -- seq ) 2dup 2^ estimated-primes > [ too-few-primes ] when - 2dup '[ _ random-prime ] replicate + 2dup [ random-prime ] curry replicate dup all-unique? [ 2nip ] [ drop unique-primes ] if ; From 29b5a1dff59f61811ff2d0beb8598732e37ab1e8 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 24 Jun 2009 13:13:10 +0200 Subject: [PATCH 18/27] Add extra tests for math.primes --- basis/math/primes/primes-tests.factor | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/basis/math/primes/primes-tests.factor b/basis/math/primes/primes-tests.factor index a950395bf4..3d21a3e7d6 100644 --- a/basis/math/primes/primes-tests.factor +++ b/basis/math/primes/primes-tests.factor @@ -1,5 +1,5 @@ -USING: arrays math math.primes math.primes.miller-rabin -tools.test ; +USING: arrays kernel math math.primes math.primes.miller-rabin +sequences tools.test ; IN: math.primes.tests { 1237 } [ 1234 next-prime ] unit-test @@ -21,3 +21,8 @@ IN: math.primes.tests [ 100000000000031 ] [ 100000000000000 next-prime ] unit-test [ 49 ] [ 50 random-prime log2 ] unit-test + +[ t ] [ 5000077 dup find-relative-prime coprime? ] unit-test + +[ 5 t { 14 14 14 14 14 } ] +[ 5 15 unique-primes [ length ] [ [ prime? ] all? ] [ [ log2 ] map ] tri ] unit-test From eaddd1fdd4f6e70b32b4b52cae5afe2ff0973c7a Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Wed, 24 Jun 2009 08:26:30 -0500 Subject: [PATCH 19/27] provide image component-orders and component-types for all GPU texture formats --- basis/images/images.factor | 59 ++++- basis/opengl/gl/gl.factor | 54 ++++ basis/opengl/textures/textures-tests.factor | 27 +- basis/opengl/textures/textures.factor | 270 ++++++++++++++++---- 4 files changed, 351 insertions(+), 59 deletions(-) diff --git a/basis/images/images.factor b/basis/images/images.factor index ecf3de26e8..9519968eb8 100755 --- a/basis/images/images.factor +++ b/basis/images/images.factor @@ -5,31 +5,50 @@ IN: images SINGLETONS: A L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR - INTENSITY DEPTH R RG - ubyte-components ushort-components + INTENSITY DEPTH DEPTH-STENCIL R RG + ubyte-components ushort-components uint-components half-components float-components byte-integer-components ubyte-integer-components short-integer-components ushort-integer-components - int-integer-components uint-integer-components ; + int-integer-components uint-integer-components + u-5-5-5-1-components u-5-6-5-components + u-10-10-10-2-components + u-24-components u-24-8-components + u-9-9-9-e5-components + float-11-11-10-components ; UNION: component-order A L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR - INTENSITY DEPTH R RG ; + INTENSITY DEPTH DEPTH-STENCIL R RG ; UNION: component-type ubyte-components ushort-components half-components float-components byte-integer-components ubyte-integer-components short-integer-components ushort-integer-components - int-integer-components uint-integer-components ; + int-integer-components uint-integer-components + u-5-5-5-1-components u-5-6-5-components + u-10-10-10-2-components + u-24-components u-24-8-components + u-9-9-9-e5-components + float-11-11-10-components ; UNION: unnormalized-integer-components byte-integer-components ubyte-integer-components short-integer-components ushort-integer-components int-integer-components uint-integer-components ; +UNION: packed-components + u-5-5-5-1-components u-5-6-5-components + u-10-10-10-2-components + u-24-components u-24-8-components + u-9-9-9-e5-components + float-11-11-10-components ; + UNION: alpha-channel BGRA RGBA ABGR ARGB LA A INTENSITY ; +UNION: alpha-channel-precedes-colors ABGR ARGB XBGR XRGB ; + TUPLE: image dim component-order component-type upside-down? bitmap ; : ( -- image ) image new ; inline @@ -38,14 +57,11 @@ TUPLE: image dim component-order component-type upside-down? bitmap ; GENERIC: load-image* ( path class -- image ) -DEFER: bytes-per-pixel - -> packed-components? + [ component-type>> bytes-per-packed-pixel ] [ + [ component-order>> component-count ] + [ component-type>> bytes-per-component ] bi * + ] if ; + +> first * + ] [ bytes-per-pixel [ * dup ] keep + ] @@ -87,10 +124,6 @@ DEFER: bytes-per-pixel PRIVATE> -: bytes-per-pixel ( image -- n ) - [ component-order>> component-count ] - [ component-type>> bytes-per-component ] bi * ; - : pixel-at ( x y image -- pixel ) pixel@ subseq ; diff --git a/basis/opengl/gl/gl.factor b/basis/opengl/gl/gl.factor index 382ff06dd4..60464af458 100644 --- a/basis/opengl/gl/gl.factor +++ b/basis/opengl/gl/gl.factor @@ -1803,6 +1803,35 @@ CONSTANT: GL_MAX_SAMPLES_EXT HEX: 8D57 CONSTANT: GL_HALF_FLOAT_ARB HEX: 140B +! GL_ARB_texture_rg + + +CONSTANT: GL_R8 HEX: 8229 +CONSTANT: GL_R16 HEX: 822A +CONSTANT: GL_RG8 HEX: 822B +CONSTANT: GL_RG16 HEX: 822C +CONSTANT: GL_R16F HEX: 822D +CONSTANT: GL_R32F HEX: 822E +CONSTANT: GL_RG16F HEX: 822F +CONSTANT: GL_RG32F HEX: 8230 +CONSTANT: GL_R8I HEX: 8231 +CONSTANT: GL_R8UI HEX: 8232 +CONSTANT: GL_R16I HEX: 8233 +CONSTANT: GL_R16UI HEX: 8234 +CONSTANT: GL_R32I HEX: 8235 +CONSTANT: GL_R32UI HEX: 8236 +CONSTANT: GL_RG8I HEX: 8237 +CONSTANT: GL_RG8UI HEX: 8238 +CONSTANT: GL_RG16I HEX: 8239 +CONSTANT: GL_RG16UI HEX: 823A +CONSTANT: GL_RG32I HEX: 823B +CONSTANT: GL_RG32UI HEX: 823C +CONSTANT: GL_RG HEX: 8227 +CONSTANT: GL_COMPRESSED_RED HEX: 8225 +CONSTANT: GL_COMPRESSED_RG HEX: 8226 +CONSTANT: GL_RG_INTEGER HEX: 8228 + + ! GL_ARB_texture_float @@ -1917,6 +1946,31 @@ CONSTANT: GL_SAMPLER_2D_RECT_ARB HEX: 8B63 CONSTANT: GL_SAMPLER_2D_RECT_SHADOW_ARB HEX: 8B64 +! GL_EXT_packed_depth_stencil + + +CONSTANT: GL_DEPTH_STENCIL_EXT HEX: 84F9 +CONSTANT: GL_UNSIGNED_INT_24_8_EXT HEX: 84FA +CONSTANT: GL_DEPTH24_STENCIL8_EXT HEX: 88F0 +CONSTANT: GL_TEXTURE_STENCIL_SIZE_EXT HEX: 88F1 + + +! GL_EXT_texture_shared_exponent + + +CONSTANT: GL_RGB9_E5_EXT HEX: 8C3D +CONSTANT: GL_UNSIGNED_INT_5_9_9_9_REV_EXT HEX: 8C3E +CONSTANT: GL_TEXTURE_SHARED_SIZE_EXT HEX: 8C3F + + +! GL_EXT_packed_float + + +CONSTANT: GL_R11F_G11F_B10F_EXT HEX: 8C3A +CONSTANT: GL_UNSIGNED_INT_10F_11F_11F_REV_EXT HEX: 8C3B +CONSTANT: GL_RGBA_SIGNED_COMPONENTS_EXT HEX: 8C3C + + ! GL_EXT_geometry_shader4 diff --git a/basis/opengl/textures/textures-tests.factor b/basis/opengl/textures/textures-tests.factor index 24f43c52ac..220d2e8e87 100644 --- a/basis/opengl/textures/textures-tests.factor +++ b/basis/opengl/textures/textures-tests.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: tools.test opengl.textures opengl.textures.private -images kernel namespaces accessors sequences ; +USING: tools.test opengl.gl opengl.textures opengl.textures.private +images kernel namespaces accessors sequences literals ; IN: opengl.textures.tests [ @@ -15,4 +15,25 @@ IN: opengl.textures.tests { { 10 30 } { 30 300 } } } [ [ image new swap >>dim ] map ] map image-locs -] unit-test \ No newline at end of file +] unit-test + +${ GL_RGBA8 GL_RGBA GL_UNSIGNED_BYTE } +[ RGBA ubyte-components (image-format) ] unit-test + +${ GL_RGBA8 GL_BGRA GL_UNSIGNED_BYTE } +[ BGRA ubyte-components (image-format) ] unit-test + +${ GL_RGBA8 GL_BGRA GL_UNSIGNED_INT_8_8_8_8_REV } +[ ARGB ubyte-components (image-format) ] unit-test + +${ GL_RGBA32F_ARB GL_RGBA GL_FLOAT } +[ RGBA float-components (image-format) ] unit-test + +${ GL_RGBA32UI_EXT GL_BGRA_INTEGER_EXT GL_UNSIGNED_INT } +[ BGRA uint-integer-components (image-format) ] unit-test + +${ GL_RGB9_E5_EXT GL_RGB GL_UNSIGNED_INT_5_9_9_9_REV_EXT } +[ BGR u-9-9-9-e5-components (image-format) ] unit-test + +${ GL_R11F_G11F_B10F_EXT GL_RGB GL_UNSIGNED_INT_10F_11F_11F_REV_EXT } +[ BGR float-11-11-10-components (image-format) ] unit-test diff --git a/basis/opengl/textures/textures.factor b/basis/opengl/textures/textures.factor index c2fa02ac5e..25ef6ee2d3 100755 --- a/basis/opengl/textures/textures.factor +++ b/basis/opengl/textures/textures.factor @@ -4,7 +4,7 @@ USING: accessors assocs cache colors.constants destructors kernel opengl opengl.gl opengl.capabilities combinators images images.tesselation grouping specialized-arrays.float sequences math math.vectors math.matrices generalizations fry arrays namespaces -system locals ; +system locals literals ; IN: opengl.textures SYMBOL: non-power-of-2-textures? @@ -22,46 +22,233 @@ SYMBOL: non-power-of-2-textures? : delete-texture ( id -- ) [ glDeleteTextures ] (delete-gl-object) ; -GENERIC: component-type>type ( component-type -- internal-format type ) -GENERIC: component-order>format ( type component-order -- type format ) -GENERIC: component-order>integer-format ( type component-order -- type format ) +ERROR: unsupported-component-order component-order component-type ; -ERROR: unsupported-component-order component-order ; +CONSTANT: image-internal-formats H{ + { { A ubyte-components } $ GL_ALPHA8 } + { { A ushort-components } $ GL_ALPHA16 } + { { A half-components } $ GL_ALPHA16F_ARB } + { { A float-components } $ GL_ALPHA32F_ARB } + { { A byte-integer-components } $ GL_ALPHA8I_EXT } + { { A ubyte-integer-components } $ GL_ALPHA8UI_EXT } + { { A short-integer-components } $ GL_ALPHA16I_EXT } + { { A ushort-integer-components } $ GL_ALPHA16UI_EXT } + { { A int-integer-components } $ GL_ALPHA32I_EXT } + { { A uint-integer-components } $ GL_ALPHA32UI_EXT } -M: ubyte-components component-type>type drop GL_RGBA8 GL_UNSIGNED_BYTE ; -M: ushort-components component-type>type drop GL_RGBA16 GL_UNSIGNED_SHORT ; -M: half-components component-type>type drop GL_RGBA16F_ARB GL_HALF_FLOAT_ARB ; -M: float-components component-type>type drop GL_RGBA32F_ARB GL_FLOAT ; -M: byte-integer-components component-type>type drop GL_RGBA8I_EXT GL_BYTE ; -M: short-integer-components component-type>type drop GL_RGBA16I_EXT GL_SHORT ; -M: int-integer-components component-type>type drop GL_RGBA32I_EXT GL_INT ; -M: ubyte-integer-components component-type>type drop GL_RGBA8I_EXT GL_UNSIGNED_BYTE ; -M: ushort-integer-components component-type>type drop GL_RGBA16I_EXT GL_UNSIGNED_SHORT ; -M: uint-integer-components component-type>type drop GL_RGBA32I_EXT GL_UNSIGNED_INT ; + { { L ubyte-components } $ GL_LUMINANCE8 } + { { L ushort-components } $ GL_LUMINANCE16 } + { { L half-components } $ GL_LUMINANCE16F_ARB } + { { L float-components } $ GL_LUMINANCE32F_ARB } + { { L byte-integer-components } $ GL_LUMINANCE8I_EXT } + { { L ubyte-integer-components } $ GL_LUMINANCE8UI_EXT } + { { L short-integer-components } $ GL_LUMINANCE16I_EXT } + { { L ushort-integer-components } $ GL_LUMINANCE16UI_EXT } + { { L int-integer-components } $ GL_LUMINANCE32I_EXT } + { { L uint-integer-components } $ GL_LUMINANCE32UI_EXT } -M: RGB component-order>format drop GL_RGB ; -M: BGR component-order>format drop GL_BGR ; -M: RGBA component-order>format drop GL_RGBA ; -M: ARGB component-order>format - swap GL_UNSIGNED_BYTE = - [ drop GL_UNSIGNED_INT_8_8_8_8_REV GL_BGRA ] + { { R ubyte-components } $ GL_R8 } + { { R ushort-components } $ GL_R16 } + { { R half-components } $ GL_R16F } + { { R float-components } $ GL_R32F } + { { R byte-integer-components } $ GL_R8I } + { { R ubyte-integer-components } $ GL_R8UI } + { { R short-integer-components } $ GL_R16I } + { { R ushort-integer-components } $ GL_R16UI } + { { R int-integer-components } $ GL_R32I } + { { R uint-integer-components } $ GL_R32UI } + + { { INTENSITY ubyte-components } $ GL_INTENSITY8 } + { { INTENSITY ushort-components } $ GL_INTENSITY16 } + { { INTENSITY half-components } $ GL_INTENSITY16F_ARB } + { { INTENSITY float-components } $ GL_INTENSITY32F_ARB } + { { INTENSITY byte-integer-components } $ GL_INTENSITY8I_EXT } + { { INTENSITY ubyte-integer-components } $ GL_INTENSITY8UI_EXT } + { { INTENSITY short-integer-components } $ GL_INTENSITY16I_EXT } + { { INTENSITY ushort-integer-components } $ GL_INTENSITY16UI_EXT } + { { INTENSITY int-integer-components } $ GL_INTENSITY32I_EXT } + { { INTENSITY uint-integer-components } $ GL_INTENSITY32UI_EXT } + + { { DEPTH ushort-components } $ GL_DEPTH_COMPONENT16 } + { { DEPTH u-24-components } $ GL_DEPTH_COMPONENT24 } + { { DEPTH uint-components } $ GL_DEPTH_COMPONENT32 } + + { { LA ubyte-components } $ GL_LUMINANCE8_ALPHA8 } + { { LA ushort-components } $ GL_LUMINANCE16_ALPHA16 } + { { LA half-components } $ GL_LUMINANCE_ALPHA16F_ARB } + { { LA float-components } $ GL_LUMINANCE_ALPHA32F_ARB } + { { LA byte-integer-components } $ GL_LUMINANCE_ALPHA8I_EXT } + { { LA ubyte-integer-components } $ GL_LUMINANCE_ALPHA8UI_EXT } + { { LA short-integer-components } $ GL_LUMINANCE_ALPHA16I_EXT } + { { LA ushort-integer-components } $ GL_LUMINANCE_ALPHA16UI_EXT } + { { LA int-integer-components } $ GL_LUMINANCE_ALPHA32I_EXT } + { { LA uint-integer-components } $ GL_LUMINANCE_ALPHA32UI_EXT } + + { { RG ubyte-components } $ GL_RG8 } + { { RG ushort-components } $ GL_RG16 } + { { RG half-components } $ GL_RG16F } + { { RG float-components } $ GL_RG32F } + { { RG byte-integer-components } $ GL_RG8I } + { { RG ubyte-integer-components } $ GL_RG8UI } + { { RG short-integer-components } $ GL_RG16I } + { { RG ushort-integer-components } $ GL_RG16UI } + { { RG int-integer-components } $ GL_RG32I } + { { RG uint-integer-components } $ GL_RG32UI } + + { { DEPTH-STENCIL u-24-8-components } $ GL_DEPTH24_STENCIL8_EXT } + + { { RGB ubyte-components } $ GL_RGB8 } + { { RGB ushort-components } $ GL_RGB16 } + { { RGB half-components } $ GL_RGB16F_ARB } + { { RGB float-components } $ GL_RGB32F_ARB } + { { RGB byte-integer-components } $ GL_RGB8I_EXT } + { { RGB ubyte-integer-components } $ GL_RGB8UI_EXT } + { { RGB byte-integer-components } $ GL_RGB8I_EXT } + { { RGB ubyte-integer-components } $ GL_RGB8UI_EXT } + { { RGB short-integer-components } $ GL_RGB16I_EXT } + { { RGB ushort-integer-components } $ GL_RGB16UI_EXT } + { { RGB int-integer-components } $ GL_RGB32I_EXT } + { { RGB uint-integer-components } $ GL_RGB32UI_EXT } + { { RGB u-5-6-5-components } $ GL_RGB5 } + { { RGB u-9-9-9-e5-components } $ GL_RGB9_E5_EXT } + { { RGB float-11-11-10-components } $ GL_R11F_G11F_B10F_EXT } + + { { RGBA ubyte-components } $ GL_RGBA8 } + { { RGBA ushort-components } $ GL_RGBA16 } + { { RGBA half-components } $ GL_RGBA16F_ARB } + { { RGBA float-components } $ GL_RGBA32F_ARB } + { { RGBA byte-integer-components } $ GL_RGBA8I_EXT } + { { RGBA ubyte-integer-components } $ GL_RGBA8UI_EXT } + { { RGBA byte-integer-components } $ GL_RGBA8I_EXT } + { { RGBA ubyte-integer-components } $ GL_RGBA8UI_EXT } + { { RGBA short-integer-components } $ GL_RGBA16I_EXT } + { { RGBA ushort-integer-components } $ GL_RGBA16UI_EXT } + { { RGBA int-integer-components } $ GL_RGBA32I_EXT } + { { RGBA uint-integer-components } $ GL_RGBA32UI_EXT } + { { RGBA u-5-5-5-1-components } $ GL_RGB5_A1 } + { { RGBA u-10-10-10-2-components } $ GL_RGB10_A2 } +} + +GENERIC: fix-internal-component-order ( order -- order' ) + +M: object fix-internal-component-order ; +M: BGR fix-internal-component-order drop RGB ; +M: BGRA fix-internal-component-order drop RGBA ; +M: ARGB fix-internal-component-order drop RGBA ; +M: ABGR fix-internal-component-order drop RGBA ; +M: RGBX fix-internal-component-order drop RGBA ; +M: BGRX fix-internal-component-order drop RGBA ; +M: XRGB fix-internal-component-order drop RGBA ; +M: XBGR fix-internal-component-order drop RGBA ; + +: image-internal-format ( component-order component-type -- internal-format ) + 2dup + [ fix-internal-component-order ] dip 2array image-internal-formats at + [ 2nip ] [ unsupported-component-order ] if* ; + +: reversed-type? ( component-type -- ? ) + { u-9-9-9-e5-components float-11-11-10-components } member? ; + +: (component-order>format) ( component-order component-type -- gl-format ) + dup unnormalized-integer-components? [ + swap { + { A [ drop GL_ALPHA_INTEGER_EXT ] } + { L [ drop GL_LUMINANCE_INTEGER_EXT ] } + { R [ drop GL_RED_INTEGER_EXT ] } + { LA [ drop GL_LUMINANCE_ALPHA_INTEGER_EXT ] } + { RG [ drop GL_RG_INTEGER ] } + { BGR [ drop GL_BGR_INTEGER_EXT ] } + { RGB [ drop GL_RGB_INTEGER_EXT ] } + { BGRA [ drop GL_BGRA_INTEGER_EXT ] } + { RGBA [ drop GL_RGBA_INTEGER_EXT ] } + { BGRX [ drop GL_BGRA_INTEGER_EXT ] } + { RGBX [ drop GL_RGBA_INTEGER_EXT ] } + [ swap unsupported-component-order ] + } case + ] [ + swap { + { A [ drop GL_ALPHA ] } + { L [ drop GL_LUMINANCE ] } + { R [ drop GL_RED ] } + { LA [ drop GL_LUMINANCE_ALPHA ] } + { RG [ drop GL_RG ] } + { BGR [ reversed-type? GL_RGB GL_BGR ? ] } + { RGB [ reversed-type? GL_BGR GL_RGB ? ] } + { BGRA [ drop GL_BGRA ] } + { RGBA [ drop GL_RGBA ] } + { ARGB [ drop GL_BGRA ] } + { ABGR [ drop GL_RGBA ] } + { BGRX [ drop GL_BGRA ] } + { RGBX [ drop GL_RGBA ] } + { XRGB [ drop GL_BGRA ] } + { XBGR [ drop GL_RGBA ] } + { INTENSITY [ drop GL_INTENSITY ] } + { DEPTH [ drop GL_DEPTH_COMPONENT ] } + { DEPTH-STENCIL [ drop GL_DEPTH_STENCIL_EXT ] } + [ swap unsupported-component-order ] + } case + ] if ; + +GENERIC: (component-type>type) ( component-order component-type -- gl-type ) + +M: object (component-type>type) unsupported-component-order ; + +: four-channel-alpha-first? ( component-order component-type -- ? ) + over component-count 4 = + [ drop alpha-channel-precedes-colors? ] [ unsupported-component-order ] if ; -M: BGRA component-order>format drop GL_BGRA ; -M: BGRX component-order>format drop GL_BGRA ; -M: LA component-order>format drop GL_LUMINANCE_ALPHA ; -M: L component-order>format drop GL_LUMINANCE ; -M: object component-order>format unsupported-component-order ; +: not-alpha-first ( component-order component-type -- ) + over alpha-channel-precedes-colors? + [ unsupported-component-order ] + [ 2drop ] if ; -M: RGB component-order>integer-format drop GL_RGB_INTEGER_EXT ; -M: BGR component-order>integer-format drop GL_BGR_INTEGER_EXT ; -M: RGBA component-order>integer-format drop GL_RGBA_INTEGER_EXT ; -M: BGRA component-order>integer-format drop GL_BGRA_INTEGER_EXT ; -M: BGRX component-order>integer-format drop GL_BGRA_INTEGER_EXT ; -M: LA component-order>integer-format drop GL_LUMINANCE_ALPHA_INTEGER_EXT ; -M: L component-order>integer-format drop GL_LUMINANCE_INTEGER_EXT ; +M: ubyte-components (component-type>type) + drop alpha-channel-precedes-colors? + [ GL_UNSIGNED_INT_8_8_8_8_REV ] + [ GL_UNSIGNED_BYTE ] if ; -M: object component-order>integer-format unsupported-component-order ; +M: ushort-components (component-type>type) not-alpha-first GL_UNSIGNED_SHORT ; +M: uint-components (component-type>type) not-alpha-first GL_UNSIGNED_INT ; +M: half-components (component-type>type) not-alpha-first GL_HALF_FLOAT_ARB ; +M: float-components (component-type>type) not-alpha-first GL_FLOAT ; +M: byte-integer-components (component-type>type) not-alpha-first GL_BYTE ; +M: ubyte-integer-components (component-type>type) not-alpha-first GL_UNSIGNED_BYTE ; +M: short-integer-components (component-type>type) not-alpha-first GL_SHORT ; +M: ushort-integer-components (component-type>type) not-alpha-first GL_UNSIGNED_SHORT ; +M: int-integer-components (component-type>type) not-alpha-first GL_INT ; +M: uint-integer-components (component-type>type) not-alpha-first GL_UNSIGNED_INT ; + +M: u-5-5-5-1-components (component-type>type) + four-channel-alpha-first? + [ GL_UNSIGNED_SHORT_1_5_5_5_REV ] + [ GL_UNSIGNED_SHORT_5_5_5_1 ] if ; + +M: u-5-6-5-components (component-type>type) 2drop GL_UNSIGNED_SHORT_5_6_5 ; + +M: u-10-10-10-2-components (component-type>type) + four-channel-alpha-first? + [ GL_UNSIGNED_INT_2_10_10_10_REV ] + [ GL_UNSIGNED_INT_10_10_10_2 ] if ; + +M: u-24-components (component-type>type) + over DEPTH = + [ 2drop GL_UNSIGNED_INT ] [ unsupported-component-order ] if ; + +M: u-24-8-components (component-type>type) + over DEPTH-STENCIL = + [ 2drop GL_UNSIGNED_INT_24_8_EXT ] [ unsupported-component-order ] if ; + +M: u-9-9-9-e5-components (component-type>type) + over BGR = + [ 2drop GL_UNSIGNED_INT_5_9_9_9_REV_EXT ] [ unsupported-component-order ] if ; + +M: float-11-11-10-components (component-type>type) + over BGR = + [ 2drop GL_UNSIGNED_INT_10F_11F_11F_REV_EXT ] [ unsupported-component-order ] if ; + +: image-data-format ( component-order component-type -- gl-format gl-type ) + [ (component-order>format) ] [ (component-type>type) ] 2bi ; SLOT: display-list @@ -71,6 +258,12 @@ GENERIC: draw-scaled-texture ( dim texture -- ) DEFER: make-texture +: (image-format) ( component-order component-type -- internal-format format type ) + [ image-internal-format ] [ image-data-format ] 2bi ; + +: image-format ( image -- internal-format format type ) + [ component-order>> ] [ component-type>> ] bi (image-format) ; + > - [ nip component-type>type ] - [ - unnormalized-integer-components? - [ component-order>> component-order>integer-format ] - [ component-order>> component-order>format ] if - ] 2bi swap ; - :: tex-image ( image bitmap -- ) image image-format :> type :> format :> internal-format GL_TEXTURE_2D 0 internal-format From 50191588e43c8930bb960f0d9f1d6cfa89c9c8e7 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 24 Jun 2009 15:27:58 +0200 Subject: [PATCH 20/27] Get rid of vector reallocation by preallocating it --- basis/math/primes/primes.factor | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/basis/math/primes/primes.factor b/basis/math/primes/primes.factor index ea8c60508d..5dc6a51334 100644 --- a/basis/math/primes/primes.factor +++ b/basis/math/primes/primes.factor @@ -1,8 +1,9 @@ ! Copyright (C) 2007-2009 Samuel Tardieu. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators kernel math math.bitwise math.functions +USING: combinators fry kernel math math.bitwise math.functions math.order math.primes.erato math.primes.erato.private -math.primes.miller-rabin math.ranges literals random sequences sets ; +math.primes.miller-rabin math.ranges literals random sequences sets +vectors ; IN: math.primes 598. Under this limit, we know that there are at most 108 primes. +: upper-pi ( x -- y ) + dup log [ / ] [ 1.2762 swap / 1 + ] bi * ceiling ; + +: lower-pi ( x -- y ) + dup log [ / ] [ 0.992 swap / 1 + ] bi * floor ; + +: ( low high -- vector ) + swap [ [ upper-pi ] [ lower-pi ] bi* - >integer + 108 max 10000 min ] keep + 3 < [ [ 2 swap push ] keep ] when ; + PRIVATE> : prime? ( n -- ? ) @@ -29,9 +45,9 @@ PRIVATE> ] if ; foldable : primes-between ( low high -- seq ) - [ dup 3 max dup even? [ 1 + ] when ] dip - 2 [ prime? ] filter - swap 3 < [ 2 prefix ] when ; + [ [ 3 max dup even? [ 1 + ] when ] dip 2 ] + [ ] 2bi + [ '[ [ prime? ] _ push-if ] each ] keep clone ; : primes-upto ( n -- seq ) 2 swap primes-between ; From 094c82c50b266fd037611a71b9a772869e9758fa Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 24 Jun 2009 15:36:45 +0200 Subject: [PATCH 21/27] Short circuit trivial composites --- basis/math/primes/primes.factor | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/basis/math/primes/primes.factor b/basis/math/primes/primes.factor index 5dc6a51334..7e877a03ce 100644 --- a/basis/math/primes/primes.factor +++ b/basis/math/primes/primes.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2007-2009 Samuel Tardieu. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators fry kernel math math.bitwise math.functions -math.order math.primes.erato math.primes.erato.private -math.primes.miller-rabin math.ranges literals random sequences sets -vectors ; +USING: combinators combinators.short-circuit fry kernel math +math.bitwise math.functions math.order math.primes.erato +math.primes.erato.private math.primes.miller-rabin math.ranges +literals random sequences sets vectors ; IN: math.primes ] keep 3 < [ [ 2 swap push ] keep ] when ; +: simple? ( n -- ? ) { [ even? ] [ 3 mod 0 = ] [ 5 mod 0 = ] } 1|| ; + PRIVATE> : prime? ( n -- ? ) { { [ dup 7 < ] [ { 2 3 5 } member? ] } - { [ dup even? ] [ 2 = ] } + { [ dup simple? ] [ drop f ] } [ (prime?) ] } cond ; foldable From f3cf8fad2b56ef079647a730c9e7ea24f6522130 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 24 Jun 2009 13:54:12 -0500 Subject: [PATCH 22/27] compiler.cfg.linear-scan: fix unit tests --- basis/compiler/cfg/linear-scan/linear-scan-tests.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor index 1f8112a893..60dfbd83bc 100644 --- a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor +++ b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor @@ -1414,7 +1414,7 @@ USING: math.private ; { uses { 5 10 } } { ranges V{ T{ live-range f 5 10 } } } } - intersect-inactive + relevant-ranges intersect-live-ranges ] unit-test ! Bug in live spill slots calculation From 22fa524db1d14af155693f90f0e58104c9d5e216 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 24 Jun 2009 13:54:43 -0500 Subject: [PATCH 23/27] compiler.cfg.stack-analysis: split up into three vocabs --- .../cfg/stack-analysis/merge/merge.factor | 85 ++++++++++ .../cfg/stack-analysis/stack-analysis.factor | 150 +++--------------- .../cfg/stack-analysis/state/state.factor | 43 +++++ 3 files changed, 148 insertions(+), 130 deletions(-) create mode 100644 basis/compiler/cfg/stack-analysis/merge/merge.factor create mode 100644 basis/compiler/cfg/stack-analysis/state/state.factor diff --git a/basis/compiler/cfg/stack-analysis/merge/merge.factor b/basis/compiler/cfg/stack-analysis/merge/merge.factor new file mode 100644 index 0000000000..9db6d595bf --- /dev/null +++ b/basis/compiler/cfg/stack-analysis/merge/merge.factor @@ -0,0 +1,85 @@ +! Copyright (C) 2009 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel assocs sequences accessors fry combinators grouping +sets compiler.cfg compiler.cfg.hats +compiler.cfg.stack-analysis.state ; +IN: compiler.cfg.stack-analysis.merge + +: initial-state ( bb states -- state ) 2drop ; + +: single-predecessor ( bb states -- state ) nip first clone ; + +ERROR: must-equal-failed seq ; + +: must-equal ( seq -- elt ) + dup all-equal? [ first ] [ must-equal-failed ] if ; + +: merge-heights ( state predecessors states -- state ) + nip + [ [ ds-height>> ] map must-equal >>ds-height ] + [ [ rs-height>> ] map must-equal >>rs-height ] bi ; + +: insert-peek ( predecessor loc -- vreg ) + ! XXX critical edges + '[ _ ^^peek ] add-instructions ; + +: merge-loc ( predecessors locs>vregs loc -- vreg ) + ! Insert a ##phi in the current block where the input + ! is the vreg storing loc from each predecessor block + [ '[ [ _ ] dip at ] map ] keep + '[ [ ] [ _ insert-peek ] ?if ] 2map + dup all-equal? [ first ] [ ^^phi ] if ; + +: (merge-locs) ( predecessors assocs -- assoc ) + dup [ keys ] map concat prune + [ [ 2nip ] [ merge-loc ] 3bi ] with with + H{ } map>assoc ; + +: merge-locs ( state predecessors states -- state ) + [ locs>vregs>> ] map (merge-locs) >>locs>vregs ; + +: merge-actual-loc ( locs>vregs loc -- vreg ) + '[ [ _ ] dip at ] map + dup all-equal? [ first ] [ drop f ] if ; + +: merge-actual-locs ( state predecessors states -- state ) + nip + [ actual-locs>vregs>> ] map + dup [ keys ] map concat prune + [ [ nip ] [ merge-actual-loc ] 2bi ] with + H{ } map>assoc + [ nip ] assoc-filter + >>actual-locs>vregs ; + +: merge-changed-locs ( state predecessors states -- state ) + nip [ changed-locs>> ] map assoc-combine >>changed-locs ; + +ERROR: cannot-merge-poisoned states ; + +: multiple-predecessors ( bb states -- state ) + dup [ not ] any? [ + [ ] 2dip + sift merge-heights + ] [ + dup [ poisoned?>> ] any? [ + cannot-merge-poisoned + ] [ + [ state new ] 2dip + [ predecessors>> ] dip + { + [ merge-locs ] + [ merge-actual-locs ] + [ merge-heights ] + [ merge-changed-locs ] + } 2cleave + ] if + ] if ; + +: merge-states ( bb states -- state ) + ! If any states are poisoned, save all registers + ! to the stack in each branch + dup length { + { 0 [ initial-state ] } + { 1 [ single-predecessor ] } + [ drop multiple-predecessors ] + } case ; \ No newline at end of file diff --git a/basis/compiler/cfg/stack-analysis/stack-analysis.factor b/basis/compiler/cfg/stack-analysis/stack-analysis.factor index 4ebdf7012f..3946e0b897 100644 --- a/basis/compiler/cfg/stack-analysis/stack-analysis.factor +++ b/basis/compiler/cfg/stack-analysis/stack-analysis.factor @@ -1,42 +1,19 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs kernel namespaces math sequences fry grouping -sets make combinators compiler.cfg.copy-prop compiler.cfg.def-use -compiler.cfg.instructions compiler.cfg.registers compiler.cfg.rpo -compiler.cfg.hats compiler.cfg ; +sets make combinators +compiler.cfg +compiler.cfg.copy-prop +compiler.cfg.def-use +compiler.cfg.instructions +compiler.cfg.registers +compiler.cfg.rpo +compiler.cfg.hats +compiler.cfg.stack-analysis.state +compiler.cfg.stack-analysis.merge ; IN: compiler.cfg.stack-analysis ! Convert stack operations to register operations - -! If 'poisoned' is set, disregard height information. This is set if we don't have -! height change information for an instruction. -TUPLE: state locs>vregs actual-locs>vregs changed-locs ds-height rs-height poisoned? ; - -: ( -- state ) - state new - H{ } clone >>locs>vregs - H{ } clone >>actual-locs>vregs - H{ } clone >>changed-locs - 0 >>ds-height - 0 >>rs-height ; - -M: state clone - call-next-method - [ clone ] change-locs>vregs - [ clone ] change-actual-locs>vregs - [ clone ] change-changed-locs ; - -: loc>vreg ( loc -- vreg ) state get locs>vregs>> at ; - -: record-peek ( dst loc -- ) - state get [ locs>vregs>> set-at ] [ actual-locs>vregs>> set-at ] 3bi ; - -: changed-loc ( loc -- ) - state get changed-locs>> conjoin ; - -: record-replace ( src loc -- ) - dup changed-loc state get locs>vregs>> set-at ; - GENERIC: height-for ( loc -- n ) M: ds-loc height-for drop state get ds-height>> ; @@ -64,12 +41,6 @@ M: rs-loc untranslate-loc (translate-loc) + ; [ 2drop ] [ untranslate-loc ##replace ] if ] assoc-each ; -: clear-state ( state -- ) - [ locs>vregs>> clear-assoc ] - [ actual-locs>vregs>> clear-assoc ] - [ changed-locs>> clear-assoc ] - tri ; - ERROR: poisoned-state state ; : sync-state ( -- ) @@ -84,6 +55,14 @@ ERROR: poisoned-state state ; ! Abstract interpretation GENERIC: visit ( insn -- ) +: adjust-ds ( n -- ) state get [ + ] change-ds-height drop ; + +M: ##inc-d visit [ , ] [ n>> adjust-ds ] bi ; + +: adjust-rs ( n -- ) state get [ + ] change-rs-height drop ; + +M: ##inc-r visit [ , ] [ n>> adjust-rs ] bi ; + ! Instructions which don't have any effect on the stack UNION: neutral-insn ##flushable @@ -113,14 +92,6 @@ t local-only? set-global M: sync-if-back-edge visit sync-state? [ sync-state ] when , ; -: adjust-d ( n -- ) state get [ + ] change-ds-height drop ; - -M: ##inc-d visit [ , ] [ n>> adjust-d ] bi ; - -: adjust-r ( n -- ) state get [ + ] change-rs-height drop ; - -M: ##inc-r visit [ , ] [ n>> adjust-r ] bi ; - : eliminate-peek ( dst src -- ) ! the requested stack location is already in 'src' [ ##copy ] [ swap copies get set-at ] 2bi ; @@ -138,7 +109,7 @@ M: ##copy visit [ call-next-method ] [ record-copy ] bi ; M: ##call visit - [ call-next-method ] [ height>> adjust-d ] bi ; + [ call-next-method ] [ height>> adjust-ds ] bi ; ! Instructions that poison the stack state UNION: poison-insn @@ -167,7 +138,7 @@ UNION: kill-vreg-insn M: kill-vreg-insn visit sync-state , ; : visit-alien-node ( node -- ) - params>> [ out-d>> length ] [ in-d>> length ] bi - adjust-d ; + params>> [ out-d>> length ] [ in-d>> length ] bi - adjust-ds ; M: ##alien-invoke visit [ call-next-method ] [ visit-alien-node ] bi ; @@ -180,87 +151,6 @@ M: ##alien-callback visit , ; ! Maps basic-blocks to states SYMBOLS: state-in state-out ; -: initial-state ( bb states -- state ) 2drop ; - -: single-predecessor ( bb states -- state ) nip first clone ; - -ERROR: must-equal-failed seq ; - -: must-equal ( seq -- elt ) - dup all-equal? [ first ] [ must-equal-failed ] if ; - -: merge-heights ( state predecessors states -- state ) - nip - [ [ ds-height>> ] map must-equal >>ds-height ] - [ [ rs-height>> ] map must-equal >>rs-height ] bi ; - -: insert-peek ( predecessor loc -- vreg ) - ! XXX critical edges - '[ _ ^^peek ] add-instructions ; - -: merge-loc ( predecessors locs>vregs loc -- vreg ) - ! Insert a ##phi in the current block where the input - ! is the vreg storing loc from each predecessor block - [ '[ [ _ ] dip at ] map ] keep - '[ [ ] [ _ insert-peek ] ?if ] 2map - dup all-equal? [ first ] [ ^^phi ] if ; - -: (merge-locs) ( predecessors assocs -- assoc ) - dup [ keys ] map concat prune - [ [ 2nip ] [ merge-loc ] 3bi ] with with - H{ } map>assoc ; - -: merge-locs ( state predecessors states -- state ) - [ locs>vregs>> ] map (merge-locs) >>locs>vregs ; - -: merge-loc' ( locs>vregs loc -- vreg ) - ! Insert a ##phi in the current block where the input - ! is the vreg storing loc from each predecessor block - '[ [ _ ] dip at ] map - dup all-equal? [ first ] [ drop f ] if ; - -: merge-actual-locs ( state predecessors states -- state ) - nip - [ actual-locs>vregs>> ] map - dup [ keys ] map concat prune - [ [ nip ] [ merge-loc' ] 2bi ] with - H{ } map>assoc - [ nip ] assoc-filter - >>actual-locs>vregs ; - -: merge-changed-locs ( state predecessors states -- state ) - nip [ changed-locs>> ] map assoc-combine >>changed-locs ; - -ERROR: cannot-merge-poisoned states ; - -: multiple-predecessors ( bb states -- state ) - dup [ not ] any? [ - [ ] 2dip - sift merge-heights - ] [ - dup [ poisoned?>> ] any? [ - cannot-merge-poisoned - ] [ - [ state new ] 2dip - [ predecessors>> ] dip - { - [ merge-locs ] - [ merge-actual-locs ] - [ merge-heights ] - [ merge-changed-locs ] - } 2cleave - ] if - ] if ; - -: merge-states ( bb states -- state ) - ! If any states are poisoned, save all registers - ! to the stack in each branch - dup length { - { 0 [ initial-state ] } - { 1 [ single-predecessor ] } - [ drop multiple-predecessors ] - } case ; - : block-in-state ( bb -- states ) dup predecessors>> state-out get '[ _ at ] map merge-states ; diff --git a/basis/compiler/cfg/stack-analysis/state/state.factor b/basis/compiler/cfg/stack-analysis/state/state.factor new file mode 100644 index 0000000000..d8cec0183f --- /dev/null +++ b/basis/compiler/cfg/stack-analysis/state/state.factor @@ -0,0 +1,43 @@ +! Copyright (C) 2009 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel accessors namespaces assocs sets math ; +IN: compiler.cfg.stack-analysis.state + +TUPLE: state +locs>vregs actual-locs>vregs changed-locs +ds-height rs-height poisoned? ; + +: ( -- state ) + state new + H{ } clone >>locs>vregs + H{ } clone >>actual-locs>vregs + H{ } clone >>changed-locs + 0 >>ds-height + 0 >>rs-height ; + +M: state clone + call-next-method + [ clone ] change-locs>vregs + [ clone ] change-actual-locs>vregs + [ clone ] change-changed-locs ; + +: loc>vreg ( loc -- vreg ) state get locs>vregs>> at ; + +: record-peek ( dst loc -- ) + state get [ locs>vregs>> set-at ] [ actual-locs>vregs>> set-at ] 3bi ; + +: changed-loc ( loc -- ) + state get changed-locs>> conjoin ; + +: record-replace ( src loc -- ) + dup changed-loc state get locs>vregs>> set-at ; + +: clear-state ( state -- ) + [ locs>vregs>> clear-assoc ] + [ actual-locs>vregs>> clear-assoc ] + [ changed-locs>> clear-assoc ] + tri ; + +: adjust-ds ( n -- ) state get [ + ] change-ds-height drop ; + +: adjust-rs ( n -- ) state get [ + ] change-rs-height drop ; From ab8b99d4fd03b99fcc106c67e620f037b46a7c47 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Wed, 24 Jun 2009 17:28:37 -0500 Subject: [PATCH 24/27] opengl 3.1 --- basis/images/images.factor | 4 + basis/opengl/gl/gl.factor | 721 +++++++++++++++----------- basis/opengl/textures/textures.factor | 78 +-- 3 files changed, 464 insertions(+), 339 deletions(-) diff --git a/basis/images/images.factor b/basis/images/images.factor index 9519968eb8..e1b1daa75c 100755 --- a/basis/images/images.factor +++ b/basis/images/images.factor @@ -14,6 +14,7 @@ SINGLETONS: u-5-5-5-1-components u-5-6-5-components u-10-10-10-2-components u-24-components u-24-8-components + float-32-u-8-components u-9-9-9-e5-components float-11-11-10-components ; @@ -30,6 +31,7 @@ UNION: component-type u-5-5-5-1-components u-5-6-5-components u-10-10-10-2-components u-24-components u-24-8-components + float-32-u-8-components u-9-9-9-e5-components float-11-11-10-components ; @@ -42,6 +44,7 @@ UNION: packed-components u-5-5-5-1-components u-5-6-5-components u-10-10-10-2-components u-24-components u-24-8-components + float-32-u-8-components u-9-9-9-e5-components float-11-11-10-components ; @@ -81,6 +84,7 @@ GENERIC: load-image* ( path class -- image ) { u-24-8-components [ 4 ] } { u-9-9-9-e5-components [ 4 ] } { float-11-11-10-components [ 4 ] } + { float-32-u-8-components [ 8 ] } } case ; : component-count ( component-order -- n ) diff --git a/basis/opengl/gl/gl.factor b/basis/opengl/gl/gl.factor index 60464af458..ca0276320b 100644 --- a/basis/opengl/gl/gl.factor +++ b/basis/opengl/gl/gl.factor @@ -1696,115 +1696,55 @@ GL-FUNCTION: void glUniformMatrix4x2fv { } ( GLint location, GLsizei count, GLbo GL-FUNCTION: void glUniformMatrix4x3fv { } ( GLint location, GLsizei count, GLboolean transpose, GLfloat* value ) ; -! GL_EXT_framebuffer_object +! OpenGL 3.0 -CONSTANT: GL_INVALID_FRAMEBUFFER_OPERATION_EXT HEX: 0506 -CONSTANT: GL_MAX_RENDERBUFFER_SIZE_EXT HEX: 84E8 -CONSTANT: GL_FRAMEBUFFER_BINDING_EXT HEX: 8CA6 -CONSTANT: GL_RENDERBUFFER_BINDING_EXT HEX: 8CA7 -CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT HEX: 8CD0 -CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT HEX: 8CD1 -CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT HEX: 8CD2 -CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT HEX: 8CD3 -CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT HEX: 8CD4 -CONSTANT: GL_FRAMEBUFFER_COMPLETE_EXT HEX: 8CD5 -CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT HEX: 8CD6 -CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT HEX: 8CD7 -CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT HEX: 8CD9 -CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT HEX: 8CDA -CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT HEX: 8CDB -CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT HEX: 8CDC -CONSTANT: GL_FRAMEBUFFER_UNSUPPORTED_EXT HEX: 8CDD -CONSTANT: GL_MAX_COLOR_ATTACHMENTS_EXT HEX: 8CDF -CONSTANT: GL_COLOR_ATTACHMENT0_EXT HEX: 8CE0 -CONSTANT: GL_COLOR_ATTACHMENT1_EXT HEX: 8CE1 -CONSTANT: GL_COLOR_ATTACHMENT2_EXT HEX: 8CE2 -CONSTANT: GL_COLOR_ATTACHMENT3_EXT HEX: 8CE3 -CONSTANT: GL_COLOR_ATTACHMENT4_EXT HEX: 8CE4 -CONSTANT: GL_COLOR_ATTACHMENT5_EXT HEX: 8CE5 -CONSTANT: GL_COLOR_ATTACHMENT6_EXT HEX: 8CE6 -CONSTANT: GL_COLOR_ATTACHMENT7_EXT HEX: 8CE7 -CONSTANT: GL_COLOR_ATTACHMENT8_EXT HEX: 8CE8 -CONSTANT: GL_COLOR_ATTACHMENT9_EXT HEX: 8CE9 -CONSTANT: GL_COLOR_ATTACHMENT10_EXT HEX: 8CEA -CONSTANT: GL_COLOR_ATTACHMENT11_EXT HEX: 8CEB -CONSTANT: GL_COLOR_ATTACHMENT12_EXT HEX: 8CEC -CONSTANT: GL_COLOR_ATTACHMENT13_EXT HEX: 8CED -CONSTANT: GL_COLOR_ATTACHMENT14_EXT HEX: 8CEE -CONSTANT: GL_COLOR_ATTACHMENT15_EXT HEX: 8CEF -CONSTANT: GL_DEPTH_ATTACHMENT_EXT HEX: 8D00 -CONSTANT: GL_STENCIL_ATTACHMENT_EXT HEX: 8D20 -CONSTANT: GL_FRAMEBUFFER_EXT HEX: 8D40 -CONSTANT: GL_RENDERBUFFER_EXT HEX: 8D41 -CONSTANT: GL_RENDERBUFFER_WIDTH_EXT HEX: 8D42 -CONSTANT: GL_RENDERBUFFER_HEIGHT_EXT HEX: 8D43 -CONSTANT: GL_RENDERBUFFER_INTERNAL_FORMAT_EXT HEX: 8D44 -CONSTANT: GL_STENCIL_INDEX1_EXT HEX: 8D46 -CONSTANT: GL_STENCIL_INDEX4_EXT HEX: 8D47 -CONSTANT: GL_STENCIL_INDEX8_EXT HEX: 8D48 -CONSTANT: GL_STENCIL_INDEX16_EXT HEX: 8D49 -CONSTANT: GL_RENDERBUFFER_RED_SIZE_EXT HEX: 8D50 -CONSTANT: GL_RENDERBUFFER_GREEN_SIZE_EXT HEX: 8D51 -CONSTANT: GL_RENDERBUFFER_BLUE_SIZE_EXT HEX: 8D52 -CONSTANT: GL_RENDERBUFFER_ALPHA_SIZE_EXT HEX: 8D53 -CONSTANT: GL_RENDERBUFFER_DEPTH_SIZE_EXT HEX: 8D54 -CONSTANT: GL_RENDERBUFFER_STENCIL_SIZE_EXT HEX: 8D55 +CONSTANT: GL_VERTEX_ATTRIB_ARRAY_INTEGER HEX: 88FD +CONSTANT: GL_SAMPLER_CUBE_SHADOW HEX: 8DC5 +CONSTANT: GL_UNSIGNED_INT_VEC2 HEX: 8DC6 +CONSTANT: GL_UNSIGNED_INT_VEC3 HEX: 8DC7 +CONSTANT: GL_UNSIGNED_INT_VEC4 HEX: 8DC8 +CONSTANT: GL_INT_SAMPLER_1D HEX: 8DC9 +CONSTANT: GL_INT_SAMPLER_2D HEX: 8DCA +CONSTANT: GL_INT_SAMPLER_3D HEX: 8DCB +CONSTANT: GL_INT_SAMPLER_CUBE HEX: 8DCC +CONSTANT: GL_INT_SAMPLER_2D_RECT HEX: 8DCD +CONSTANT: GL_INT_SAMPLER_1D_ARRAY HEX: 8DCE +CONSTANT: GL_INT_SAMPLER_2D_ARRAY HEX: 8DCF +CONSTANT: GL_UNSIGNED_INT_SAMPLER_1D HEX: 8DD1 +CONSTANT: GL_UNSIGNED_INT_SAMPLER_2D HEX: 8DD2 +CONSTANT: GL_UNSIGNED_INT_SAMPLER_3D HEX: 8DD3 +CONSTANT: GL_UNSIGNED_INT_SAMPLER_CUBE HEX: 8DD4 +CONSTANT: GL_UNSIGNED_INT_SAMPLER_2D_RECT HEX: 8DD5 +CONSTANT: GL_UNSIGNED_INT_SAMPLER_1D_ARRAY HEX: 8DD6 +CONSTANT: GL_UNSIGNED_INT_SAMPLER_2D_ARRAY HEX: 8DD7 +CONSTANT: GL_MIN_PROGRAM_TEXEL_OFFSET HEX: 8904 +CONSTANT: GL_MAX_PROGRAM_TEXEL_OFFSET HEX: 8905 -GL-FUNCTION: void glBindFramebufferEXT { } ( GLenum target, GLuint framebuffer ) ; -GL-FUNCTION: void glBindRenderbufferEXT { } ( GLenum target, GLuint renderbuffer ) ; -GL-FUNCTION: GLenum glCheckFramebufferStatusEXT { } ( GLenum target ) ; -GL-FUNCTION: void glDeleteFramebuffersEXT { } ( GLsizei n, GLuint* framebuffers ) ; -GL-FUNCTION: void glDeleteRenderbuffersEXT { } ( GLsizei n, GLuint* renderbuffers ) ; -GL-FUNCTION: void glFramebufferRenderbufferEXT { } ( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer ) ; -GL-FUNCTION: void glFramebufferTexture1DEXT { } ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ) ; -GL-FUNCTION: void glFramebufferTexture2DEXT { } ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ) ; -GL-FUNCTION: void glFramebufferTexture3DEXT { } ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset ) ; -GL-FUNCTION: void glGenFramebuffersEXT { } ( GLsizei n, GLuint* framebuffers ) ; -GL-FUNCTION: void glGenRenderbuffersEXT { } ( GLsizei n, GLuint* renderbuffers ) ; -GL-FUNCTION: void glGenerateMipmapEXT { } ( GLenum target ) ; -GL-FUNCTION: void glGetFramebufferAttachmentParameterivEXT { } ( GLenum target, GLenum attachment, GLenum pname, GLint* params ) ; -GL-FUNCTION: void glGetRenderbufferParameterivEXT { } ( GLenum target, GLenum pname, GLint* params ) ; -GL-FUNCTION: GLboolean glIsFramebufferEXT { } ( GLuint framebuffer ) ; -GL-FUNCTION: GLboolean glIsRenderbufferEXT { } ( GLuint renderbuffer ) ; -GL-FUNCTION: void glRenderbufferStorageEXT { } ( GLenum target, GLenum internalformat, GLsizei width, GLsizei height ) ; +CONSTANT: GL_RGBA32F HEX: 8814 +CONSTANT: GL_RGB32F HEX: 8815 +CONSTANT: GL_RGBA16F HEX: 881A +CONSTANT: GL_RGB16F HEX: 881B +CONSTANT: GL_TEXTURE_RED_TYPE HEX: 8C10 +CONSTANT: GL_TEXTURE_GREEN_TYPE HEX: 8C11 +CONSTANT: GL_TEXTURE_BLUE_TYPE HEX: 8C12 +CONSTANT: GL_TEXTURE_ALPHA_TYPE HEX: 8C13 +CONSTANT: GL_TEXTURE_DEPTH_TYPE HEX: 8C16 +CONSTANT: GL_UNSIGNED_NORMALIZED HEX: 8C17 +CONSTANT: GL_QUERY_WAIT HEX: 8E13 +CONSTANT: GL_QUERY_NO_WAIT HEX: 8E14 +CONSTANT: GL_QUERY_BY_REGION_WAIT HEX: 8E15 +CONSTANT: GL_QUERY_BY_REGION_NO_WAIT HEX: 8E16 -! GL_EXT_framebuffer_blit - - -GL-FUNCTION: void glBlitFramebufferEXT { } ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, - GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter ) ; - -CONSTANT: GL_READ_FRAMEBUFFER_EXT HEX: 8CA8 -CONSTANT: GL_DRAW_FRAMEBUFFER_EXT HEX: 8CA9 - -ALIAS: GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT -CONSTANT: GL_READ_FRAMEBUFFER_BINDING_EXT HEX: 8CAA - - -! GL_EXT_framebuffer_multisample - - -GL-FUNCTION: void glRenderbufferStorageMultisampleEXT { } ( - GLenum target, GLsizei samples, - GLenum internalformat, - GLsizei width, GLsizei height ) ; - -CONSTANT: GL_RENDERBUFFER_SAMPLES_EXT HEX: 8CAB -CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT HEX: 8D56 -CONSTANT: GL_MAX_SAMPLES_EXT HEX: 8D57 - - -! GL_ARB_half_float_pixel, GL_ARB_half_float_vertex - - -CONSTANT: GL_HALF_FLOAT_ARB HEX: 140B - - -! GL_ARB_texture_rg +CONSTANT: GL_HALF_FLOAT HEX: 140B +CONSTANT: GL_MAP_READ_BIT HEX: 0001 +CONSTANT: GL_MAP_WRITE_BIT HEX: 0002 +CONSTANT: GL_MAP_INVALIDATE_RANGE_BIT HEX: 0004 +CONSTANT: GL_MAP_INVALIDATE_BUFFER_BIT HEX: 0008 +CONSTANT: GL_MAP_FLUSH_EXPLICIT_BIT HEX: 0010 +CONSTANT: GL_MAP_UNSYNCHRONIZED_BIT HEX: 0020 CONSTANT: GL_R8 HEX: 8229 CONSTANT: GL_R16 HEX: 822A @@ -1831,144 +1771,375 @@ CONSTANT: GL_COMPRESSED_RED HEX: 8225 CONSTANT: GL_COMPRESSED_RG HEX: 8226 CONSTANT: GL_RG_INTEGER HEX: 8228 +CONSTANT: GL_VERTEX_ARRAY_BINDING HEX: 85B5 -! GL_ARB_texture_float +CONSTANT: GL_CLAMP_READ_COLOR HEX: 891C +CONSTANT: GL_FIXED_ONLY HEX: 891D + +CONSTANT: GL_DEPTH_COMPONENT32F HEX: 8CAC +CONSTANT: GL_DEPTH32F_STENCIL8 HEX: 8CAD + +CONSTANT: GL_RGB9_E5 HEX: 8C3D +CONSTANT: GL_UNSIGNED_INT_5_9_9_9_REV HEX: 8C3E +CONSTANT: GL_TEXTURE_SHARED_SIZE HEX: 8C3F + +CONSTANT: GL_R11F_G11F_B10F HEX: 8C3A +CONSTANT: GL_UNSIGNED_INT_10F_11F_11F_REV HEX: 8C3B + +CONSTANT: GL_INVALID_FRAMEBUFFER_OPERATION HEX: 0506 +CONSTANT: GL_MAX_RENDERBUFFER_SIZE HEX: 84E8 +CONSTANT: GL_FRAMEBUFFER_BINDING HEX: 8CA6 +CONSTANT: GL_RENDERBUFFER_BINDING HEX: 8CA7 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE HEX: 8CD0 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME HEX: 8CD1 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL HEX: 8CD2 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE HEX: 8CD3 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING HEX: 8210 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE HEX: 8211 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE HEX: 8212 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE HEX: 8213 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE HEX: 8214 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE HEX: 8215 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE HEX: 8216 +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE HEX: 8217 +CONSTANT: GL_FRAMEBUFFER_DEFAULT HEX: 8218 +CONSTANT: GL_FRAMEBUFFER_UNDEFINED HEX: 8219 +CONSTANT: GL_DEPTH_STENCIL_ATTACHMENT HEX: 821A +CONSTANT: GL_FRAMEBUFFER_COMPLETE HEX: 8CD5 +CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT HEX: 8CD6 +CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT HEX: 8CD7 +CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER HEX: 8CDB +CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER HEX: 8CDC +CONSTANT: GL_FRAMEBUFFER_UNSUPPORTED HEX: 8CDD +CONSTANT: GL_MAX_COLOR_ATTACHMENTS HEX: 8CDF +CONSTANT: GL_COLOR_ATTACHMENT0 HEX: 8CE0 +CONSTANT: GL_COLOR_ATTACHMENT1 HEX: 8CE1 +CONSTANT: GL_COLOR_ATTACHMENT2 HEX: 8CE2 +CONSTANT: GL_COLOR_ATTACHMENT3 HEX: 8CE3 +CONSTANT: GL_COLOR_ATTACHMENT4 HEX: 8CE4 +CONSTANT: GL_COLOR_ATTACHMENT5 HEX: 8CE5 +CONSTANT: GL_COLOR_ATTACHMENT6 HEX: 8CE6 +CONSTANT: GL_COLOR_ATTACHMENT7 HEX: 8CE7 +CONSTANT: GL_COLOR_ATTACHMENT8 HEX: 8CE8 +CONSTANT: GL_COLOR_ATTACHMENT9 HEX: 8CE9 +CONSTANT: GL_COLOR_ATTACHMENT10 HEX: 8CEA +CONSTANT: GL_COLOR_ATTACHMENT11 HEX: 8CEB +CONSTANT: GL_COLOR_ATTACHMENT12 HEX: 8CEC +CONSTANT: GL_COLOR_ATTACHMENT13 HEX: 8CED +CONSTANT: GL_COLOR_ATTACHMENT14 HEX: 8CEE +CONSTANT: GL_COLOR_ATTACHMENT15 HEX: 8CEF +CONSTANT: GL_DEPTH_ATTACHMENT HEX: 8D00 +CONSTANT: GL_STENCIL_ATTACHMENT HEX: 8D20 +CONSTANT: GL_FRAMEBUFFER HEX: 8D40 +CONSTANT: GL_RENDERBUFFER HEX: 8D41 +CONSTANT: GL_RENDERBUFFER_WIDTH HEX: 8D42 +CONSTANT: GL_RENDERBUFFER_HEIGHT HEX: 8D43 +CONSTANT: GL_RENDERBUFFER_INTERNAL_FORMAT HEX: 8D44 +CONSTANT: GL_STENCIL_INDEX1 HEX: 8D46 +CONSTANT: GL_STENCIL_INDEX4 HEX: 8D47 +CONSTANT: GL_STENCIL_INDEX8 HEX: 8D48 +CONSTANT: GL_STENCIL_INDEX16 HEX: 8D49 +CONSTANT: GL_RENDERBUFFER_RED_SIZE HEX: 8D50 +CONSTANT: GL_RENDERBUFFER_GREEN_SIZE HEX: 8D51 +CONSTANT: GL_RENDERBUFFER_BLUE_SIZE HEX: 8D52 +CONSTANT: GL_RENDERBUFFER_ALPHA_SIZE HEX: 8D53 +CONSTANT: GL_RENDERBUFFER_DEPTH_SIZE HEX: 8D54 +CONSTANT: GL_RENDERBUFFER_STENCIL_SIZE HEX: 8D55 + +CONSTANT: GL_READ_FRAMEBUFFER HEX: 8CA8 +CONSTANT: GL_DRAW_FRAMEBUFFER HEX: 8CA9 + +ALIAS: GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING +CONSTANT: GL_READ_FRAMEBUFFER_BINDING HEX: 8CAA + +CONSTANT: GL_RENDERBUFFER_SAMPLES HEX: 8CAB +CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE HEX: 8D56 +CONSTANT: GL_MAX_SAMPLES HEX: 8D57 + +CONSTANT: GL_DEPTH_STENCIL HEX: 84F9 +CONSTANT: GL_UNSIGNED_INT_24_8 HEX: 84FA +CONSTANT: GL_DEPTH24_STENCIL8 HEX: 88F0 +CONSTANT: GL_TEXTURE_STENCIL_SIZE HEX: 88F1 + +CONSTANT: GL_RGBA32UI HEX: 8D70 +CONSTANT: GL_RGB32UI HEX: 8D71 + +CONSTANT: GL_RGBA16UI HEX: 8D76 +CONSTANT: GL_RGB16UI HEX: 8D77 + +CONSTANT: GL_RGBA8UI HEX: 8D7C +CONSTANT: GL_RGB8UI HEX: 8D7D + +CONSTANT: GL_RGBA32I HEX: 8D82 +CONSTANT: GL_RGB32I HEX: 8D83 + +CONSTANT: GL_RGBA16I HEX: 8D88 +CONSTANT: GL_RGB16I HEX: 8D89 + +CONSTANT: GL_RGBA8I HEX: 8D8E +CONSTANT: GL_RGB8I HEX: 8D8F + +CONSTANT: GL_RED_INTEGER HEX: 8D94 +CONSTANT: GL_GREEN_INTEGER HEX: 8D95 +CONSTANT: GL_BLUE_INTEGER HEX: 8D96 +CONSTANT: GL_RGB_INTEGER HEX: 8D98 +CONSTANT: GL_RGBA_INTEGER HEX: 8D99 +CONSTANT: GL_BGR_INTEGER HEX: 8D9A +CONSTANT: GL_BGRA_INTEGER HEX: 8D9B + +CONSTANT: GL_FLOAT_32_UNSIGNED_INT_24_8_REV HEX: 8DAD + +CONSTANT: GL_TEXTURE_1D_ARRAY HEX: 8C18 +CONSTANT: GL_TEXTURE_2D_ARRAY HEX: 8C1A + +CONSTANT: GL_PROXY_TEXTURE_2D_ARRAY HEX: 8C1B + +CONSTANT: GL_PROXY_TEXTURE_1D_ARRAY HEX: 8C19 + +CONSTANT: GL_TEXTURE_BINDING_1D_ARRAY HEX: 8C1C +CONSTANT: GL_TEXTURE_BINDING_2D_ARRAY HEX: 8C1D +CONSTANT: GL_MAX_ARRAY_TEXTURE_LAYERS HEX: 88FF + +CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER HEX: 8CD4 + +CONSTANT: GL_SAMPLER_1D_ARRAY HEX: 8DC0 +CONSTANT: GL_SAMPLER_2D_ARRAY HEX: 8DC1 +CONSTANT: GL_SAMPLER_1D_ARRAY_SHADOW HEX: 8DC3 +CONSTANT: GL_SAMPLER_2D_ARRAY_SHADOW HEX: 8DC4 + +CONSTANT: GL_COMPRESSED_RED_RGTC1 HEX: 8DBB +CONSTANT: GL_COMPRESSED_SIGNED_RED_RGTC1 HEX: 8DBC +CONSTANT: GL_COMPRESSED_RG_RGTC2 HEX: 8DBD +CONSTANT: GL_COMPRESSED_SIGNED_RG_RGTC2 HEX: 8DBE + +CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER HEX: 8C8E +CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_START HEX: 8C84 +CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_SIZE HEX: 8C85 +CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_BINDING HEX: 8C8F +CONSTANT: GL_INTERLEAVED_ATTRIBS HEX: 8C8C +CONSTANT: GL_SEPARATE_ATTRIBS HEX: 8C8D +CONSTANT: GL_PRIMITIVES_GENERATED HEX: 8C87 +CONSTANT: GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN HEX: 8C88 +CONSTANT: GL_RASTERIZER_DISCARD HEX: 8C89 +CONSTANT: GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS HEX: 8C8A +CONSTANT: GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS HEX: 8C8B +CONSTANT: GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS HEX: 8C80 +CONSTANT: GL_TRANSFORM_FEEDBACK_VARYINGS HEX: 8C83 +CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_MODE HEX: 8C7F +CONSTANT: GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH HEX: 8C76 + +CONSTANT: GL_FRAMEBUFFER_SRGB HEX: 8DB9 + +CONSTANT: GL_MAJOR_VERSION HEX: 821B +CONSTANT: GL_MINOR_VERSION HEX: 821C +CONSTANT: GL_NUM_EXTENSIONS HEX: 821D +CONSTANT: GL_CONTEXT_FLAGS HEX: 821E +CONSTANT: GL_INDEX HEX: 8222 +CONSTANT: GL_DEPTH_BUFFER HEX: 8223 +CONSTANT: GL_STENCIL_BUFFER HEX: 8224 +CONSTANT: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT HEX: 0001 + +ALIAS: GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE +ALIAS: GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS +ALIAS: GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES +ALIAS: GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 +ALIAS: GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 +ALIAS: GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 +ALIAS: GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 +ALIAS: GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 +ALIAS: GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 + +GL-FUNCTION: void glVertexAttribIPointer { glVertexAttribIPointerEXT } ( GLuint index, GLint size, GLenum type, GLsizei stride, void* pointer ) ; + +GL-FUNCTION: void glGetVertexAttribIiv { glGetVertexAttribIivEXT } ( GLuint index, GLenum pname, GLint* params ) ; +GL-FUNCTION: void glGetVertexAttribIuiv { glGetVertexAttribIuivEXT } ( GLuint index, GLenum pname, GLuint* params ) ; + +GL-FUNCTION: void glUniform1ui { glUniform1uiEXT } ( GLint location, GLuint v0 ) ; +GL-FUNCTION: void glUniform2ui { glUniform2uiEXT } ( GLint location, GLuint v0, GLuint v1 ) ; +GL-FUNCTION: void glUniform3ui { glUniform3uiEXT } ( GLint location, GLuint v0, GLuint v1, GLuint v2 ) ; +GL-FUNCTION: void glUniform4ui { glUniform4uiEXT } ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) ; + +GL-FUNCTION: void glUniform1uiv { glUniform1uivEXT } ( GLint location, GLsizei count, GLuint* value ) ; +GL-FUNCTION: void glUniform2uiv { glUniform2uivEXT } ( GLint location, GLsizei count, GLuint* value ) ; +GL-FUNCTION: void glUniform3uiv { glUniform3uivEXT } ( GLint location, GLsizei count, GLuint* value ) ; +GL-FUNCTION: void glUniform4uiv { glUniform4uivEXT } ( GLint location, GLsizei count, GLuint* value ) ; + +GL-FUNCTION: void glGetUniformuiv { glGetUniformuivEXT } ( GLuint program, GLint location, GLuint* params ) ; + +GL-FUNCTION: void glBindFragDataLocation { glBindFragDataLocationEXT } ( GLuint program, GLuint colorNumber, GLchar* name ) ; +GL-FUNCTION: GLint glGetFragDataLocation { glGetFragDataLocationEXT } ( GLuint program, GLchar* name ) ; + +GL-FUNCTION: void glBeginConditionalRender { glBeginConditionalRenderNV } ( GLuint id, GLenum mode ) ; +GL-FUNCTION: void glEndConditionalRender { glEndConditionalRenderNV } ( ) ; + +GL-FUNCTION: void glBindVertexArray { glBindVertexArrayAPPLE } ( GLuint array ) ; +GL-FUNCTION: void glDeleteVertexArrays { glDeleteVertexArraysAPPLE } ( GLsizei n, GLuint* arrays ) ; +GL-FUNCTION: void glGenVertexArrays { glGenVertexArraysAPPLE } ( GLsizei n, GLuint* arrays ) ; +GL-FUNCTION: GLboolean glIsVertexArray { glIsVertexArrayAPPLE } ( GLuint array ) ; + +GL-FUNCTION: void glClampColor { glClampColorARB } ( GLenum target, GLenum clamp ) ; + +GL-FUNCTION: void glBindFramebuffer { glBindFramebufferEXT } ( GLenum target, GLuint framebuffer ) ; +GL-FUNCTION: void glBindRenderbuffer { glBindRenderbufferEXT } ( GLenum target, GLuint renderbuffer ) ; +GL-FUNCTION: GLenum glCheckFramebufferStatus { glCheckFramebufferStatusEXT } ( GLenum target ) ; +GL-FUNCTION: void glDeleteFramebuffers { glDeleteFramebuffersEXT } ( GLsizei n, GLuint* framebuffers ) ; +GL-FUNCTION: void glDeleteRenderbuffers { glDeleteRenderbuffersEXT } ( GLsizei n, GLuint* renderbuffers ) ; +GL-FUNCTION: void glFramebufferRenderbuffer { glFramebufferRenderbufferEXT } ( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer ) ; +GL-FUNCTION: void glFramebufferTexture1D { glFramebufferTexture1DEXT } ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ) ; +GL-FUNCTION: void glFramebufferTexture2D { glFramebufferTexture2DEXT } ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ) ; +GL-FUNCTION: void glFramebufferTexture3D { glFramebufferTexture3DEXT } ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset ) ; +GL-FUNCTION: void glFramebufferTextureLayer { glFramebufferTextureLayerEXT } + ( GLenum target, GLenum attachment, + GLuint texture, GLint level, GLint layer ) ; +GL-FUNCTION: void glGenFramebuffers { glGenFramebuffersEXT } ( GLsizei n, GLuint* framebuffers ) ; +GL-FUNCTION: void glGenRenderbuffers { glGenRenderbuffersEXT } ( GLsizei n, GLuint* renderbuffers ) ; +GL-FUNCTION: void glGenerateMipmap { glGenerateMipmapEXT } ( GLenum target ) ; +GL-FUNCTION: void glGetFramebufferAttachmentParameteriv { glGetFramebufferAttachmentParameterivEXT } ( GLenum target, GLenum attachment, GLenum pname, GLint* params ) ; +GL-FUNCTION: void glGetRenderbufferParameteriv { glGetRenderbufferParameterivEXT } ( GLenum target, GLenum pname, GLint* params ) ; +GL-FUNCTION: GLboolean glIsFramebuffer { glIsFramebufferEXT } ( GLuint framebuffer ) ; +GL-FUNCTION: GLboolean glIsRenderbuffer { glIsRenderbufferEXT } ( GLuint renderbuffer ) ; +GL-FUNCTION: void glRenderbufferStorage { glRenderbufferStorageEXT } ( GLenum target, GLenum internalformat, GLsizei width, GLsizei height ) ; + +GL-FUNCTION: void glBlitFramebuffer { glBlitFramebufferEXT } + ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter ) ; + +GL-FUNCTION: void glRenderbufferStorageMultisample { glRenderbufferStorageMultisampleEXT } ( + GLenum target, GLsizei samples, + GLenum internalformat, + GLsizei width, GLsizei height ) ; + +GL-FUNCTION: void glTexParameterIiv { glTexParameterIivEXT } ( GLenum target, GLenum pname, GLint* params ) ; +GL-FUNCTION: void glTexParameterIuiv { glTexParameterIuivEXT } ( GLenum target, GLenum pname, GLuint* params ) ; +GL-FUNCTION: void glGetTexParameterIiv { glGetTexParameterIivEXT } ( GLenum target, GLenum pname, GLint* params ) ; +GL-FUNCTION: void glGetTexParameterIuiv { glGetTexParameterIuivEXT } ( GLenum target, GLenum pname, GLuint* params ) ; + +GL-FUNCTION: void glColorMaski { glColorMaskIndexedEXT } + ( GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a ) ; + +GL-FUNCTION: void glGetBooleani_v { glGetBooleanIndexedvEXT } ( GLenum value, GLuint index, GLboolean* data ) ; + +GL-FUNCTION: void glGetIntegeri_v { glGetIntegerIndexedvEXT } ( GLenum value, GLuint index, GLint* data ) ; + +GL-FUNCTION: void glEnablei { glEnableIndexedEXT } ( GLenum target, GLuint index ) ; + +GL-FUNCTION: void glDisablei { glDisableIndexedEXT } ( GLenum target, GLuint index ) ; + +GL-FUNCTION: GLboolean glIsEnabledi { glIsEnabledIndexedEXT } ( GLenum target, GLuint index ) ; + +GL-FUNCTION: void glBindBufferRange { glBindBufferRangeEXT } ( GLenum target, GLuint index, GLuint buffer, + GLintptr offset, GLsizeiptr size ) ; +GL-FUNCTION: void glBindBufferBase { glBindBufferBaseEXT } ( GLenum target, GLuint index, GLuint buffer ) ; + +GL-FUNCTION: void glBeginTransformFeedback { glBeginTransformFeedbackEXT } ( GLenum primitiveMode ) ; +GL-FUNCTION: void glEndTransformFeedback { glEndTransformFeedbackEXT } ( ) ; + +GL-FUNCTION: void glTransformFeedbackVaryings { glTransformFeedbackVaryingsEXT } ( GLuint program, GLsizei count, + GLchar** varyings, GLenum bufferMode ) ; +GL-FUNCTION: void glGetTransformFeedbackVarying { glGetTransformFeedbackVaryingEXT } ( GLuint program, GLuint index, + GLsizei bufSize, GLsizei* length, + GLsizei* size, GLenum* type, GLchar* name ) ; + +GL-FUNCTION: void glClearBufferiv { } ( GLenum buffer, GLint drawbuffer, GLint* value ) ; +GL-FUNCTION: void glClearBufferuiv { } ( GLenum buffer, GLint drawbuffer, GLuint* value ) ; +GL-FUNCTION: void glClearBufferfv { } ( GLenum buffer, GLint drawbuffer, GLfloat* value ) ; +GL-FUNCTION: void glClearBufferfi { } ( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil ) ; + +GL-FUNCTION: GLubyte* glGetStringi { } ( GLenum value, GLuint index ) ; + +GL-FUNCTION: GLvoid* glMapBufferRange { } ( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) ; +GL-FUNCTION: void glFlushMappedBufferRange { glFlushMappedBufferRangeAPPLE } ( GLenum target, GLintptr offset, GLsizeiptr size ) ; -CONSTANT: GL_RGBA32F_ARB HEX: 8814 -CONSTANT: GL_RGB32F_ARB HEX: 8815 -CONSTANT: GL_ALPHA32F_ARB HEX: 8816 -CONSTANT: GL_INTENSITY32F_ARB HEX: 8817 -CONSTANT: GL_LUMINANCE32F_ARB HEX: 8818 -CONSTANT: GL_LUMINANCE_ALPHA32F_ARB HEX: 8819 -CONSTANT: GL_RGBA16F_ARB HEX: 881A -CONSTANT: GL_RGB16F_ARB HEX: 881B -CONSTANT: GL_ALPHA16F_ARB HEX: 881C -CONSTANT: GL_INTENSITY16F_ARB HEX: 881D -CONSTANT: GL_LUMINANCE16F_ARB HEX: 881E -CONSTANT: GL_LUMINANCE_ALPHA16F_ARB HEX: 881F -CONSTANT: GL_TEXTURE_RED_TYPE_ARB HEX: 8C10 -CONSTANT: GL_TEXTURE_GREEN_TYPE_ARB HEX: 8C11 -CONSTANT: GL_TEXTURE_BLUE_TYPE_ARB HEX: 8C12 -CONSTANT: GL_TEXTURE_ALPHA_TYPE_ARB HEX: 8C13 -CONSTANT: GL_TEXTURE_LUMINANCE_TYPE_ARB HEX: 8C14 -CONSTANT: GL_TEXTURE_INTENSITY_TYPE_ARB HEX: 8C15 -CONSTANT: GL_TEXTURE_DEPTH_TYPE_ARB HEX: 8C16 -CONSTANT: GL_UNSIGNED_NORMALIZED_ARB HEX: 8C17 +! OpenGL 3.1 +CONSTANT: GL_RED_SNORM HEX: 8F90 +CONSTANT: GL_RG_SNORM HEX: 8F91 +CONSTANT: GL_RGB_SNORM HEX: 8F92 +CONSTANT: GL_RGBA_SNORM HEX: 8F93 +CONSTANT: GL_R8_SNORM HEX: 8F94 +CONSTANT: GL_RG8_SNORM HEX: 8F95 +CONSTANT: GL_RGB8_SNORM HEX: 8F96 +CONSTANT: GL_RGBA8_SNORM HEX: 8F97 +CONSTANT: GL_R16_SNORM HEX: 8F98 +CONSTANT: GL_RG16_SNORM HEX: 8F99 +CONSTANT: GL_RGB16_SNORM HEX: 8F9A +CONSTANT: GL_RGBA16_SNORM HEX: 8F9B +CONSTANT: GL_SIGNED_NORMALIZED HEX: 8F9C -! GL_EXT_gpu_shader4 +CONSTANT: GL_PRIMITIVE_RESTART HEX: 8F9D +CONSTANT: GL_PRIMITIVE_RESTART_INDEX HEX: 8F9E +CONSTANT: GL_COPY_READ_BUFFER HEX: 8F36 +CONSTANT: GL_COPY_WRITE_BUFFER HEX: 8F37 -GL-FUNCTION: void glVertexAttribI1iEXT { } ( GLuint index, GLint x ) ; -GL-FUNCTION: void glVertexAttribI2iEXT { } ( GLuint index, GLint x, GLint y ) ; -GL-FUNCTION: void glVertexAttribI3iEXT { } ( GLuint index, GLint x, GLint y, GLint z ) ; -GL-FUNCTION: void glVertexAttribI4iEXT { } ( GLuint index, GLint x, GLint y, GLint z, GLint w ) ; +CONSTANT: GL_UNIFORM_BUFFER HEX: 8A11 +CONSTANT: GL_UNIFORM_BUFFER_BINDING HEX: 8A28 +CONSTANT: GL_UNIFORM_BUFFER_START HEX: 8A29 +CONSTANT: GL_UNIFORM_BUFFER_SIZE HEX: 8A2A +CONSTANT: GL_MAX_VERTEX_UNIFORM_BLOCKS HEX: 8A2B +CONSTANT: GL_MAX_GEOMETRY_UNIFORM_BLOCKS HEX: 8A2C +CONSTANT: GL_MAX_FRAGMENT_UNIFORM_BLOCKS HEX: 8A2D +CONSTANT: GL_MAX_COMBINED_UNIFORM_BLOCKS HEX: 8A2E +CONSTANT: GL_MAX_UNIFORM_BUFFER_BINDINGS HEX: 8A2F +CONSTANT: GL_MAX_UNIFORM_BLOCK_SIZE HEX: 8A30 +CONSTANT: GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS HEX: 8A31 +CONSTANT: GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS HEX: 8A32 +CONSTANT: GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS HEX: 8A33 +CONSTANT: GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT HEX: 8A34 +CONSTANT: GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH HEX: 8A35 +CONSTANT: GL_ACTIVE_UNIFORM_BLOCKS HEX: 8A36 +CONSTANT: GL_UNIFORM_TYPE HEX: 8A37 +CONSTANT: GL_UNIFORM_SIZE HEX: 8A38 +CONSTANT: GL_UNIFORM_NAME_LENGTH HEX: 8A39 +CONSTANT: GL_UNIFORM_BLOCK_INDEX HEX: 8A3A +CONSTANT: GL_UNIFORM_OFFSET HEX: 8A3B +CONSTANT: GL_UNIFORM_ARRAY_STRIDE HEX: 8A3C +CONSTANT: GL_UNIFORM_MATRIX_STRIDE HEX: 8A3D +CONSTANT: GL_UNIFORM_IS_ROW_MAJOR HEX: 8A3E +CONSTANT: GL_UNIFORM_BLOCK_BINDING HEX: 8A3F +CONSTANT: GL_UNIFORM_BLOCK_DATA_SIZE HEX: 8A40 +CONSTANT: GL_UNIFORM_BLOCK_NAME_LENGTH HEX: 8A41 +CONSTANT: GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS HEX: 8A42 +CONSTANT: GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES HEX: 8A43 +CONSTANT: GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER HEX: 8A44 +CONSTANT: GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER HEX: 8A45 +CONSTANT: GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER HEX: 8A46 +CONSTANT: GL_INVALID_INDEX HEX: FFFFFFFF -GL-FUNCTION: void glVertexAttribI1uiEXT { } ( GLuint index, GLuint x ) ; -GL-FUNCTION: void glVertexAttribI2uiEXT { } ( GLuint index, GLuint x, GLuint y ) ; -GL-FUNCTION: void glVertexAttribI3uiEXT { } ( GLuint index, GLuint x, GLuint y, GLuint z ) ; -GL-FUNCTION: void glVertexAttribI4uiEXT { } ( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w ) ; +CONSTANT: GL_TEXTURE_RECTANGLE HEX: 84F5 +CONSTANT: GL_TEXTURE_BINDING_RECTANGLE HEX: 84F6 +CONSTANT: GL_PROXY_TEXTURE_RECTANGLE HEX: 84F7 +CONSTANT: GL_MAX_RECTANGLE_TEXTURE_SIZE HEX: 84F8 +CONSTANT: GL_SAMPLER_2D_RECT HEX: 8B63 +CONSTANT: GL_SAMPLER_2D_RECT_SHADOW HEX: 8B64 -GL-FUNCTION: void glVertexAttribI1ivEXT { } ( GLuint index, GLint* v ) ; -GL-FUNCTION: void glVertexAttribI2ivEXT { } ( GLuint index, GLint* v ) ; -GL-FUNCTION: void glVertexAttribI3ivEXT { } ( GLuint index, GLint* v ) ; -GL-FUNCTION: void glVertexAttribI4ivEXT { } ( GLuint index, GLint* v ) ; +CONSTANT: GL_SAMPLER_BUFFER HEX: 8DC2 +CONSTANT: GL_INT_SAMPLER_BUFFER HEX: 8DD0 +CONSTANT: GL_UNSIGNED_INT_SAMPLER_BUFFER HEX: 8DD8 -GL-FUNCTION: void glVertexAttribI1uivEXT { } ( GLuint index, GLuint* v ) ; -GL-FUNCTION: void glVertexAttribI2uivEXT { } ( GLuint index, GLuint* v ) ; -GL-FUNCTION: void glVertexAttribI3uivEXT { } ( GLuint index, GLuint* v ) ; -GL-FUNCTION: void glVertexAttribI4uivEXT { } ( GLuint index, GLuint* v ) ; +CONSTANT: GL_TEXTURE_BUFFER HEX: 8C2A -GL-FUNCTION: void glVertexAttribI4bvEXT { } ( GLuint index, GLbyte* v ) ; -GL-FUNCTION: void glVertexAttribI4svEXT { } ( GLuint index, GLshort* v ) ; -GL-FUNCTION: void glVertexAttribI4ubvEXT { } ( GLuint index, GLubyte* v ) ; -GL-FUNCTION: void glVertexAttribI4usvEXT { } ( GLuint index, GLushort* v ) ; +CONSTANT: GL_MAX_TEXTURE_BUFFER_SIZE HEX: 8C2B +CONSTANT: GL_TEXTURE_BINDING_BUFFER HEX: 8C2C +CONSTANT: GL_TEXTURE_BUFFER_DATA_STORE_BINDING HEX: 8C2D +CONSTANT: GL_TEXTURE_BUFFER_FORMAT HEX: 8C2E -GL-FUNCTION: void glVertexAttribIPointerEXT { } ( GLuint index, GLint size, GLenum type, GLsizei stride, void* pointer ) ; +GL-FUNCTION: void glDrawArraysInstanced { glDrawArraysInstancedARB } ( GLenum mode, GLint first, GLsizei count, GLsizei primcount ) ; +GL-FUNCTION: void glDrawElementsInstanced { glDrawElementsInstancedARB } ( GLenum mode, GLsizei count, GLenum type, GLvoid* indices, GLsizei primcount ) ; +GL-FUNCTION: void glTexBuffer { glTexBufferEXT } ( GLenum target, GLenum internalformat, GLuint buffer ) ; +GL-FUNCTION: void glPrimitiveRestartIndex { } ( GLuint index ) ; -GL-FUNCTION: void glGetVertexAttribIivEXT { } ( GLuint index, GLenum pname, GLint* params ) ; -GL-FUNCTION: void glGetVertexAttribIuivEXT { } ( GLuint index, GLenum pname, GLuint* params ) ; +GL-FUNCTION: void glGetUniformIndices { } ( GLuint program, GLsizei uniformCount, GLchar** uniformNames, GLuint* uniformIndices ) ; +GL-FUNCTION: void glGetActiveUniformsiv { } ( GLuint program, GLsizei uniformCount, GLuint* uniformIndices, GLenum pname, GLint* params ) ; +GL-FUNCTION: void glGetActiveUniformName { } ( GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName ) ; +GL-FUNCTION: GLuint glGetUniformBlockIndex { } ( GLuint program, GLchar* uniformBlockName ) ; +GL-FUNCTION: void glGetActiveUniformBlockiv { } ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params ) ; +GL-FUNCTION: void glGetActiveUniformBlockName { } ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName ) ; +GL-FUNCTION: void glUniformBlockBinding { } ( GLuint buffer, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) ; -GL-FUNCTION: void glUniform1uiEXT { } ( GLint location, GLuint v0 ) ; -GL-FUNCTION: void glUniform2uiEXT { } ( GLint location, GLuint v0, GLuint v1 ) ; -GL-FUNCTION: void glUniform3uiEXT { } ( GLint location, GLuint v0, GLuint v1, GLuint v2 ) ; -GL-FUNCTION: void glUniform4uiEXT { } ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) ; - -GL-FUNCTION: void glUniform1uivEXT { } ( GLint location, GLsizei count, GLuint* value ) ; -GL-FUNCTION: void glUniform2uivEXT { } ( GLint location, GLsizei count, GLuint* value ) ; -GL-FUNCTION: void glUniform3uivEXT { } ( GLint location, GLsizei count, GLuint* value ) ; -GL-FUNCTION: void glUniform4uivEXT { } ( GLint location, GLsizei count, GLuint* value ) ; - -GL-FUNCTION: void glGetUniformuivEXT { } ( GLuint program, GLint location, GLuint* params ) ; - -GL-FUNCTION: void glBindFragDataLocationEXT { } ( GLuint program, GLuint colorNumber, GLchar* name ) ; -GL-FUNCTION: GLint glGetFragDataLocationEXT { } ( GLuint program, GLchar* name ) ; - -CONSTANT: GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT HEX: 88FD -CONSTANT: GL_SAMPLER_1D_ARRAY_EXT HEX: 8DC0 -CONSTANT: GL_SAMPLER_2D_ARRAY_EXT HEX: 8DC1 -CONSTANT: GL_SAMPLER_BUFFER_EXT HEX: 8DC2 -CONSTANT: GL_SAMPLER_1D_ARRAY_SHADOW_EXT HEX: 8DC3 -CONSTANT: GL_SAMPLER_2D_ARRAY_SHADOW_EXT HEX: 8DC4 -CONSTANT: GL_SAMPLER_CUBE_SHADOW_EXT HEX: 8DC5 -CONSTANT: GL_UNSIGNED_INT_VEC2_EXT HEX: 8DC6 -CONSTANT: GL_UNSIGNED_INT_VEC3_EXT HEX: 8DC7 -CONSTANT: GL_UNSIGNED_INT_VEC4_EXT HEX: 8DC8 -CONSTANT: GL_INT_SAMPLER_1D_EXT HEX: 8DC9 -CONSTANT: GL_INT_SAMPLER_2D_EXT HEX: 8DCA -CONSTANT: GL_INT_SAMPLER_3D_EXT HEX: 8DCB -CONSTANT: GL_INT_SAMPLER_CUBE_EXT HEX: 8DCC -CONSTANT: GL_INT_SAMPLER_2D_RECT_EXT HEX: 8DCD -CONSTANT: GL_INT_SAMPLER_1D_ARRAY_EXT HEX: 8DCE -CONSTANT: GL_INT_SAMPLER_2D_ARRAY_EXT HEX: 8DCF -CONSTANT: GL_INT_SAMPLER_BUFFER_EXT HEX: 8DD0 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_1D_EXT HEX: 8DD1 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_2D_EXT HEX: 8DD2 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_3D_EXT HEX: 8DD3 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_CUBE_EXT HEX: 8DD4 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT HEX: 8DD5 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT HEX: 8DD6 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT HEX: 8DD7 -CONSTANT: GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT HEX: 8DD8 -CONSTANT: GL_MIN_PROGRAM_TEXEL_OFFSET_EXT HEX: 8904 -CONSTANT: GL_MAX_PROGRAM_TEXEL_OFFSET_EXT HEX: 8905 - - -! GL_ARB_texture_rectangle - - -CONSTANT: GL_TEXTURE_RECTANGLE_ARB HEX: 84F5 -CONSTANT: GL_TEXTURE_BINDING_RECTANGLE_ARB HEX: 84F6 -CONSTANT: GL_PROXY_TEXTURE_RECTANGLE_ARB HEX: 84F7 -CONSTANT: GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB HEX: 84F8 -CONSTANT: GL_SAMPLER_2D_RECT_ARB HEX: 8B63 -CONSTANT: GL_SAMPLER_2D_RECT_SHADOW_ARB HEX: 8B64 - - -! GL_EXT_packed_depth_stencil - - -CONSTANT: GL_DEPTH_STENCIL_EXT HEX: 84F9 -CONSTANT: GL_UNSIGNED_INT_24_8_EXT HEX: 84FA -CONSTANT: GL_DEPTH24_STENCIL8_EXT HEX: 88F0 -CONSTANT: GL_TEXTURE_STENCIL_SIZE_EXT HEX: 88F1 - - -! GL_EXT_texture_shared_exponent - - -CONSTANT: GL_RGB9_E5_EXT HEX: 8C3D -CONSTANT: GL_UNSIGNED_INT_5_9_9_9_REV_EXT HEX: 8C3E -CONSTANT: GL_TEXTURE_SHARED_SIZE_EXT HEX: 8C3F - - -! GL_EXT_packed_float - - -CONSTANT: GL_R11F_G11F_B10F_EXT HEX: 8C3A -CONSTANT: GL_UNSIGNED_INT_10F_11F_11F_REV_EXT HEX: 8C3B -CONSTANT: GL_RGBA_SIGNED_COMPONENTS_EXT HEX: 8C3C +GL-FUNCTION: void glCopyBufferSubData { glCopyBufferSubDataEXT } ( GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size ) ; ! GL_EXT_geometry_shader4 @@ -1977,10 +2148,6 @@ CONSTANT: GL_RGBA_SIGNED_COMPONENTS_EXT HEX: 8C3C GL-FUNCTION: void glProgramParameteriEXT { } ( GLuint program, GLenum pname, GLint value ) ; GL-FUNCTION: void glFramebufferTextureEXT { } ( GLenum target, GLenum attachment, GLuint texture, GLint level ) ; -GL-FUNCTION: void glFramebufferTextureLayerEXT { } ( GLenum target, GLenum attachment, - GLuint texture, GLint level, GLint layer ) ; -GL-FUNCTION: void glFramebufferTextureFaceEXT { } ( GLenum target, GLenum attachment, - GLuint texture, GLint level, GLenum face ) ; CONSTANT: GL_GEOMETRY_SHADER_EXT HEX: 8DD9 CONSTANT: GL_GEOMETRY_VERTICES_OUT_EXT HEX: 8DDA @@ -1989,7 +2156,6 @@ CONSTANT: GL_GEOMETRY_OUTPUT_TYPE_EXT HEX: 8DDC CONSTANT: GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT HEX: 8C29 CONSTANT: GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT HEX: 8DDD CONSTANT: GL_MAX_VERTEX_VARYING_COMPONENTS_EXT HEX: 8DDE -CONSTANT: GL_MAX_VARYING_COMPONENTS_EXT HEX: 8B4B CONSTANT: GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT HEX: 8DDF CONSTANT: GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT HEX: 8DE0 CONSTANT: GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT HEX: 8DE1 @@ -2000,110 +2166,63 @@ CONSTANT: GL_TRIANGLE_STRIP_ADJACENCY_EXT HEX: D CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT HEX: 8DA8 CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT HEX: 8DA9 CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT HEX: 8DA7 -ALIAS: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT CONSTANT: GL_PROGRAM_POINT_SIZE_EXT HEX: 8642 +! GL_EXT_framebuffer_object + +CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT HEX: 8CD9 +CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT HEX: 8CDA + +! GL_ARB_texture_float + +CONSTANT: GL_ALPHA32F_ARB HEX: 8816 +CONSTANT: GL_INTENSITY32F_ARB HEX: 8817 +CONSTANT: GL_LUMINANCE32F_ARB HEX: 8818 +CONSTANT: GL_LUMINANCE_ALPHA32F_ARB HEX: 8819 +CONSTANT: GL_ALPHA16F_ARB HEX: 881C +CONSTANT: GL_INTENSITY16F_ARB HEX: 881D +CONSTANT: GL_LUMINANCE16F_ARB HEX: 881E +CONSTANT: GL_LUMINANCE_ALPHA16F_ARB HEX: 881F +CONSTANT: GL_TEXTURE_LUMINANCE_TYPE_ARB HEX: 8C14 +CONSTANT: GL_TEXTURE_INTENSITY_TYPE_ARB HEX: 8C15 + ! GL_EXT_texture_integer - -GL-FUNCTION: void glClearColorIiEXT { } ( GLint r, GLint g, GLint b, GLint a ) ; -GL-FUNCTION: void glClearColorIuiEXT { } ( GLuint r, GLuint g, GLuint b, GLuint a ) ; -GL-FUNCTION: void glTexParameterIivEXT { } ( GLenum target, GLenum pname, GLint* params ) ; -GL-FUNCTION: void glTexParameterIuivEXT { } ( GLenum target, GLenum pname, GLuint* params ) ; -GL-FUNCTION: void glGetTexParameterIivEXT { } ( GLenum target, GLenum pname, GLint* params ) ; -GL-FUNCTION: void glGetTexParameterIuivEXT { } ( GLenum target, GLenum pname, GLuint* params ) ; - -CONSTANT: GL_RGBA_INTEGER_MODE_EXT HEX: 8D9E - -CONSTANT: GL_RGBA32UI_EXT HEX: 8D70 -CONSTANT: GL_RGB32UI_EXT HEX: 8D71 CONSTANT: GL_ALPHA32UI_EXT HEX: 8D72 CONSTANT: GL_INTENSITY32UI_EXT HEX: 8D73 CONSTANT: GL_LUMINANCE32UI_EXT HEX: 8D74 CONSTANT: GL_LUMINANCE_ALPHA32UI_EXT HEX: 8D75 -CONSTANT: GL_RGBA16UI_EXT HEX: 8D76 -CONSTANT: GL_RGB16UI_EXT HEX: 8D77 CONSTANT: GL_ALPHA16UI_EXT HEX: 8D78 CONSTANT: GL_INTENSITY16UI_EXT HEX: 8D79 CONSTANT: GL_LUMINANCE16UI_EXT HEX: 8D7A CONSTANT: GL_LUMINANCE_ALPHA16UI_EXT HEX: 8D7B -CONSTANT: GL_RGBA8UI_EXT HEX: 8D7C -CONSTANT: GL_RGB8UI_EXT HEX: 8D7D CONSTANT: GL_ALPHA8UI_EXT HEX: 8D7E CONSTANT: GL_INTENSITY8UI_EXT HEX: 8D7F CONSTANT: GL_LUMINANCE8UI_EXT HEX: 8D80 CONSTANT: GL_LUMINANCE_ALPHA8UI_EXT HEX: 8D81 -CONSTANT: GL_RGBA32I_EXT HEX: 8D82 -CONSTANT: GL_RGB32I_EXT HEX: 8D83 CONSTANT: GL_ALPHA32I_EXT HEX: 8D84 CONSTANT: GL_INTENSITY32I_EXT HEX: 8D85 CONSTANT: GL_LUMINANCE32I_EXT HEX: 8D86 CONSTANT: GL_LUMINANCE_ALPHA32I_EXT HEX: 8D87 -CONSTANT: GL_RGBA16I_EXT HEX: 8D88 -CONSTANT: GL_RGB16I_EXT HEX: 8D89 CONSTANT: GL_ALPHA16I_EXT HEX: 8D8A CONSTANT: GL_INTENSITY16I_EXT HEX: 8D8B CONSTANT: GL_LUMINANCE16I_EXT HEX: 8D8C CONSTANT: GL_LUMINANCE_ALPHA16I_EXT HEX: 8D8D -CONSTANT: GL_RGBA8I_EXT HEX: 8D8E -CONSTANT: GL_RGB8I_EXT HEX: 8D8F CONSTANT: GL_ALPHA8I_EXT HEX: 8D90 CONSTANT: GL_INTENSITY8I_EXT HEX: 8D91 CONSTANT: GL_LUMINANCE8I_EXT HEX: 8D92 CONSTANT: GL_LUMINANCE_ALPHA8I_EXT HEX: 8D93 -CONSTANT: GL_RED_INTEGER_EXT HEX: 8D94 -CONSTANT: GL_GREEN_INTEGER_EXT HEX: 8D95 -CONSTANT: GL_BLUE_INTEGER_EXT HEX: 8D96 CONSTANT: GL_ALPHA_INTEGER_EXT HEX: 8D97 -CONSTANT: GL_RGB_INTEGER_EXT HEX: 8D98 -CONSTANT: GL_RGBA_INTEGER_EXT HEX: 8D99 -CONSTANT: GL_BGR_INTEGER_EXT HEX: 8D9A -CONSTANT: GL_BGRA_INTEGER_EXT HEX: 8D9B -CONSTANT: GL_LUMINANCE_INTEGER_EXT HEX: 8D9C -CONSTANT: GL_LUMINANCE_ALPHA_INTEGER_EXT HEX: 8D9D +CONSTANT: GL_LUMINANCE_INTEGER_EXT HEX: 8D9C +CONSTANT: GL_LUMINANCE_ALPHA_INTEGER_EXT HEX: 8D9D - -! GL_EXT_transform_feedback - - -GL-FUNCTION: void glBindBufferRangeEXT { } ( GLenum target, GLuint index, GLuint buffer, - GLintptr offset, GLsizeiptr size ) ; -GL-FUNCTION: void glBindBufferOffsetEXT { } ( GLenum target, GLuint index, GLuint buffer, - GLintptr offset ) ; -GL-FUNCTION: void glBindBufferBaseEXT { } ( GLenum target, GLuint index, GLuint buffer ) ; - -GL-FUNCTION: void glBeginTransformFeedbackEXT { } ( GLenum primitiveMode ) ; -GL-FUNCTION: void glEndTransformFeedbackEXT { } ( ) ; - -GL-FUNCTION: void glTransformFeedbackVaryingsEXT { } ( GLuint program, GLsizei count, - GLchar** varyings, GLenum bufferMode ) ; -GL-FUNCTION: void glGetTransformFeedbackVaryingEXT { } ( GLuint program, GLuint index, - GLsizei bufSize, GLsizei* length, - GLsizei* size, GLenum* type, GLchar* name ) ; - -GL-FUNCTION: void glGetIntegerIndexedvEXT { } ( GLenum param, GLuint index, GLint* values ) ; -GL-FUNCTION: void glGetBooleanIndexedvEXT { } ( GLenum param, GLuint index, GLboolean* values ) ; - -CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_EXT HEX: 8C8E -CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT HEX: 8C84 -CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT HEX: 8C85 -CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT HEX: 8C8F -CONSTANT: GL_INTERLEAVED_ATTRIBS_EXT HEX: 8C8C -CONSTANT: GL_SEPARATE_ATTRIBS_EXT HEX: 8C8D -CONSTANT: GL_PRIMITIVES_GENERATED_EXT HEX: 8C87 -CONSTANT: GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT HEX: 8C88 -CONSTANT: GL_RASTERIZER_DISCARD_EXT HEX: 8C89 -CONSTANT: GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT HEX: 8C8A -CONSTANT: GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT HEX: 8C8B -CONSTANT: GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT HEX: 8C80 -CONSTANT: GL_TRANSFORM_FEEDBACK_VARYINGS_EXT HEX: 8C83 -CONSTANT: GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT HEX: 8C7F -CONSTANT: GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT HEX: 8C76 +GL-FUNCTION: void glClearColorIiEXT { } ( GLint r, GLint g, GLint b, GLint a ) ; +GL-FUNCTION: void glClearColorIuiEXT { } ( GLuint r, GLuint g, GLuint b, GLuint a ) ; diff --git a/basis/opengl/textures/textures.factor b/basis/opengl/textures/textures.factor index 25ef6ee2d3..34cb14a442 100755 --- a/basis/opengl/textures/textures.factor +++ b/basis/opengl/textures/textures.factor @@ -69,9 +69,10 @@ CONSTANT: image-internal-formats H{ { { INTENSITY int-integer-components } $ GL_INTENSITY32I_EXT } { { INTENSITY uint-integer-components } $ GL_INTENSITY32UI_EXT } - { { DEPTH ushort-components } $ GL_DEPTH_COMPONENT16 } - { { DEPTH u-24-components } $ GL_DEPTH_COMPONENT24 } - { { DEPTH uint-components } $ GL_DEPTH_COMPONENT32 } + { { DEPTH ushort-components } $ GL_DEPTH_COMPONENT16 } + { { DEPTH u-24-components } $ GL_DEPTH_COMPONENT24 } + { { DEPTH uint-components } $ GL_DEPTH_COMPONENT32 } + { { DEPTH float-components } $ GL_DEPTH_COMPONENT32F } { { LA ubyte-components } $ GL_LUMINANCE8_ALPHA8 } { { LA ushort-components } $ GL_LUMINANCE16_ALPHA16 } @@ -95,36 +96,37 @@ CONSTANT: image-internal-formats H{ { { RG int-integer-components } $ GL_RG32I } { { RG uint-integer-components } $ GL_RG32UI } - { { DEPTH-STENCIL u-24-8-components } $ GL_DEPTH24_STENCIL8_EXT } + { { DEPTH-STENCIL u-24-8-components } $ GL_DEPTH24_STENCIL8 } + { { DEPTH-STENCIL float-32-u-8-components } $ GL_DEPTH32F_STENCIL8 } { { RGB ubyte-components } $ GL_RGB8 } { { RGB ushort-components } $ GL_RGB16 } - { { RGB half-components } $ GL_RGB16F_ARB } - { { RGB float-components } $ GL_RGB32F_ARB } - { { RGB byte-integer-components } $ GL_RGB8I_EXT } - { { RGB ubyte-integer-components } $ GL_RGB8UI_EXT } - { { RGB byte-integer-components } $ GL_RGB8I_EXT } - { { RGB ubyte-integer-components } $ GL_RGB8UI_EXT } - { { RGB short-integer-components } $ GL_RGB16I_EXT } - { { RGB ushort-integer-components } $ GL_RGB16UI_EXT } - { { RGB int-integer-components } $ GL_RGB32I_EXT } - { { RGB uint-integer-components } $ GL_RGB32UI_EXT } + { { RGB half-components } $ GL_RGB16F } + { { RGB float-components } $ GL_RGB32F } + { { RGB byte-integer-components } $ GL_RGB8I } + { { RGB ubyte-integer-components } $ GL_RGB8UI } + { { RGB byte-integer-components } $ GL_RGB8I } + { { RGB ubyte-integer-components } $ GL_RGB8UI } + { { RGB short-integer-components } $ GL_RGB16I } + { { RGB ushort-integer-components } $ GL_RGB16UI } + { { RGB int-integer-components } $ GL_RGB32I } + { { RGB uint-integer-components } $ GL_RGB32UI } { { RGB u-5-6-5-components } $ GL_RGB5 } - { { RGB u-9-9-9-e5-components } $ GL_RGB9_E5_EXT } - { { RGB float-11-11-10-components } $ GL_R11F_G11F_B10F_EXT } + { { RGB u-9-9-9-e5-components } $ GL_RGB9_E5 } + { { RGB float-11-11-10-components } $ GL_R11F_G11F_B10F } { { RGBA ubyte-components } $ GL_RGBA8 } { { RGBA ushort-components } $ GL_RGBA16 } - { { RGBA half-components } $ GL_RGBA16F_ARB } - { { RGBA float-components } $ GL_RGBA32F_ARB } - { { RGBA byte-integer-components } $ GL_RGBA8I_EXT } - { { RGBA ubyte-integer-components } $ GL_RGBA8UI_EXT } - { { RGBA byte-integer-components } $ GL_RGBA8I_EXT } - { { RGBA ubyte-integer-components } $ GL_RGBA8UI_EXT } - { { RGBA short-integer-components } $ GL_RGBA16I_EXT } - { { RGBA ushort-integer-components } $ GL_RGBA16UI_EXT } - { { RGBA int-integer-components } $ GL_RGBA32I_EXT } - { { RGBA uint-integer-components } $ GL_RGBA32UI_EXT } + { { RGBA half-components } $ GL_RGBA16F } + { { RGBA float-components } $ GL_RGBA32F } + { { RGBA byte-integer-components } $ GL_RGBA8I } + { { RGBA ubyte-integer-components } $ GL_RGBA8UI } + { { RGBA byte-integer-components } $ GL_RGBA8I } + { { RGBA ubyte-integer-components } $ GL_RGBA8UI } + { { RGBA short-integer-components } $ GL_RGBA16I } + { { RGBA ushort-integer-components } $ GL_RGBA16UI } + { { RGBA int-integer-components } $ GL_RGBA32I } + { { RGBA uint-integer-components } $ GL_RGBA32UI } { { RGBA u-5-5-5-1-components } $ GL_RGB5_A1 } { { RGBA u-10-10-10-2-components } $ GL_RGB10_A2 } } @@ -154,15 +156,15 @@ M: XBGR fix-internal-component-order drop RGBA ; swap { { A [ drop GL_ALPHA_INTEGER_EXT ] } { L [ drop GL_LUMINANCE_INTEGER_EXT ] } - { R [ drop GL_RED_INTEGER_EXT ] } + { R [ drop GL_RED_INTEGER ] } { LA [ drop GL_LUMINANCE_ALPHA_INTEGER_EXT ] } { RG [ drop GL_RG_INTEGER ] } - { BGR [ drop GL_BGR_INTEGER_EXT ] } - { RGB [ drop GL_RGB_INTEGER_EXT ] } - { BGRA [ drop GL_BGRA_INTEGER_EXT ] } - { RGBA [ drop GL_RGBA_INTEGER_EXT ] } - { BGRX [ drop GL_BGRA_INTEGER_EXT ] } - { RGBX [ drop GL_RGBA_INTEGER_EXT ] } + { BGR [ drop GL_BGR_INTEGER ] } + { RGB [ drop GL_RGB_INTEGER ] } + { BGRA [ drop GL_BGRA_INTEGER ] } + { RGBA [ drop GL_RGBA_INTEGER ] } + { BGRX [ drop GL_BGRA_INTEGER ] } + { RGBX [ drop GL_RGBA_INTEGER ] } [ swap unsupported-component-order ] } case ] [ @@ -184,7 +186,7 @@ M: XBGR fix-internal-component-order drop RGBA ; { XBGR [ drop GL_RGBA ] } { INTENSITY [ drop GL_INTENSITY ] } { DEPTH [ drop GL_DEPTH_COMPONENT ] } - { DEPTH-STENCIL [ drop GL_DEPTH_STENCIL_EXT ] } + { DEPTH-STENCIL [ drop GL_DEPTH_STENCIL ] } [ swap unsupported-component-order ] } case ] if ; @@ -210,7 +212,7 @@ M: ubyte-components (component-type>type) M: ushort-components (component-type>type) not-alpha-first GL_UNSIGNED_SHORT ; M: uint-components (component-type>type) not-alpha-first GL_UNSIGNED_INT ; -M: half-components (component-type>type) not-alpha-first GL_HALF_FLOAT_ARB ; +M: half-components (component-type>type) not-alpha-first GL_HALF_FLOAT ; M: float-components (component-type>type) not-alpha-first GL_FLOAT ; M: byte-integer-components (component-type>type) not-alpha-first GL_BYTE ; M: ubyte-integer-components (component-type>type) not-alpha-first GL_UNSIGNED_BYTE ; @@ -237,15 +239,15 @@ M: u-24-components (component-type>type) M: u-24-8-components (component-type>type) over DEPTH-STENCIL = - [ 2drop GL_UNSIGNED_INT_24_8_EXT ] [ unsupported-component-order ] if ; + [ 2drop GL_UNSIGNED_INT_24_8 ] [ unsupported-component-order ] if ; M: u-9-9-9-e5-components (component-type>type) over BGR = - [ 2drop GL_UNSIGNED_INT_5_9_9_9_REV_EXT ] [ unsupported-component-order ] if ; + [ 2drop GL_UNSIGNED_INT_5_9_9_9_REV ] [ unsupported-component-order ] if ; M: float-11-11-10-components (component-type>type) over BGR = - [ 2drop GL_UNSIGNED_INT_10F_11F_11F_REV_EXT ] [ unsupported-component-order ] if ; + [ 2drop GL_UNSIGNED_INT_10F_11F_11F_REV ] [ unsupported-component-order ] if ; : image-data-format ( component-order component-type -- gl-format gl-type ) [ (component-order>format) ] [ (component-type>type) ] 2bi ; From 845e9532baf16bba5f81459724b9e715c4390c05 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Wed, 24 Jun 2009 17:59:25 -0500 Subject: [PATCH 25/27] update demos using GL_EXT_framebuffer_object and GL_ARB_texture_float to use suffixless opengl 3 symbol names --- .../framebuffers/framebuffers-docs.factor | 16 +++---- basis/opengl/framebuffers/framebuffers.factor | 42 +++++++++---------- basis/opengl/opengl-docs.factor | 2 +- basis/opengl/shaders/shaders.factor | 2 +- basis/opengl/textures/textures-tests.factor | 8 ++-- extra/bunny/outlined/outlined.factor | 23 +++++----- extra/spheres/spheres.factor | 14 +++---- 7 files changed, 53 insertions(+), 54 deletions(-) diff --git a/basis/opengl/framebuffers/framebuffers-docs.factor b/basis/opengl/framebuffers/framebuffers-docs.factor index c5507dcce1..6efa63d04e 100644 --- a/basis/opengl/framebuffers/framebuffers-docs.factor +++ b/basis/opengl/framebuffers/framebuffers-docs.factor @@ -4,32 +4,32 @@ IN: opengl.framebuffers HELP: gen-framebuffer { $values { "id" integer } } -{ $description "Wrapper for " { $link glGenFramebuffersEXT } " to handle the common case of generating a single framebuffer ID." } ; +{ $description "Wrapper for " { $link glGenFramebuffers } " to handle the common case of generating a single framebuffer ID." } ; HELP: gen-renderbuffer { $values { "id" integer } } -{ $description "Wrapper for " { $link glGenRenderbuffersEXT } " to handle the common case of generating a single render buffer ID." } ; +{ $description "Wrapper for " { $link glGenRenderbuffers } " to handle the common case of generating a single render buffer ID." } ; HELP: delete-framebuffer { $values { "id" integer } } -{ $description "Wrapper for " { $link glDeleteFramebuffersEXT } " to handle the common case of deleting a single framebuffer ID." } ; +{ $description "Wrapper for " { $link glDeleteFramebuffers } " to handle the common case of deleting a single framebuffer ID." } ; HELP: delete-renderbuffer { $values { "id" integer } } -{ $description "Wrapper for " { $link glDeleteRenderbuffersEXT } " to handle the common case of deleting a single render buffer ID." } ; +{ $description "Wrapper for " { $link glDeleteRenderbuffers } " to handle the common case of deleting a single render buffer ID." } ; { gen-framebuffer delete-framebuffer } related-words { gen-renderbuffer delete-renderbuffer } related-words HELP: framebuffer-incomplete? { $values { "status/f" "The framebuffer error code, or " { $snippet "f" } " if the framebuffer is render-complete." } } -{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " to see if it is incomplete, i.e., it is not ready to be rendered to." } ; +{ $description "Checks the framebuffer currently bound by " { $link glBindFramebuffer } " or " { $link with-framebuffer } " to see if it is incomplete, i.e., it is not ready to be rendered to." } ; HELP: check-framebuffer -{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " with " { $link framebuffer-incomplete? } ", and throws a descriptive error if the framebuffer is incomplete." } ; +{ $description "Checks the framebuffer currently bound by " { $link glBindFramebuffer } " or " { $link with-framebuffer } " with " { $link framebuffer-incomplete? } ", and throws a descriptive error if the framebuffer is incomplete." } ; HELP: with-framebuffer { $values { "id" "The id of a framebuffer object." } { "quot" "a quotation" } } -{ $description "Binds framebuffer " { $snippet "id" } " in the dynamic extent of " { $snippet "quot" } ", restoring the window framebuffer when finished." } ; +{ $description "Binds framebuffer " { $snippet "id" } " for drawing in the dynamic extent of " { $snippet "quot" } ", restoring the window framebuffer when finished." } ; -ABOUT: "gl-utilities" \ No newline at end of file +ABOUT: "gl-utilities" diff --git a/basis/opengl/framebuffers/framebuffers.factor b/basis/opengl/framebuffers/framebuffers.factor index f3ed8d320d..d3e6d7e25a 100644 --- a/basis/opengl/framebuffers/framebuffers.factor +++ b/basis/opengl/framebuffers/framebuffers.factor @@ -5,30 +5,30 @@ alien.c-types ; IN: opengl.framebuffers : gen-framebuffer ( -- id ) - [ glGenFramebuffersEXT ] (gen-gl-object) ; + [ glGenFramebuffers ] (gen-gl-object) ; : gen-renderbuffer ( -- id ) - [ glGenRenderbuffersEXT ] (gen-gl-object) ; + [ glGenRenderbuffers ] (gen-gl-object) ; : delete-framebuffer ( id -- ) - [ glDeleteFramebuffersEXT ] (delete-gl-object) ; + [ glDeleteFramebuffers ] (delete-gl-object) ; : delete-renderbuffer ( id -- ) - [ glDeleteRenderbuffersEXT ] (delete-gl-object) ; + [ glDeleteRenderbuffers ] (delete-gl-object) ; : framebuffer-incomplete? ( -- status/f ) - GL_FRAMEBUFFER_EXT glCheckFramebufferStatusEXT - dup GL_FRAMEBUFFER_COMPLETE_EXT = f rot ? ; + GL_DRAW_FRAMEBUFFER glCheckFramebufferStatus + dup GL_FRAMEBUFFER_COMPLETE = f rot ? ; : framebuffer-error ( status -- * ) { - { GL_FRAMEBUFFER_COMPLETE_EXT [ "framebuffer complete" ] } - { GL_FRAMEBUFFER_UNSUPPORTED_EXT [ "framebuffer configuration unsupported" ] } - { GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT [ "framebuffer incomplete (incomplete attachment)" ] } - { GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT [ "framebuffer incomplete (missing attachment)" ] } + { GL_FRAMEBUFFER_COMPLETE [ "framebuffer complete" ] } + { GL_FRAMEBUFFER_UNSUPPORTED [ "framebuffer configuration unsupported" ] } + { GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT [ "framebuffer incomplete (incomplete attachment)" ] } + { GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT [ "framebuffer incomplete (missing attachment)" ] } { GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT [ "framebuffer incomplete (dimension mismatch)" ] } { GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT [ "framebuffer incomplete (format mismatch)" ] } - { GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT [ "framebuffer incomplete (draw buffer(s) have no attachment)" ] } - { GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT [ "framebuffer incomplete (read buffer has no attachment)" ] } - { GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT [ "framebuffer incomplete (multisample counts don't match)" ] } + { GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER [ "framebuffer incomplete (draw buffer(s) have no attachment)" ] } + { GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER [ "framebuffer incomplete (read buffer has no attachment)" ] } + { GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE [ "framebuffer incomplete (multisample counts don't match)" ] } [ drop gl-error "unknown framebuffer error" ] } case throw ; @@ -36,19 +36,19 @@ IN: opengl.framebuffers framebuffer-incomplete? [ framebuffer-error ] when* ; : with-framebuffer ( id quot -- ) - [ GL_FRAMEBUFFER_EXT swap glBindFramebufferEXT ] dip - [ GL_FRAMEBUFFER_EXT 0 glBindFramebufferEXT ] [ ] cleanup ; inline + [ GL_DRAW_FRAMEBUFFER swap glBindFramebuffer ] dip + [ GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer ] [ ] cleanup ; inline : with-draw-read-framebuffers ( draw-id read-id quot -- ) [ - [ GL_DRAW_FRAMEBUFFER_EXT swap glBindFramebufferEXT ] - [ GL_READ_FRAMEBUFFER_EXT swap glBindFramebufferEXT ] bi* + [ GL_DRAW_FRAMEBUFFER swap glBindFramebuffer ] + [ GL_READ_FRAMEBUFFER swap glBindFramebuffer ] bi* ] dip [ - GL_DRAW_FRAMEBUFFER_EXT 0 glBindFramebufferEXT - GL_READ_FRAMEBUFFER_EXT 0 glBindFramebufferEXT + GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer + GL_READ_FRAMEBUFFER 0 glBindFramebuffer ] [ ] cleanup ; inline : framebuffer-attachment ( attachment -- id ) - GL_FRAMEBUFFER_EXT swap GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT - 0 [ glGetFramebufferAttachmentParameterivEXT ] keep *uint ; + GL_FRAMEBUFFER swap GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME + 0 [ glGetFramebufferAttachmentParameteriv ] keep *uint ; diff --git a/basis/opengl/opengl-docs.factor b/basis/opengl/opengl-docs.factor index b773833280..1e4112d5d4 100644 --- a/basis/opengl/opengl-docs.factor +++ b/basis/opengl/opengl-docs.factor @@ -45,7 +45,7 @@ HELP: bind-texture-unit { $description "Binds texture " { $snippet "id" } " to texture target " { $snippet "target" } " of texture unit " { $snippet "unit" } ". Equivalent to " { $snippet "unit glActiveTexture target id glBindTexture" } "." } ; HELP: set-draw-buffers -{ $values { "buffers" "A sequence of buffer words (e.g. " { $snippet "GL_BACK" } ", " { $snippet "GL_COLOR_ATTACHMENT0_EXT" } ")"} } +{ $values { "buffers" "A sequence of buffer words (e.g. " { $snippet "GL_BACK" } ", " { $snippet "GL_COLOR_ATTACHMENT0" } ")"} } { $description "Wrapper for " { $link glDrawBuffers } ". Sets up the buffers named in the sequence for simultaneous drawing." } ; HELP: do-attribs diff --git a/basis/opengl/shaders/shaders.factor b/basis/opengl/shaders/shaders.factor index a946fd16f4..1561138522 100755 --- a/basis/opengl/shaders/shaders.factor +++ b/basis/opengl/shaders/shaders.factor @@ -65,7 +65,7 @@ PREDICATE: fragment-shader < gl-shader (fragment-shader?) ; glCreateProgram [ [ swap [ glAttachShader ] with each ] - [ swap [ first2 swap glBindFragDataLocationEXT ] with each ] bi-curry bi* + [ swap [ first2 swap glBindFragDataLocation ] with each ] bi-curry bi* ] [ glLinkProgram ] [ ] tri diff --git a/basis/opengl/textures/textures-tests.factor b/basis/opengl/textures/textures-tests.factor index 220d2e8e87..895298fe54 100644 --- a/basis/opengl/textures/textures-tests.factor +++ b/basis/opengl/textures/textures-tests.factor @@ -26,14 +26,14 @@ ${ GL_RGBA8 GL_BGRA GL_UNSIGNED_BYTE } ${ GL_RGBA8 GL_BGRA GL_UNSIGNED_INT_8_8_8_8_REV } [ ARGB ubyte-components (image-format) ] unit-test -${ GL_RGBA32F_ARB GL_RGBA GL_FLOAT } +${ GL_RGBA32F GL_RGBA GL_FLOAT } [ RGBA float-components (image-format) ] unit-test -${ GL_RGBA32UI_EXT GL_BGRA_INTEGER_EXT GL_UNSIGNED_INT } +${ GL_RGBA32UI GL_BGRA_INTEGER GL_UNSIGNED_INT } [ BGRA uint-integer-components (image-format) ] unit-test -${ GL_RGB9_E5_EXT GL_RGB GL_UNSIGNED_INT_5_9_9_9_REV_EXT } +${ GL_RGB9_E5 GL_RGB GL_UNSIGNED_INT_5_9_9_9_REV } [ BGR u-9-9-9-e5-components (image-format) ] unit-test -${ GL_R11F_G11F_B10F_EXT GL_RGB GL_UNSIGNED_INT_10F_11F_11F_REV_EXT } +${ GL_R11F_G11F_B10F GL_RGB GL_UNSIGNED_INT_10F_11F_11F_REV } [ BGR float-11-11-10-components (image-format) ] unit-test diff --git a/extra/bunny/outlined/outlined.factor b/extra/bunny/outlined/outlined.factor index 8856032488..858689738f 100755 --- a/extra/bunny/outlined/outlined.factor +++ b/extra/bunny/outlined/outlined.factor @@ -120,14 +120,13 @@ TUPLE: bunny-outlined framebuffer framebuffer-dim ; : outlining-supported? ( -- ? ) - "2.0" { + "3.0" { "GL_ARB_shader_objects" "GL_ARB_draw_buffers" "GL_ARB_multitexture" - } has-gl-version-or-extensions? { "GL_EXT_framebuffer_object" "GL_ARB_texture_float" - } has-gl-extensions? and ; + } has-gl-version-or-extensions? ; : pass1-program ( -- program ) vertex-shader-source check-gl-shader @@ -154,14 +153,14 @@ TUPLE: bunny-outlined GL_TEXTURE_2D 0 iformat dim first2 0 xformat GL_UNSIGNED_BYTE f glTexImage2D ; :: (attach-framebuffer-texture) ( texture attachment -- ) - GL_FRAMEBUFFER_EXT attachment GL_TEXTURE_2D texture 0 glFramebufferTexture2DEXT + GL_DRAW_FRAMEBUFFER attachment GL_TEXTURE_2D texture 0 glFramebufferTexture2D gl-error ; : (make-framebuffer) ( color-texture normal-texture depth-texture -- framebuffer ) 3array gen-framebuffer dup [ - swap GL_COLOR_ATTACHMENT0_EXT - GL_COLOR_ATTACHMENT1_EXT - GL_DEPTH_ATTACHMENT_EXT 3array [ (attach-framebuffer-texture) ] 2each + swap GL_COLOR_ATTACHMENT0 + GL_COLOR_ATTACHMENT1 + GL_DEPTH_ATTACHMENT 3array [ (attach-framebuffer-texture) ] 2each check-framebuffer ] with-framebuffer ; @@ -182,8 +181,8 @@ MACRO: (framebuffer-texture>>draw) ( iformat xformat setter -- ) : (make-framebuffer-textures) ( draw dim -- draw color normal depth ) { [ drop ] - [ GL_RGBA16F_ARB GL_RGBA [ >>color-texture ] (framebuffer-texture>>draw) ] - [ GL_RGBA16F_ARB GL_RGBA [ >>normal-texture ] (framebuffer-texture>>draw) ] + [ GL_RGBA16F GL_RGBA [ >>color-texture ] (framebuffer-texture>>draw) ] + [ GL_RGBA16F GL_RGBA [ >>normal-texture ] (framebuffer-texture>>draw) ] [ GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT [ >>depth-texture ] (framebuffer-texture>>draw) @@ -202,17 +201,17 @@ MACRO: (framebuffer-texture>>draw) ( iformat xformat setter -- ) [ drop ] [ remake-framebuffer ] if ; : clear-framebuffer ( -- ) - GL_COLOR_ATTACHMENT0_EXT glDrawBuffer + GL_COLOR_ATTACHMENT0 glDrawBuffer 0.15 0.15 0.15 1.0 glClearColor GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear - GL_COLOR_ATTACHMENT1_EXT glDrawBuffer + GL_COLOR_ATTACHMENT1 glDrawBuffer 0.0 0.0 0.0 0.0 glClearColor GL_COLOR_BUFFER_BIT glClear ; : (pass1) ( geom draw -- ) dup framebuffer>> [ clear-framebuffer - { GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT } set-draw-buffers + { GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT1 } set-draw-buffers pass1-program>> (draw-cel-shaded-bunny) ] with-framebuffer ; diff --git a/extra/spheres/spheres.factor b/extra/spheres/spheres.factor index b07b7a5ad1..b7431caef8 100755 --- a/extra/spheres/spheres.factor +++ b/extra/spheres/spheres.factor @@ -148,14 +148,14 @@ M: spheres-world distance-step : (make-reflection-depthbuffer) ( -- depthbuffer ) gen-renderbuffer [ - GL_RENDERBUFFER_EXT swap glBindRenderbufferEXT - GL_RENDERBUFFER_EXT GL_DEPTH_COMPONENT32 (reflection-dim) glRenderbufferStorageEXT + GL_RENDERBUFFER swap glBindRenderbuffer + GL_RENDERBUFFER GL_DEPTH_COMPONENT32 (reflection-dim) glRenderbufferStorage ] keep ; : (make-reflection-framebuffer) ( depthbuffer -- framebuffer ) gen-framebuffer dup [ - swap [ GL_FRAMEBUFFER_EXT GL_DEPTH_ATTACHMENT_EXT GL_RENDERBUFFER_EXT ] dip - glFramebufferRenderbufferEXT + swap [ GL_DRAW_FRAMEBUFFER GL_DEPTH_ATTACHMENT GL_RENDERBUFFER ] dip + glFramebufferRenderbuffer ] with-framebuffer ; : (plane-program) ( -- program ) @@ -244,9 +244,9 @@ M: spheres-world pref-dim* : (reflection-face) ( gadget face -- ) swap reflection-texture>> [ - GL_FRAMEBUFFER_EXT - GL_COLOR_ATTACHMENT0_EXT - ] 2dip 0 glFramebufferTexture2DEXT + GL_DRAW_FRAMEBUFFER + GL_COLOR_ATTACHMENT0 + ] 2dip 0 glFramebufferTexture2D check-framebuffer ; : (draw-reflection-texture) ( gadget -- ) From 327311b7a2a94b58dbb4336b4c12e2b3f4f7037b Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Wed, 24 Jun 2009 18:27:54 -0500 Subject: [PATCH 26/27] opengl.gl3 vocab containing only forward-compatible symbols. fill in some holes in opengl.gl --- basis/opengl/gl/gl.factor | 29 +- basis/opengl/gl3/authors.txt | 1 + basis/opengl/gl3/gl3.factor | 1007 ++++++++++++++++++++++++++++++++++ basis/opengl/gl3/summary.txt | 1 + 4 files changed, 1036 insertions(+), 2 deletions(-) create mode 100644 basis/opengl/gl3/authors.txt create mode 100644 basis/opengl/gl3/gl3.factor create mode 100644 basis/opengl/gl3/summary.txt diff --git a/basis/opengl/gl/gl.factor b/basis/opengl/gl/gl.factor index ca0276320b..32c3ca4b82 100644 --- a/basis/opengl/gl/gl.factor +++ b/basis/opengl/gl/gl.factor @@ -322,7 +322,7 @@ CONSTANT: GL_DECR HEX: 1E03 CONSTANT: GL_NONE HEX: 0 CONSTANT: GL_LEFT HEX: 0406 CONSTANT: GL_RIGHT HEX: 0407 - +CONSTANT: GL_FRONT_LEFT HEX: 0400 CONSTANT: GL_FRONT_RIGHT HEX: 0401 CONSTANT: GL_BACK_LEFT HEX: 0402 CONSTANT: GL_BACK_RIGHT HEX: 0403 @@ -1167,6 +1167,22 @@ GL-FUNCTION: void glTexImage3D { glTexImage3DEXT } ( GLenum target, GLint level, GL-FUNCTION: void glTexSubImage3D { glTexSubImage3DEXT } ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid* pixels ) ; +! GL_ARB_imaging + + +CONSTANT: GL_CONSTANT_COLOR HEX: 8001 +CONSTANT: GL_ONE_MINUS_CONSTANT_COLOR HEX: 8002 +CONSTANT: GL_CONSTANT_ALPHA HEX: 8003 +CONSTANT: GL_ONE_MINUS_CONSTANT_ALPHA HEX: 8004 +CONSTANT: GL_BLEND_COLOR HEX: 8005 +CONSTANT: GL_FUNC_ADD HEX: 8006 +CONSTANT: GL_MIN HEX: 8007 +CONSTANT: GL_MAX HEX: 8008 +CONSTANT: GL_BLEND_EQUATION HEX: 8009 +CONSTANT: GL_FUNC_SUBTRACT HEX: 800A +CONSTANT: GL_FUNC_REVERSE_SUBTRACT HEX: 800B + + ! OpenGL 1.3 @@ -1370,6 +1386,8 @@ GL-FUNCTION: void glMultiDrawArrays { glMultiDrawArraysEXT } ( GLenum mode, GLin GL-FUNCTION: void glMultiDrawElements { glMultiDrawElementsEXT } ( GLenum mode, GLsizei* count, GLenum type, GLvoid** indices, GLsizei primcount ) ; GL-FUNCTION: void glPointParameterf { glPointParameterfARB } ( GLenum pname, GLfloat param ) ; GL-FUNCTION: void glPointParameterfv { glPointParameterfvARB } ( GLenum pname, GLfloat* params ) ; +GL-FUNCTION: void glPointParameteri { glPointParameteriARB } ( GLenum pname, GLint param ) ; +GL-FUNCTION: void glPointParameteriv { glPointParameterivARB } ( GLenum pname, GLint* params ) ; GL-FUNCTION: void glSecondaryColor3b { glSecondaryColor3bEXT } ( GLbyte red, GLbyte green, GLbyte blue ) ; GL-FUNCTION: void glSecondaryColor3bv { glSecondaryColor3bvEXT } ( GLbyte* v ) ; GL-FUNCTION: void glSecondaryColor3d { glSecondaryColor3dEXT } ( GLdouble red, GLdouble green, GLdouble blue ) ; @@ -1567,7 +1585,6 @@ CONSTANT: GL_UPPER_LEFT HEX: 8CA2 CONSTANT: GL_STENCIL_BACK_REF HEX: 8CA3 CONSTANT: GL_STENCIL_BACK_VALUE_MASK HEX: 8CA4 CONSTANT: GL_STENCIL_BACK_WRITEMASK HEX: 8CA5 -CONSTANT: GL_BLEND_EQUATION HEX: 8009 ALIAS: GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION TYPEDEF: char GLchar @@ -1687,6 +1704,12 @@ CONSTANT: GL_COMPRESSED_SRGB HEX: 8C48 CONSTANT: GL_COMPRESSED_SRGB_ALPHA HEX: 8C49 CONSTANT: GL_COMPRESSED_SLUMINANCE HEX: 8C4A CONSTANT: GL_COMPRESSED_SLUMINANCE_ALPHA HEX: 8C4B +CONSTANT: GL_FLOAT_MAT2x3 HEX: 8B65 +CONSTANT: GL_FLOAT_MAT2x4 HEX: 8B66 +CONSTANT: GL_FLOAT_MAT3x2 HEX: 8B67 +CONSTANT: GL_FLOAT_MAT3x4 HEX: 8B68 +CONSTANT: GL_FLOAT_MAT4x2 HEX: 8B69 +CONSTANT: GL_FLOAT_MAT4x3 HEX: 8B6A GL-FUNCTION: void glUniformMatrix2x3fv { } ( GLint location, GLsizei count, GLboolean transpose, GLfloat* value ) ; GL-FUNCTION: void glUniformMatrix2x4fv { } ( GLint location, GLsizei count, GLboolean transpose, GLfloat* value ) ; @@ -1699,6 +1722,8 @@ GL-FUNCTION: void glUniformMatrix4x3fv { } ( GLint location, GLsizei count, GLbo ! OpenGL 3.0 +TYPEDEF: ushort GLhalf + CONSTANT: GL_VERTEX_ATTRIB_ARRAY_INTEGER HEX: 88FD CONSTANT: GL_SAMPLER_CUBE_SHADOW HEX: 8DC5 CONSTANT: GL_UNSIGNED_INT_VEC2 HEX: 8DC6 diff --git a/basis/opengl/gl3/authors.txt b/basis/opengl/gl3/authors.txt new file mode 100644 index 0000000000..f13c9c1e77 --- /dev/null +++ b/basis/opengl/gl3/authors.txt @@ -0,0 +1 @@ +Joe Groff diff --git a/basis/opengl/gl3/gl3.factor b/basis/opengl/gl3/gl3.factor new file mode 100644 index 0000000000..2c10e639e5 --- /dev/null +++ b/basis/opengl/gl3/gl3.factor @@ -0,0 +1,1007 @@ +! (c)2009 Joe Groff bsd license +! This vocab only exports forward-compatible OpenGL 3.x symbols. +! For legacy OpenGL and extensions, use opengl.gl + +QUALIFIED-WITH: opengl.gl gl +IN: opengl.gl3 + +ALIAS: GL_DEPTH_BUFFER_BIT gl:GL_DEPTH_BUFFER_BIT +ALIAS: GL_STENCIL_BUFFER_BIT gl:GL_STENCIL_BUFFER_BIT +ALIAS: GL_COLOR_BUFFER_BIT gl:GL_COLOR_BUFFER_BIT +ALIAS: GL_FALSE gl:GL_FALSE +ALIAS: GL_TRUE gl:GL_TRUE +ALIAS: GL_POINTS gl:GL_POINTS +ALIAS: GL_LINES gl:GL_LINES +ALIAS: GL_LINE_LOOP gl:GL_LINE_LOOP +ALIAS: GL_LINE_STRIP gl:GL_LINE_STRIP +ALIAS: GL_TRIANGLES gl:GL_TRIANGLES +ALIAS: GL_TRIANGLE_STRIP gl:GL_TRIANGLE_STRIP +ALIAS: GL_TRIANGLE_FAN gl:GL_TRIANGLE_FAN +ALIAS: GL_NEVER gl:GL_NEVER +ALIAS: GL_LESS gl:GL_LESS +ALIAS: GL_EQUAL gl:GL_EQUAL +ALIAS: GL_LEQUAL gl:GL_LEQUAL +ALIAS: GL_GREATER gl:GL_GREATER +ALIAS: GL_NOTEQUAL gl:GL_NOTEQUAL +ALIAS: GL_GEQUAL gl:GL_GEQUAL +ALIAS: GL_ALWAYS gl:GL_ALWAYS +ALIAS: GL_ZERO gl:GL_ZERO +ALIAS: GL_ONE gl:GL_ONE +ALIAS: GL_SRC_COLOR gl:GL_SRC_COLOR +ALIAS: GL_ONE_MINUS_SRC_COLOR gl:GL_ONE_MINUS_SRC_COLOR +ALIAS: GL_SRC_ALPHA gl:GL_SRC_ALPHA +ALIAS: GL_ONE_MINUS_SRC_ALPHA gl:GL_ONE_MINUS_SRC_ALPHA +ALIAS: GL_DST_ALPHA gl:GL_DST_ALPHA +ALIAS: GL_ONE_MINUS_DST_ALPHA gl:GL_ONE_MINUS_DST_ALPHA +ALIAS: GL_DST_COLOR gl:GL_DST_COLOR +ALIAS: GL_ONE_MINUS_DST_COLOR gl:GL_ONE_MINUS_DST_COLOR +ALIAS: GL_SRC_ALPHA_SATURATE gl:GL_SRC_ALPHA_SATURATE +ALIAS: GL_NONE gl:GL_NONE +ALIAS: GL_FRONT_LEFT gl:GL_FRONT_LEFT +ALIAS: GL_FRONT_RIGHT gl:GL_FRONT_RIGHT +ALIAS: GL_BACK_LEFT gl:GL_BACK_LEFT +ALIAS: GL_BACK_RIGHT gl:GL_BACK_RIGHT +ALIAS: GL_FRONT gl:GL_FRONT +ALIAS: GL_BACK gl:GL_BACK +ALIAS: GL_LEFT gl:GL_LEFT +ALIAS: GL_RIGHT gl:GL_RIGHT +ALIAS: GL_FRONT_AND_BACK gl:GL_FRONT_AND_BACK +ALIAS: GL_NO_ERROR gl:GL_NO_ERROR +ALIAS: GL_INVALID_ENUM gl:GL_INVALID_ENUM +ALIAS: GL_INVALID_VALUE gl:GL_INVALID_VALUE +ALIAS: GL_INVALID_OPERATION gl:GL_INVALID_OPERATION +ALIAS: GL_OUT_OF_MEMORY gl:GL_OUT_OF_MEMORY +ALIAS: GL_CW gl:GL_CW +ALIAS: GL_CCW gl:GL_CCW +ALIAS: GL_POINT_SIZE gl:GL_POINT_SIZE +ALIAS: GL_POINT_SIZE_RANGE gl:GL_POINT_SIZE_RANGE +ALIAS: GL_POINT_SIZE_GRANULARITY gl:GL_POINT_SIZE_GRANULARITY +ALIAS: GL_LINE_SMOOTH gl:GL_LINE_SMOOTH +ALIAS: GL_LINE_WIDTH gl:GL_LINE_WIDTH +ALIAS: GL_LINE_WIDTH_RANGE gl:GL_LINE_WIDTH_RANGE +ALIAS: GL_LINE_WIDTH_GRANULARITY gl:GL_LINE_WIDTH_GRANULARITY +ALIAS: GL_POLYGON_SMOOTH gl:GL_POLYGON_SMOOTH +ALIAS: GL_CULL_FACE gl:GL_CULL_FACE +ALIAS: GL_CULL_FACE_MODE gl:GL_CULL_FACE_MODE +ALIAS: GL_FRONT_FACE gl:GL_FRONT_FACE +ALIAS: GL_DEPTH_RANGE gl:GL_DEPTH_RANGE +ALIAS: GL_DEPTH_TEST gl:GL_DEPTH_TEST +ALIAS: GL_DEPTH_WRITEMASK gl:GL_DEPTH_WRITEMASK +ALIAS: GL_DEPTH_CLEAR_VALUE gl:GL_DEPTH_CLEAR_VALUE +ALIAS: GL_DEPTH_FUNC gl:GL_DEPTH_FUNC +ALIAS: GL_STENCIL_TEST gl:GL_STENCIL_TEST +ALIAS: GL_STENCIL_CLEAR_VALUE gl:GL_STENCIL_CLEAR_VALUE +ALIAS: GL_STENCIL_FUNC gl:GL_STENCIL_FUNC +ALIAS: GL_STENCIL_VALUE_MASK gl:GL_STENCIL_VALUE_MASK +ALIAS: GL_STENCIL_FAIL gl:GL_STENCIL_FAIL +ALIAS: GL_STENCIL_PASS_DEPTH_FAIL gl:GL_STENCIL_PASS_DEPTH_FAIL +ALIAS: GL_STENCIL_PASS_DEPTH_PASS gl:GL_STENCIL_PASS_DEPTH_PASS +ALIAS: GL_STENCIL_REF gl:GL_STENCIL_REF +ALIAS: GL_STENCIL_WRITEMASK gl:GL_STENCIL_WRITEMASK +ALIAS: GL_VIEWPORT gl:GL_VIEWPORT +ALIAS: GL_DITHER gl:GL_DITHER +ALIAS: GL_BLEND_DST gl:GL_BLEND_DST +ALIAS: GL_BLEND_SRC gl:GL_BLEND_SRC +ALIAS: GL_BLEND gl:GL_BLEND +ALIAS: GL_LOGIC_OP_MODE gl:GL_LOGIC_OP_MODE +ALIAS: GL_COLOR_LOGIC_OP gl:GL_COLOR_LOGIC_OP +ALIAS: GL_DRAW_BUFFER gl:GL_DRAW_BUFFER +ALIAS: GL_READ_BUFFER gl:GL_READ_BUFFER +ALIAS: GL_SCISSOR_BOX gl:GL_SCISSOR_BOX +ALIAS: GL_SCISSOR_TEST gl:GL_SCISSOR_TEST +ALIAS: GL_COLOR_CLEAR_VALUE gl:GL_COLOR_CLEAR_VALUE +ALIAS: GL_COLOR_WRITEMASK gl:GL_COLOR_WRITEMASK +ALIAS: GL_DOUBLEBUFFER gl:GL_DOUBLEBUFFER +ALIAS: GL_STEREO gl:GL_STEREO +ALIAS: GL_LINE_SMOOTH_HINT gl:GL_LINE_SMOOTH_HINT +ALIAS: GL_POLYGON_SMOOTH_HINT gl:GL_POLYGON_SMOOTH_HINT +ALIAS: GL_UNPACK_SWAP_BYTES gl:GL_UNPACK_SWAP_BYTES +ALIAS: GL_UNPACK_LSB_FIRST gl:GL_UNPACK_LSB_FIRST +ALIAS: GL_UNPACK_ROW_LENGTH gl:GL_UNPACK_ROW_LENGTH +ALIAS: GL_UNPACK_SKIP_ROWS gl:GL_UNPACK_SKIP_ROWS +ALIAS: GL_UNPACK_SKIP_PIXELS gl:GL_UNPACK_SKIP_PIXELS +ALIAS: GL_UNPACK_ALIGNMENT gl:GL_UNPACK_ALIGNMENT +ALIAS: GL_PACK_SWAP_BYTES gl:GL_PACK_SWAP_BYTES +ALIAS: GL_PACK_LSB_FIRST gl:GL_PACK_LSB_FIRST +ALIAS: GL_PACK_ROW_LENGTH gl:GL_PACK_ROW_LENGTH +ALIAS: GL_PACK_SKIP_ROWS gl:GL_PACK_SKIP_ROWS +ALIAS: GL_PACK_SKIP_PIXELS gl:GL_PACK_SKIP_PIXELS +ALIAS: GL_PACK_ALIGNMENT gl:GL_PACK_ALIGNMENT +ALIAS: GL_MAX_TEXTURE_SIZE gl:GL_MAX_TEXTURE_SIZE +ALIAS: GL_MAX_VIEWPORT_DIMS gl:GL_MAX_VIEWPORT_DIMS +ALIAS: GL_SUBPIXEL_BITS gl:GL_SUBPIXEL_BITS +ALIAS: GL_TEXTURE_1D gl:GL_TEXTURE_1D +ALIAS: GL_TEXTURE_2D gl:GL_TEXTURE_2D +ALIAS: GL_POLYGON_OFFSET_UNITS gl:GL_POLYGON_OFFSET_UNITS +ALIAS: GL_POLYGON_OFFSET_POINT gl:GL_POLYGON_OFFSET_POINT +ALIAS: GL_POLYGON_OFFSET_LINE gl:GL_POLYGON_OFFSET_LINE +ALIAS: GL_POLYGON_OFFSET_FILL gl:GL_POLYGON_OFFSET_FILL +ALIAS: GL_POLYGON_OFFSET_FACTOR gl:GL_POLYGON_OFFSET_FACTOR +ALIAS: GL_TEXTURE_BINDING_1D gl:GL_TEXTURE_BINDING_1D +ALIAS: GL_TEXTURE_BINDING_2D gl:GL_TEXTURE_BINDING_2D +ALIAS: GL_TEXTURE_WIDTH gl:GL_TEXTURE_WIDTH +ALIAS: GL_TEXTURE_HEIGHT gl:GL_TEXTURE_HEIGHT +ALIAS: GL_TEXTURE_INTERNAL_FORMAT gl:GL_TEXTURE_INTERNAL_FORMAT +ALIAS: GL_TEXTURE_BORDER_COLOR gl:GL_TEXTURE_BORDER_COLOR +ALIAS: GL_TEXTURE_BORDER gl:GL_TEXTURE_BORDER +ALIAS: GL_TEXTURE_RED_SIZE gl:GL_TEXTURE_RED_SIZE +ALIAS: GL_TEXTURE_GREEN_SIZE gl:GL_TEXTURE_GREEN_SIZE +ALIAS: GL_TEXTURE_BLUE_SIZE gl:GL_TEXTURE_BLUE_SIZE +ALIAS: GL_TEXTURE_ALPHA_SIZE gl:GL_TEXTURE_ALPHA_SIZE +ALIAS: GL_DONT_CARE gl:GL_DONT_CARE +ALIAS: GL_FASTEST gl:GL_FASTEST +ALIAS: GL_NICEST gl:GL_NICEST +ALIAS: GL_BYTE gl:GL_BYTE +ALIAS: GL_UNSIGNED_BYTE gl:GL_UNSIGNED_BYTE +ALIAS: GL_SHORT gl:GL_SHORT +ALIAS: GL_UNSIGNED_SHORT gl:GL_UNSIGNED_SHORT +ALIAS: GL_INT gl:GL_INT +ALIAS: GL_UNSIGNED_INT gl:GL_UNSIGNED_INT +ALIAS: GL_FLOAT gl:GL_FLOAT +ALIAS: GL_DOUBLE gl:GL_DOUBLE +ALIAS: GL_CLEAR gl:GL_CLEAR +ALIAS: GL_AND gl:GL_AND +ALIAS: GL_AND_REVERSE gl:GL_AND_REVERSE +ALIAS: GL_COPY gl:GL_COPY +ALIAS: GL_AND_INVERTED gl:GL_AND_INVERTED +ALIAS: GL_NOOP gl:GL_NOOP +ALIAS: GL_XOR gl:GL_XOR +ALIAS: GL_OR gl:GL_OR +ALIAS: GL_NOR gl:GL_NOR +ALIAS: GL_EQUIV gl:GL_EQUIV +ALIAS: GL_INVERT gl:GL_INVERT +ALIAS: GL_OR_REVERSE gl:GL_OR_REVERSE +ALIAS: GL_COPY_INVERTED gl:GL_COPY_INVERTED +ALIAS: GL_OR_INVERTED gl:GL_OR_INVERTED +ALIAS: GL_NAND gl:GL_NAND +ALIAS: GL_SET gl:GL_SET +ALIAS: GL_TEXTURE gl:GL_TEXTURE +ALIAS: GL_COLOR gl:GL_COLOR +ALIAS: GL_DEPTH gl:GL_DEPTH +ALIAS: GL_STENCIL gl:GL_STENCIL +ALIAS: GL_STENCIL_INDEX gl:GL_STENCIL_INDEX +ALIAS: GL_DEPTH_COMPONENT gl:GL_DEPTH_COMPONENT +ALIAS: GL_RED gl:GL_RED +ALIAS: GL_GREEN gl:GL_GREEN +ALIAS: GL_BLUE gl:GL_BLUE +ALIAS: GL_ALPHA gl:GL_ALPHA +ALIAS: GL_RGB gl:GL_RGB +ALIAS: GL_RGBA gl:GL_RGBA +ALIAS: GL_POINT gl:GL_POINT +ALIAS: GL_LINE gl:GL_LINE +ALIAS: GL_FILL gl:GL_FILL +ALIAS: GL_KEEP gl:GL_KEEP +ALIAS: GL_REPLACE gl:GL_REPLACE +ALIAS: GL_INCR gl:GL_INCR +ALIAS: GL_DECR gl:GL_DECR +ALIAS: GL_VENDOR gl:GL_VENDOR +ALIAS: GL_RENDERER gl:GL_RENDERER +ALIAS: GL_VERSION gl:GL_VERSION +ALIAS: GL_EXTENSIONS gl:GL_EXTENSIONS +ALIAS: GL_NEAREST gl:GL_NEAREST +ALIAS: GL_LINEAR gl:GL_LINEAR +ALIAS: GL_NEAREST_MIPMAP_NEAREST gl:GL_NEAREST_MIPMAP_NEAREST +ALIAS: GL_LINEAR_MIPMAP_NEAREST gl:GL_LINEAR_MIPMAP_NEAREST +ALIAS: GL_NEAREST_MIPMAP_LINEAR gl:GL_NEAREST_MIPMAP_LINEAR +ALIAS: GL_LINEAR_MIPMAP_LINEAR gl:GL_LINEAR_MIPMAP_LINEAR +ALIAS: GL_TEXTURE_MAG_FILTER gl:GL_TEXTURE_MAG_FILTER +ALIAS: GL_TEXTURE_MIN_FILTER gl:GL_TEXTURE_MIN_FILTER +ALIAS: GL_TEXTURE_WRAP_S gl:GL_TEXTURE_WRAP_S +ALIAS: GL_TEXTURE_WRAP_T gl:GL_TEXTURE_WRAP_T +ALIAS: GL_PROXY_TEXTURE_1D gl:GL_PROXY_TEXTURE_1D +ALIAS: GL_PROXY_TEXTURE_2D gl:GL_PROXY_TEXTURE_2D +ALIAS: GL_REPEAT gl:GL_REPEAT +ALIAS: GL_R3_G3_B2 gl:GL_R3_G3_B2 +ALIAS: GL_RGB4 gl:GL_RGB4 +ALIAS: GL_RGB5 gl:GL_RGB5 +ALIAS: GL_RGB8 gl:GL_RGB8 +ALIAS: GL_RGB10 gl:GL_RGB10 +ALIAS: GL_RGB12 gl:GL_RGB12 +ALIAS: GL_RGB16 gl:GL_RGB16 +ALIAS: GL_RGBA2 gl:GL_RGBA2 +ALIAS: GL_RGBA4 gl:GL_RGBA4 +ALIAS: GL_RGB5_A1 gl:GL_RGB5_A1 +ALIAS: GL_RGBA8 gl:GL_RGBA8 +ALIAS: GL_RGB10_A2 gl:GL_RGB10_A2 +ALIAS: GL_RGBA12 gl:GL_RGBA12 +ALIAS: GL_RGBA16 gl:GL_RGBA16 +ALIAS: GL_UNSIGNED_BYTE_3_3_2 gl:GL_UNSIGNED_BYTE_3_3_2 +ALIAS: GL_UNSIGNED_SHORT_4_4_4_4 gl:GL_UNSIGNED_SHORT_4_4_4_4 +ALIAS: GL_UNSIGNED_SHORT_5_5_5_1 gl:GL_UNSIGNED_SHORT_5_5_5_1 +ALIAS: GL_UNSIGNED_INT_8_8_8_8 gl:GL_UNSIGNED_INT_8_8_8_8 +ALIAS: GL_UNSIGNED_INT_10_10_10_2 gl:GL_UNSIGNED_INT_10_10_10_2 +ALIAS: GL_TEXTURE_BINDING_3D gl:GL_TEXTURE_BINDING_3D +ALIAS: GL_PACK_SKIP_IMAGES gl:GL_PACK_SKIP_IMAGES +ALIAS: GL_PACK_IMAGE_HEIGHT gl:GL_PACK_IMAGE_HEIGHT +ALIAS: GL_UNPACK_SKIP_IMAGES gl:GL_UNPACK_SKIP_IMAGES +ALIAS: GL_UNPACK_IMAGE_HEIGHT gl:GL_UNPACK_IMAGE_HEIGHT +ALIAS: GL_TEXTURE_3D gl:GL_TEXTURE_3D +ALIAS: GL_PROXY_TEXTURE_3D gl:GL_PROXY_TEXTURE_3D +ALIAS: GL_TEXTURE_DEPTH gl:GL_TEXTURE_DEPTH +ALIAS: GL_TEXTURE_WRAP_R gl:GL_TEXTURE_WRAP_R +ALIAS: GL_MAX_3D_TEXTURE_SIZE gl:GL_MAX_3D_TEXTURE_SIZE +ALIAS: GL_UNSIGNED_BYTE_2_3_3_REV gl:GL_UNSIGNED_BYTE_2_3_3_REV +ALIAS: GL_UNSIGNED_SHORT_5_6_5 gl:GL_UNSIGNED_SHORT_5_6_5 +ALIAS: GL_UNSIGNED_SHORT_5_6_5_REV gl:GL_UNSIGNED_SHORT_5_6_5_REV +ALIAS: GL_UNSIGNED_SHORT_4_4_4_4_REV gl:GL_UNSIGNED_SHORT_4_4_4_4_REV +ALIAS: GL_UNSIGNED_SHORT_1_5_5_5_REV gl:GL_UNSIGNED_SHORT_1_5_5_5_REV +ALIAS: GL_UNSIGNED_INT_8_8_8_8_REV gl:GL_UNSIGNED_INT_8_8_8_8_REV +ALIAS: GL_UNSIGNED_INT_2_10_10_10_REV gl:GL_UNSIGNED_INT_2_10_10_10_REV +ALIAS: GL_BGR gl:GL_BGR +ALIAS: GL_BGRA gl:GL_BGRA +ALIAS: GL_MAX_ELEMENTS_VERTICES gl:GL_MAX_ELEMENTS_VERTICES +ALIAS: GL_MAX_ELEMENTS_INDICES gl:GL_MAX_ELEMENTS_INDICES +ALIAS: GL_CLAMP_TO_EDGE gl:GL_CLAMP_TO_EDGE +ALIAS: GL_TEXTURE_MIN_LOD gl:GL_TEXTURE_MIN_LOD +ALIAS: GL_TEXTURE_MAX_LOD gl:GL_TEXTURE_MAX_LOD +ALIAS: GL_TEXTURE_BASE_LEVEL gl:GL_TEXTURE_BASE_LEVEL +ALIAS: GL_TEXTURE_MAX_LEVEL gl:GL_TEXTURE_MAX_LEVEL +ALIAS: GL_SMOOTH_POINT_SIZE_RANGE gl:GL_SMOOTH_POINT_SIZE_RANGE +ALIAS: GL_SMOOTH_POINT_SIZE_GRANULARITY gl:GL_SMOOTH_POINT_SIZE_GRANULARITY +ALIAS: GL_SMOOTH_LINE_WIDTH_RANGE gl:GL_SMOOTH_LINE_WIDTH_RANGE +ALIAS: GL_SMOOTH_LINE_WIDTH_GRANULARITY gl:GL_SMOOTH_LINE_WIDTH_GRANULARITY +ALIAS: GL_ALIASED_LINE_WIDTH_RANGE gl:GL_ALIASED_LINE_WIDTH_RANGE +ALIAS: GL_CONSTANT_COLOR gl:GL_CONSTANT_COLOR +ALIAS: GL_ONE_MINUS_CONSTANT_COLOR gl:GL_ONE_MINUS_CONSTANT_COLOR +ALIAS: GL_CONSTANT_ALPHA gl:GL_CONSTANT_ALPHA +ALIAS: GL_ONE_MINUS_CONSTANT_ALPHA gl:GL_ONE_MINUS_CONSTANT_ALPHA +ALIAS: GL_BLEND_COLOR gl:GL_BLEND_COLOR +ALIAS: GL_FUNC_ADD gl:GL_FUNC_ADD +ALIAS: GL_MIN gl:GL_MIN +ALIAS: GL_MAX gl:GL_MAX +ALIAS: GL_BLEND_EQUATION gl:GL_BLEND_EQUATION +ALIAS: GL_FUNC_SUBTRACT gl:GL_FUNC_SUBTRACT +ALIAS: GL_FUNC_REVERSE_SUBTRACT gl:GL_FUNC_REVERSE_SUBTRACT +ALIAS: GL_TEXTURE0 gl:GL_TEXTURE0 +ALIAS: GL_TEXTURE1 gl:GL_TEXTURE1 +ALIAS: GL_TEXTURE2 gl:GL_TEXTURE2 +ALIAS: GL_TEXTURE3 gl:GL_TEXTURE3 +ALIAS: GL_TEXTURE4 gl:GL_TEXTURE4 +ALIAS: GL_TEXTURE5 gl:GL_TEXTURE5 +ALIAS: GL_TEXTURE6 gl:GL_TEXTURE6 +ALIAS: GL_TEXTURE7 gl:GL_TEXTURE7 +ALIAS: GL_TEXTURE8 gl:GL_TEXTURE8 +ALIAS: GL_TEXTURE9 gl:GL_TEXTURE9 +ALIAS: GL_TEXTURE10 gl:GL_TEXTURE10 +ALIAS: GL_TEXTURE11 gl:GL_TEXTURE11 +ALIAS: GL_TEXTURE12 gl:GL_TEXTURE12 +ALIAS: GL_TEXTURE13 gl:GL_TEXTURE13 +ALIAS: GL_TEXTURE14 gl:GL_TEXTURE14 +ALIAS: GL_TEXTURE15 gl:GL_TEXTURE15 +ALIAS: GL_TEXTURE16 gl:GL_TEXTURE16 +ALIAS: GL_TEXTURE17 gl:GL_TEXTURE17 +ALIAS: GL_TEXTURE18 gl:GL_TEXTURE18 +ALIAS: GL_TEXTURE19 gl:GL_TEXTURE19 +ALIAS: GL_TEXTURE20 gl:GL_TEXTURE20 +ALIAS: GL_TEXTURE21 gl:GL_TEXTURE21 +ALIAS: GL_TEXTURE22 gl:GL_TEXTURE22 +ALIAS: GL_TEXTURE23 gl:GL_TEXTURE23 +ALIAS: GL_TEXTURE24 gl:GL_TEXTURE24 +ALIAS: GL_TEXTURE25 gl:GL_TEXTURE25 +ALIAS: GL_TEXTURE26 gl:GL_TEXTURE26 +ALIAS: GL_TEXTURE27 gl:GL_TEXTURE27 +ALIAS: GL_TEXTURE28 gl:GL_TEXTURE28 +ALIAS: GL_TEXTURE29 gl:GL_TEXTURE29 +ALIAS: GL_TEXTURE30 gl:GL_TEXTURE30 +ALIAS: GL_TEXTURE31 gl:GL_TEXTURE31 +ALIAS: GL_ACTIVE_TEXTURE gl:GL_ACTIVE_TEXTURE +ALIAS: GL_MULTISAMPLE gl:GL_MULTISAMPLE +ALIAS: GL_SAMPLE_ALPHA_TO_COVERAGE gl:GL_SAMPLE_ALPHA_TO_COVERAGE +ALIAS: GL_SAMPLE_ALPHA_TO_ONE gl:GL_SAMPLE_ALPHA_TO_ONE +ALIAS: GL_SAMPLE_COVERAGE gl:GL_SAMPLE_COVERAGE +ALIAS: GL_SAMPLE_BUFFERS gl:GL_SAMPLE_BUFFERS +ALIAS: GL_SAMPLES gl:GL_SAMPLES +ALIAS: GL_SAMPLE_COVERAGE_VALUE gl:GL_SAMPLE_COVERAGE_VALUE +ALIAS: GL_SAMPLE_COVERAGE_INVERT gl:GL_SAMPLE_COVERAGE_INVERT +ALIAS: GL_TEXTURE_CUBE_MAP gl:GL_TEXTURE_CUBE_MAP +ALIAS: GL_TEXTURE_BINDING_CUBE_MAP gl:GL_TEXTURE_BINDING_CUBE_MAP +ALIAS: GL_TEXTURE_CUBE_MAP_POSITIVE_X gl:GL_TEXTURE_CUBE_MAP_POSITIVE_X +ALIAS: GL_TEXTURE_CUBE_MAP_NEGATIVE_X gl:GL_TEXTURE_CUBE_MAP_NEGATIVE_X +ALIAS: GL_TEXTURE_CUBE_MAP_POSITIVE_Y gl:GL_TEXTURE_CUBE_MAP_POSITIVE_Y +ALIAS: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y gl:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y +ALIAS: GL_TEXTURE_CUBE_MAP_POSITIVE_Z gl:GL_TEXTURE_CUBE_MAP_POSITIVE_Z +ALIAS: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z gl:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +ALIAS: GL_PROXY_TEXTURE_CUBE_MAP gl:GL_PROXY_TEXTURE_CUBE_MAP +ALIAS: GL_MAX_CUBE_MAP_TEXTURE_SIZE gl:GL_MAX_CUBE_MAP_TEXTURE_SIZE +ALIAS: GL_COMPRESSED_RGB gl:GL_COMPRESSED_RGB +ALIAS: GL_COMPRESSED_RGBA gl:GL_COMPRESSED_RGBA +ALIAS: GL_TEXTURE_COMPRESSION_HINT gl:GL_TEXTURE_COMPRESSION_HINT +ALIAS: GL_TEXTURE_COMPRESSED_IMAGE_SIZE gl:GL_TEXTURE_COMPRESSED_IMAGE_SIZE +ALIAS: GL_TEXTURE_COMPRESSED gl:GL_TEXTURE_COMPRESSED +ALIAS: GL_NUM_COMPRESSED_TEXTURE_FORMATS gl:GL_NUM_COMPRESSED_TEXTURE_FORMATS +ALIAS: GL_COMPRESSED_TEXTURE_FORMATS gl:GL_COMPRESSED_TEXTURE_FORMATS +ALIAS: GL_CLAMP_TO_BORDER gl:GL_CLAMP_TO_BORDER +ALIAS: GL_BLEND_DST_RGB gl:GL_BLEND_DST_RGB +ALIAS: GL_BLEND_SRC_RGB gl:GL_BLEND_SRC_RGB +ALIAS: GL_BLEND_DST_ALPHA gl:GL_BLEND_DST_ALPHA +ALIAS: GL_BLEND_SRC_ALPHA gl:GL_BLEND_SRC_ALPHA +ALIAS: GL_POINT_FADE_THRESHOLD_SIZE gl:GL_POINT_FADE_THRESHOLD_SIZE +ALIAS: GL_DEPTH_COMPONENT16 gl:GL_DEPTH_COMPONENT16 +ALIAS: GL_DEPTH_COMPONENT24 gl:GL_DEPTH_COMPONENT24 +ALIAS: GL_DEPTH_COMPONENT32 gl:GL_DEPTH_COMPONENT32 +ALIAS: GL_MIRRORED_REPEAT gl:GL_MIRRORED_REPEAT +ALIAS: GL_MAX_TEXTURE_LOD_BIAS gl:GL_MAX_TEXTURE_LOD_BIAS +ALIAS: GL_TEXTURE_LOD_BIAS gl:GL_TEXTURE_LOD_BIAS +ALIAS: GL_INCR_WRAP gl:GL_INCR_WRAP +ALIAS: GL_DECR_WRAP gl:GL_DECR_WRAP +ALIAS: GL_TEXTURE_DEPTH_SIZE gl:GL_TEXTURE_DEPTH_SIZE +ALIAS: GL_TEXTURE_COMPARE_MODE gl:GL_TEXTURE_COMPARE_MODE +ALIAS: GL_TEXTURE_COMPARE_FUNC gl:GL_TEXTURE_COMPARE_FUNC +ALIAS: GL_BUFFER_SIZE gl:GL_BUFFER_SIZE +ALIAS: GL_BUFFER_USAGE gl:GL_BUFFER_USAGE +ALIAS: GL_QUERY_COUNTER_BITS gl:GL_QUERY_COUNTER_BITS +ALIAS: GL_CURRENT_QUERY gl:GL_CURRENT_QUERY +ALIAS: GL_QUERY_RESULT gl:GL_QUERY_RESULT +ALIAS: GL_QUERY_RESULT_AVAILABLE gl:GL_QUERY_RESULT_AVAILABLE +ALIAS: GL_ARRAY_BUFFER gl:GL_ARRAY_BUFFER +ALIAS: GL_ELEMENT_ARRAY_BUFFER gl:GL_ELEMENT_ARRAY_BUFFER +ALIAS: GL_ARRAY_BUFFER_BINDING gl:GL_ARRAY_BUFFER_BINDING +ALIAS: GL_ELEMENT_ARRAY_BUFFER_BINDING gl:GL_ELEMENT_ARRAY_BUFFER_BINDING +ALIAS: GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING gl:GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING +ALIAS: GL_READ_ONLY gl:GL_READ_ONLY +ALIAS: GL_WRITE_ONLY gl:GL_WRITE_ONLY +ALIAS: GL_READ_WRITE gl:GL_READ_WRITE +ALIAS: GL_BUFFER_ACCESS gl:GL_BUFFER_ACCESS +ALIAS: GL_BUFFER_MAPPED gl:GL_BUFFER_MAPPED +ALIAS: GL_BUFFER_MAP_POINTER gl:GL_BUFFER_MAP_POINTER +ALIAS: GL_STREAM_DRAW gl:GL_STREAM_DRAW +ALIAS: GL_STREAM_READ gl:GL_STREAM_READ +ALIAS: GL_STREAM_COPY gl:GL_STREAM_COPY +ALIAS: GL_STATIC_DRAW gl:GL_STATIC_DRAW +ALIAS: GL_STATIC_READ gl:GL_STATIC_READ +ALIAS: GL_STATIC_COPY gl:GL_STATIC_COPY +ALIAS: GL_DYNAMIC_DRAW gl:GL_DYNAMIC_DRAW +ALIAS: GL_DYNAMIC_READ gl:GL_DYNAMIC_READ +ALIAS: GL_DYNAMIC_COPY gl:GL_DYNAMIC_COPY +ALIAS: GL_SAMPLES_PASSED gl:GL_SAMPLES_PASSED +ALIAS: GL_BLEND_EQUATION_RGB gl:GL_BLEND_EQUATION_RGB +ALIAS: GL_VERTEX_ATTRIB_ARRAY_ENABLED gl:GL_VERTEX_ATTRIB_ARRAY_ENABLED +ALIAS: GL_VERTEX_ATTRIB_ARRAY_SIZE gl:GL_VERTEX_ATTRIB_ARRAY_SIZE +ALIAS: GL_VERTEX_ATTRIB_ARRAY_STRIDE gl:GL_VERTEX_ATTRIB_ARRAY_STRIDE +ALIAS: GL_VERTEX_ATTRIB_ARRAY_TYPE gl:GL_VERTEX_ATTRIB_ARRAY_TYPE +ALIAS: GL_CURRENT_VERTEX_ATTRIB gl:GL_CURRENT_VERTEX_ATTRIB +ALIAS: GL_VERTEX_PROGRAM_POINT_SIZE gl:GL_VERTEX_PROGRAM_POINT_SIZE +ALIAS: GL_VERTEX_ATTRIB_ARRAY_POINTER gl:GL_VERTEX_ATTRIB_ARRAY_POINTER +ALIAS: GL_STENCIL_BACK_FUNC gl:GL_STENCIL_BACK_FUNC +ALIAS: GL_STENCIL_BACK_FAIL gl:GL_STENCIL_BACK_FAIL +ALIAS: GL_STENCIL_BACK_PASS_DEPTH_FAIL gl:GL_STENCIL_BACK_PASS_DEPTH_FAIL +ALIAS: GL_STENCIL_BACK_PASS_DEPTH_PASS gl:GL_STENCIL_BACK_PASS_DEPTH_PASS +ALIAS: GL_MAX_DRAW_BUFFERS gl:GL_MAX_DRAW_BUFFERS +ALIAS: GL_DRAW_BUFFER0 gl:GL_DRAW_BUFFER0 +ALIAS: GL_DRAW_BUFFER1 gl:GL_DRAW_BUFFER1 +ALIAS: GL_DRAW_BUFFER2 gl:GL_DRAW_BUFFER2 +ALIAS: GL_DRAW_BUFFER3 gl:GL_DRAW_BUFFER3 +ALIAS: GL_DRAW_BUFFER4 gl:GL_DRAW_BUFFER4 +ALIAS: GL_DRAW_BUFFER5 gl:GL_DRAW_BUFFER5 +ALIAS: GL_DRAW_BUFFER6 gl:GL_DRAW_BUFFER6 +ALIAS: GL_DRAW_BUFFER7 gl:GL_DRAW_BUFFER7 +ALIAS: GL_DRAW_BUFFER8 gl:GL_DRAW_BUFFER8 +ALIAS: GL_DRAW_BUFFER9 gl:GL_DRAW_BUFFER9 +ALIAS: GL_DRAW_BUFFER10 gl:GL_DRAW_BUFFER10 +ALIAS: GL_DRAW_BUFFER11 gl:GL_DRAW_BUFFER11 +ALIAS: GL_DRAW_BUFFER12 gl:GL_DRAW_BUFFER12 +ALIAS: GL_DRAW_BUFFER13 gl:GL_DRAW_BUFFER13 +ALIAS: GL_DRAW_BUFFER14 gl:GL_DRAW_BUFFER14 +ALIAS: GL_DRAW_BUFFER15 gl:GL_DRAW_BUFFER15 +ALIAS: GL_BLEND_EQUATION_ALPHA gl:GL_BLEND_EQUATION_ALPHA +ALIAS: GL_MAX_VERTEX_ATTRIBS gl:GL_MAX_VERTEX_ATTRIBS +ALIAS: GL_VERTEX_ATTRIB_ARRAY_NORMALIZED gl:GL_VERTEX_ATTRIB_ARRAY_NORMALIZED +ALIAS: GL_MAX_TEXTURE_IMAGE_UNITS gl:GL_MAX_TEXTURE_IMAGE_UNITS +ALIAS: GL_FRAGMENT_SHADER gl:GL_FRAGMENT_SHADER +ALIAS: GL_VERTEX_SHADER gl:GL_VERTEX_SHADER +ALIAS: GL_MAX_FRAGMENT_UNIFORM_COMPONENTS gl:GL_MAX_FRAGMENT_UNIFORM_COMPONENTS +ALIAS: GL_MAX_VERTEX_UNIFORM_COMPONENTS gl:GL_MAX_VERTEX_UNIFORM_COMPONENTS +ALIAS: GL_MAX_VARYING_FLOATS gl:GL_MAX_VARYING_FLOATS +ALIAS: GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS gl:GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS +ALIAS: GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS gl:GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS +ALIAS: GL_SHADER_TYPE gl:GL_SHADER_TYPE +ALIAS: GL_FLOAT_VEC2 gl:GL_FLOAT_VEC2 +ALIAS: GL_FLOAT_VEC3 gl:GL_FLOAT_VEC3 +ALIAS: GL_FLOAT_VEC4 gl:GL_FLOAT_VEC4 +ALIAS: GL_INT_VEC2 gl:GL_INT_VEC2 +ALIAS: GL_INT_VEC3 gl:GL_INT_VEC3 +ALIAS: GL_INT_VEC4 gl:GL_INT_VEC4 +ALIAS: GL_BOOL gl:GL_BOOL +ALIAS: GL_BOOL_VEC2 gl:GL_BOOL_VEC2 +ALIAS: GL_BOOL_VEC3 gl:GL_BOOL_VEC3 +ALIAS: GL_BOOL_VEC4 gl:GL_BOOL_VEC4 +ALIAS: GL_FLOAT_MAT2 gl:GL_FLOAT_MAT2 +ALIAS: GL_FLOAT_MAT3 gl:GL_FLOAT_MAT3 +ALIAS: GL_FLOAT_MAT4 gl:GL_FLOAT_MAT4 +ALIAS: GL_SAMPLER_1D gl:GL_SAMPLER_1D +ALIAS: GL_SAMPLER_2D gl:GL_SAMPLER_2D +ALIAS: GL_SAMPLER_3D gl:GL_SAMPLER_3D +ALIAS: GL_SAMPLER_CUBE gl:GL_SAMPLER_CUBE +ALIAS: GL_SAMPLER_1D_SHADOW gl:GL_SAMPLER_1D_SHADOW +ALIAS: GL_SAMPLER_2D_SHADOW gl:GL_SAMPLER_2D_SHADOW +ALIAS: GL_DELETE_STATUS gl:GL_DELETE_STATUS +ALIAS: GL_COMPILE_STATUS gl:GL_COMPILE_STATUS +ALIAS: GL_LINK_STATUS gl:GL_LINK_STATUS +ALIAS: GL_VALIDATE_STATUS gl:GL_VALIDATE_STATUS +ALIAS: GL_INFO_LOG_LENGTH gl:GL_INFO_LOG_LENGTH +ALIAS: GL_ATTACHED_SHADERS gl:GL_ATTACHED_SHADERS +ALIAS: GL_ACTIVE_UNIFORMS gl:GL_ACTIVE_UNIFORMS +ALIAS: GL_ACTIVE_UNIFORM_MAX_LENGTH gl:GL_ACTIVE_UNIFORM_MAX_LENGTH +ALIAS: GL_SHADER_SOURCE_LENGTH gl:GL_SHADER_SOURCE_LENGTH +ALIAS: GL_ACTIVE_ATTRIBUTES gl:GL_ACTIVE_ATTRIBUTES +ALIAS: GL_ACTIVE_ATTRIBUTE_MAX_LENGTH gl:GL_ACTIVE_ATTRIBUTE_MAX_LENGTH +ALIAS: GL_FRAGMENT_SHADER_DERIVATIVE_HINT gl:GL_FRAGMENT_SHADER_DERIVATIVE_HINT +ALIAS: GL_SHADING_LANGUAGE_VERSION gl:GL_SHADING_LANGUAGE_VERSION +ALIAS: GL_CURRENT_PROGRAM gl:GL_CURRENT_PROGRAM +ALIAS: GL_POINT_SPRITE_COORD_ORIGIN gl:GL_POINT_SPRITE_COORD_ORIGIN +ALIAS: GL_LOWER_LEFT gl:GL_LOWER_LEFT +ALIAS: GL_UPPER_LEFT gl:GL_UPPER_LEFT +ALIAS: GL_STENCIL_BACK_REF gl:GL_STENCIL_BACK_REF +ALIAS: GL_STENCIL_BACK_VALUE_MASK gl:GL_STENCIL_BACK_VALUE_MASK +ALIAS: GL_STENCIL_BACK_WRITEMASK gl:GL_STENCIL_BACK_WRITEMASK +ALIAS: GL_PIXEL_PACK_BUFFER gl:GL_PIXEL_PACK_BUFFER +ALIAS: GL_PIXEL_UNPACK_BUFFER gl:GL_PIXEL_UNPACK_BUFFER +ALIAS: GL_PIXEL_PACK_BUFFER_BINDING gl:GL_PIXEL_PACK_BUFFER_BINDING +ALIAS: GL_PIXEL_UNPACK_BUFFER_BINDING gl:GL_PIXEL_UNPACK_BUFFER_BINDING +ALIAS: GL_FLOAT_MAT2x3 gl:GL_FLOAT_MAT2x3 +ALIAS: GL_FLOAT_MAT2x4 gl:GL_FLOAT_MAT2x4 +ALIAS: GL_FLOAT_MAT3x2 gl:GL_FLOAT_MAT3x2 +ALIAS: GL_FLOAT_MAT3x4 gl:GL_FLOAT_MAT3x4 +ALIAS: GL_FLOAT_MAT4x2 gl:GL_FLOAT_MAT4x2 +ALIAS: GL_FLOAT_MAT4x3 gl:GL_FLOAT_MAT4x3 +ALIAS: GL_SRGB gl:GL_SRGB +ALIAS: GL_SRGB8 gl:GL_SRGB8 +ALIAS: GL_SRGB_ALPHA gl:GL_SRGB_ALPHA +ALIAS: GL_SRGB8_ALPHA8 gl:GL_SRGB8_ALPHA8 +ALIAS: GL_COMPRESSED_SRGB gl:GL_COMPRESSED_SRGB +ALIAS: GL_COMPRESSED_SRGB_ALPHA gl:GL_COMPRESSED_SRGB_ALPHA +ALIAS: GL_COMPARE_REF_TO_TEXTURE gl:GL_COMPARE_REF_TO_TEXTURE +ALIAS: GL_CLIP_DISTANCE0 gl:GL_CLIP_DISTANCE0 +ALIAS: GL_CLIP_DISTANCE1 gl:GL_CLIP_DISTANCE1 +ALIAS: GL_CLIP_DISTANCE2 gl:GL_CLIP_DISTANCE2 +ALIAS: GL_CLIP_DISTANCE3 gl:GL_CLIP_DISTANCE3 +ALIAS: GL_CLIP_DISTANCE4 gl:GL_CLIP_DISTANCE4 +ALIAS: GL_CLIP_DISTANCE5 gl:GL_CLIP_DISTANCE5 +ALIAS: GL_MAX_CLIP_DISTANCES gl:GL_MAX_CLIP_DISTANCES +ALIAS: GL_MAJOR_VERSION gl:GL_MAJOR_VERSION +ALIAS: GL_MINOR_VERSION gl:GL_MINOR_VERSION +ALIAS: GL_NUM_EXTENSIONS gl:GL_NUM_EXTENSIONS +ALIAS: GL_CONTEXT_FLAGS gl:GL_CONTEXT_FLAGS +ALIAS: GL_DEPTH_BUFFER gl:GL_DEPTH_BUFFER +ALIAS: GL_STENCIL_BUFFER gl:GL_STENCIL_BUFFER +ALIAS: GL_COMPRESSED_RED gl:GL_COMPRESSED_RED +ALIAS: GL_COMPRESSED_RG gl:GL_COMPRESSED_RG +ALIAS: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT gl:GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT +ALIAS: GL_RGBA32F gl:GL_RGBA32F +ALIAS: GL_RGB32F gl:GL_RGB32F +ALIAS: GL_RGBA16F gl:GL_RGBA16F +ALIAS: GL_RGB16F gl:GL_RGB16F +ALIAS: GL_VERTEX_ATTRIB_ARRAY_INTEGER gl:GL_VERTEX_ATTRIB_ARRAY_INTEGER +ALIAS: GL_MAX_ARRAY_TEXTURE_LAYERS gl:GL_MAX_ARRAY_TEXTURE_LAYERS +ALIAS: GL_MIN_PROGRAM_TEXEL_OFFSET gl:GL_MIN_PROGRAM_TEXEL_OFFSET +ALIAS: GL_MAX_PROGRAM_TEXEL_OFFSET gl:GL_MAX_PROGRAM_TEXEL_OFFSET +ALIAS: GL_CLAMP_READ_COLOR gl:GL_CLAMP_READ_COLOR +ALIAS: GL_FIXED_ONLY gl:GL_FIXED_ONLY +ALIAS: GL_MAX_VARYING_COMPONENTS gl:GL_MAX_VARYING_COMPONENTS +ALIAS: GL_TEXTURE_1D_ARRAY gl:GL_TEXTURE_1D_ARRAY +ALIAS: GL_PROXY_TEXTURE_1D_ARRAY gl:GL_PROXY_TEXTURE_1D_ARRAY +ALIAS: GL_TEXTURE_2D_ARRAY gl:GL_TEXTURE_2D_ARRAY +ALIAS: GL_PROXY_TEXTURE_2D_ARRAY gl:GL_PROXY_TEXTURE_2D_ARRAY +ALIAS: GL_TEXTURE_BINDING_1D_ARRAY gl:GL_TEXTURE_BINDING_1D_ARRAY +ALIAS: GL_TEXTURE_BINDING_2D_ARRAY gl:GL_TEXTURE_BINDING_2D_ARRAY +ALIAS: GL_R11F_G11F_B10F gl:GL_R11F_G11F_B10F +ALIAS: GL_UNSIGNED_INT_10F_11F_11F_REV gl:GL_UNSIGNED_INT_10F_11F_11F_REV +ALIAS: GL_RGB9_E5 gl:GL_RGB9_E5 +ALIAS: GL_UNSIGNED_INT_5_9_9_9_REV gl:GL_UNSIGNED_INT_5_9_9_9_REV +ALIAS: GL_TEXTURE_SHARED_SIZE gl:GL_TEXTURE_SHARED_SIZE +ALIAS: GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH gl:GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH +ALIAS: GL_TRANSFORM_FEEDBACK_BUFFER_MODE gl:GL_TRANSFORM_FEEDBACK_BUFFER_MODE +ALIAS: GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS gl:GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS +ALIAS: GL_TRANSFORM_FEEDBACK_VARYINGS gl:GL_TRANSFORM_FEEDBACK_VARYINGS +ALIAS: GL_TRANSFORM_FEEDBACK_BUFFER_START gl:GL_TRANSFORM_FEEDBACK_BUFFER_START +ALIAS: GL_TRANSFORM_FEEDBACK_BUFFER_SIZE gl:GL_TRANSFORM_FEEDBACK_BUFFER_SIZE +ALIAS: GL_PRIMITIVES_GENERATED gl:GL_PRIMITIVES_GENERATED +ALIAS: GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN gl:GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN +ALIAS: GL_RASTERIZER_DISCARD gl:GL_RASTERIZER_DISCARD +ALIAS: GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS gl:GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS +ALIAS: GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS gl:GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS +ALIAS: GL_INTERLEAVED_ATTRIBS gl:GL_INTERLEAVED_ATTRIBS +ALIAS: GL_SEPARATE_ATTRIBS gl:GL_SEPARATE_ATTRIBS +ALIAS: GL_TRANSFORM_FEEDBACK_BUFFER gl:GL_TRANSFORM_FEEDBACK_BUFFER +ALIAS: GL_TRANSFORM_FEEDBACK_BUFFER_BINDING gl:GL_TRANSFORM_FEEDBACK_BUFFER_BINDING +ALIAS: GL_RGBA32UI gl:GL_RGBA32UI +ALIAS: GL_RGB32UI gl:GL_RGB32UI +ALIAS: GL_RGBA16UI gl:GL_RGBA16UI +ALIAS: GL_RGB16UI gl:GL_RGB16UI +ALIAS: GL_RGBA8UI gl:GL_RGBA8UI +ALIAS: GL_RGB8UI gl:GL_RGB8UI +ALIAS: GL_RGBA32I gl:GL_RGBA32I +ALIAS: GL_RGB32I gl:GL_RGB32I +ALIAS: GL_RGBA16I gl:GL_RGBA16I +ALIAS: GL_RGB16I gl:GL_RGB16I +ALIAS: GL_RGBA8I gl:GL_RGBA8I +ALIAS: GL_RGB8I gl:GL_RGB8I +ALIAS: GL_RED_INTEGER gl:GL_RED_INTEGER +ALIAS: GL_GREEN_INTEGER gl:GL_GREEN_INTEGER +ALIAS: GL_BLUE_INTEGER gl:GL_BLUE_INTEGER +ALIAS: GL_RGB_INTEGER gl:GL_RGB_INTEGER +ALIAS: GL_RGBA_INTEGER gl:GL_RGBA_INTEGER +ALIAS: GL_BGR_INTEGER gl:GL_BGR_INTEGER +ALIAS: GL_BGRA_INTEGER gl:GL_BGRA_INTEGER +ALIAS: GL_SAMPLER_1D_ARRAY gl:GL_SAMPLER_1D_ARRAY +ALIAS: GL_SAMPLER_2D_ARRAY gl:GL_SAMPLER_2D_ARRAY +ALIAS: GL_SAMPLER_1D_ARRAY_SHADOW gl:GL_SAMPLER_1D_ARRAY_SHADOW +ALIAS: GL_SAMPLER_2D_ARRAY_SHADOW gl:GL_SAMPLER_2D_ARRAY_SHADOW +ALIAS: GL_SAMPLER_CUBE_SHADOW gl:GL_SAMPLER_CUBE_SHADOW +ALIAS: GL_UNSIGNED_INT_VEC2 gl:GL_UNSIGNED_INT_VEC2 +ALIAS: GL_UNSIGNED_INT_VEC3 gl:GL_UNSIGNED_INT_VEC3 +ALIAS: GL_UNSIGNED_INT_VEC4 gl:GL_UNSIGNED_INT_VEC4 +ALIAS: GL_INT_SAMPLER_1D gl:GL_INT_SAMPLER_1D +ALIAS: GL_INT_SAMPLER_2D gl:GL_INT_SAMPLER_2D +ALIAS: GL_INT_SAMPLER_3D gl:GL_INT_SAMPLER_3D +ALIAS: GL_INT_SAMPLER_CUBE gl:GL_INT_SAMPLER_CUBE +ALIAS: GL_INT_SAMPLER_1D_ARRAY gl:GL_INT_SAMPLER_1D_ARRAY +ALIAS: GL_INT_SAMPLER_2D_ARRAY gl:GL_INT_SAMPLER_2D_ARRAY +ALIAS: GL_UNSIGNED_INT_SAMPLER_1D gl:GL_UNSIGNED_INT_SAMPLER_1D +ALIAS: GL_UNSIGNED_INT_SAMPLER_2D gl:GL_UNSIGNED_INT_SAMPLER_2D +ALIAS: GL_UNSIGNED_INT_SAMPLER_3D gl:GL_UNSIGNED_INT_SAMPLER_3D +ALIAS: GL_UNSIGNED_INT_SAMPLER_CUBE gl:GL_UNSIGNED_INT_SAMPLER_CUBE +ALIAS: GL_UNSIGNED_INT_SAMPLER_1D_ARRAY gl:GL_UNSIGNED_INT_SAMPLER_1D_ARRAY +ALIAS: GL_UNSIGNED_INT_SAMPLER_2D_ARRAY gl:GL_UNSIGNED_INT_SAMPLER_2D_ARRAY +ALIAS: GL_QUERY_WAIT gl:GL_QUERY_WAIT +ALIAS: GL_QUERY_NO_WAIT gl:GL_QUERY_NO_WAIT +ALIAS: GL_QUERY_BY_REGION_WAIT gl:GL_QUERY_BY_REGION_WAIT +ALIAS: GL_QUERY_BY_REGION_NO_WAIT gl:GL_QUERY_BY_REGION_NO_WAIT +ALIAS: GL_DEPTH_COMPONENT32F gl:GL_DEPTH_COMPONENT32F +ALIAS: GL_DEPTH32F_STENCIL8 gl:GL_DEPTH32F_STENCIL8 +ALIAS: GL_FLOAT_32_UNSIGNED_INT_24_8_REV gl:GL_FLOAT_32_UNSIGNED_INT_24_8_REV +ALIAS: GL_INVALID_FRAMEBUFFER_OPERATION gl:GL_INVALID_FRAMEBUFFER_OPERATION +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING gl:GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE gl:GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE gl:GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE gl:GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE gl:GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE gl:GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE gl:GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE gl:GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE +ALIAS: GL_FRAMEBUFFER_DEFAULT gl:GL_FRAMEBUFFER_DEFAULT +ALIAS: GL_FRAMEBUFFER_UNDEFINED gl:GL_FRAMEBUFFER_UNDEFINED +ALIAS: GL_DEPTH_STENCIL_ATTACHMENT gl:GL_DEPTH_STENCIL_ATTACHMENT +ALIAS: GL_INDEX gl:GL_INDEX +ALIAS: GL_MAX_RENDERBUFFER_SIZE gl:GL_MAX_RENDERBUFFER_SIZE +ALIAS: GL_DEPTH_STENCIL gl:GL_DEPTH_STENCIL +ALIAS: GL_UNSIGNED_INT_24_8 gl:GL_UNSIGNED_INT_24_8 +ALIAS: GL_DEPTH24_STENCIL8 gl:GL_DEPTH24_STENCIL8 +ALIAS: GL_TEXTURE_STENCIL_SIZE gl:GL_TEXTURE_STENCIL_SIZE +ALIAS: GL_TEXTURE_RED_TYPE gl:GL_TEXTURE_RED_TYPE +ALIAS: GL_TEXTURE_GREEN_TYPE gl:GL_TEXTURE_GREEN_TYPE +ALIAS: GL_TEXTURE_BLUE_TYPE gl:GL_TEXTURE_BLUE_TYPE +ALIAS: GL_TEXTURE_ALPHA_TYPE gl:GL_TEXTURE_ALPHA_TYPE +ALIAS: GL_TEXTURE_DEPTH_TYPE gl:GL_TEXTURE_DEPTH_TYPE +ALIAS: GL_UNSIGNED_NORMALIZED gl:GL_UNSIGNED_NORMALIZED +ALIAS: GL_FRAMEBUFFER_BINDING gl:GL_FRAMEBUFFER_BINDING +ALIAS: GL_DRAW_FRAMEBUFFER_BINDING gl:GL_DRAW_FRAMEBUFFER_BINDING +ALIAS: GL_RENDERBUFFER_BINDING gl:GL_RENDERBUFFER_BINDING +ALIAS: GL_READ_FRAMEBUFFER gl:GL_READ_FRAMEBUFFER +ALIAS: GL_DRAW_FRAMEBUFFER gl:GL_DRAW_FRAMEBUFFER +ALIAS: GL_READ_FRAMEBUFFER_BINDING gl:GL_READ_FRAMEBUFFER_BINDING +ALIAS: GL_RENDERBUFFER_SAMPLES gl:GL_RENDERBUFFER_SAMPLES +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE gl:GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME gl:GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL gl:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE gl:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE +ALIAS: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER gl:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER +ALIAS: GL_FRAMEBUFFER_COMPLETE gl:GL_FRAMEBUFFER_COMPLETE +ALIAS: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT gl:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT +ALIAS: GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT gl:GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT +ALIAS: GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER gl:GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER +ALIAS: GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER gl:GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER +ALIAS: GL_FRAMEBUFFER_UNSUPPORTED gl:GL_FRAMEBUFFER_UNSUPPORTED +ALIAS: GL_MAX_COLOR_ATTACHMENTS gl:GL_MAX_COLOR_ATTACHMENTS +ALIAS: GL_COLOR_ATTACHMENT0 gl:GL_COLOR_ATTACHMENT0 +ALIAS: GL_COLOR_ATTACHMENT1 gl:GL_COLOR_ATTACHMENT1 +ALIAS: GL_COLOR_ATTACHMENT2 gl:GL_COLOR_ATTACHMENT2 +ALIAS: GL_COLOR_ATTACHMENT3 gl:GL_COLOR_ATTACHMENT3 +ALIAS: GL_COLOR_ATTACHMENT4 gl:GL_COLOR_ATTACHMENT4 +ALIAS: GL_COLOR_ATTACHMENT5 gl:GL_COLOR_ATTACHMENT5 +ALIAS: GL_COLOR_ATTACHMENT6 gl:GL_COLOR_ATTACHMENT6 +ALIAS: GL_COLOR_ATTACHMENT7 gl:GL_COLOR_ATTACHMENT7 +ALIAS: GL_COLOR_ATTACHMENT8 gl:GL_COLOR_ATTACHMENT8 +ALIAS: GL_COLOR_ATTACHMENT9 gl:GL_COLOR_ATTACHMENT9 +ALIAS: GL_COLOR_ATTACHMENT10 gl:GL_COLOR_ATTACHMENT10 +ALIAS: GL_COLOR_ATTACHMENT11 gl:GL_COLOR_ATTACHMENT11 +ALIAS: GL_COLOR_ATTACHMENT12 gl:GL_COLOR_ATTACHMENT12 +ALIAS: GL_COLOR_ATTACHMENT13 gl:GL_COLOR_ATTACHMENT13 +ALIAS: GL_COLOR_ATTACHMENT14 gl:GL_COLOR_ATTACHMENT14 +ALIAS: GL_COLOR_ATTACHMENT15 gl:GL_COLOR_ATTACHMENT15 +ALIAS: GL_DEPTH_ATTACHMENT gl:GL_DEPTH_ATTACHMENT +ALIAS: GL_STENCIL_ATTACHMENT gl:GL_STENCIL_ATTACHMENT +ALIAS: GL_FRAMEBUFFER gl:GL_FRAMEBUFFER +ALIAS: GL_RENDERBUFFER gl:GL_RENDERBUFFER +ALIAS: GL_RENDERBUFFER_WIDTH gl:GL_RENDERBUFFER_WIDTH +ALIAS: GL_RENDERBUFFER_HEIGHT gl:GL_RENDERBUFFER_HEIGHT +ALIAS: GL_RENDERBUFFER_INTERNAL_FORMAT gl:GL_RENDERBUFFER_INTERNAL_FORMAT +ALIAS: GL_STENCIL_INDEX1 gl:GL_STENCIL_INDEX1 +ALIAS: GL_STENCIL_INDEX4 gl:GL_STENCIL_INDEX4 +ALIAS: GL_STENCIL_INDEX8 gl:GL_STENCIL_INDEX8 +ALIAS: GL_STENCIL_INDEX16 gl:GL_STENCIL_INDEX16 +ALIAS: GL_RENDERBUFFER_RED_SIZE gl:GL_RENDERBUFFER_RED_SIZE +ALIAS: GL_RENDERBUFFER_GREEN_SIZE gl:GL_RENDERBUFFER_GREEN_SIZE +ALIAS: GL_RENDERBUFFER_BLUE_SIZE gl:GL_RENDERBUFFER_BLUE_SIZE +ALIAS: GL_RENDERBUFFER_ALPHA_SIZE gl:GL_RENDERBUFFER_ALPHA_SIZE +ALIAS: GL_RENDERBUFFER_DEPTH_SIZE gl:GL_RENDERBUFFER_DEPTH_SIZE +ALIAS: GL_RENDERBUFFER_STENCIL_SIZE gl:GL_RENDERBUFFER_STENCIL_SIZE +ALIAS: GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE gl:GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE +ALIAS: GL_MAX_SAMPLES gl:GL_MAX_SAMPLES +ALIAS: GL_FRAMEBUFFER_SRGB gl:GL_FRAMEBUFFER_SRGB +ALIAS: GL_HALF_FLOAT gl:GL_HALF_FLOAT +ALIAS: GL_MAP_READ_BIT gl:GL_MAP_READ_BIT +ALIAS: GL_MAP_WRITE_BIT gl:GL_MAP_WRITE_BIT +ALIAS: GL_MAP_INVALIDATE_RANGE_BIT gl:GL_MAP_INVALIDATE_RANGE_BIT +ALIAS: GL_MAP_INVALIDATE_BUFFER_BIT gl:GL_MAP_INVALIDATE_BUFFER_BIT +ALIAS: GL_MAP_FLUSH_EXPLICIT_BIT gl:GL_MAP_FLUSH_EXPLICIT_BIT +ALIAS: GL_MAP_UNSYNCHRONIZED_BIT gl:GL_MAP_UNSYNCHRONIZED_BIT +ALIAS: GL_COMPRESSED_RED_RGTC1 gl:GL_COMPRESSED_RED_RGTC1 +ALIAS: GL_COMPRESSED_SIGNED_RED_RGTC1 gl:GL_COMPRESSED_SIGNED_RED_RGTC1 +ALIAS: GL_COMPRESSED_RG_RGTC2 gl:GL_COMPRESSED_RG_RGTC2 +ALIAS: GL_COMPRESSED_SIGNED_RG_RGTC2 gl:GL_COMPRESSED_SIGNED_RG_RGTC2 +ALIAS: GL_RG gl:GL_RG +ALIAS: GL_RG_INTEGER gl:GL_RG_INTEGER +ALIAS: GL_R8 gl:GL_R8 +ALIAS: GL_R16 gl:GL_R16 +ALIAS: GL_RG8 gl:GL_RG8 +ALIAS: GL_RG16 gl:GL_RG16 +ALIAS: GL_R16F gl:GL_R16F +ALIAS: GL_R32F gl:GL_R32F +ALIAS: GL_RG16F gl:GL_RG16F +ALIAS: GL_RG32F gl:GL_RG32F +ALIAS: GL_R8I gl:GL_R8I +ALIAS: GL_R8UI gl:GL_R8UI +ALIAS: GL_R16I gl:GL_R16I +ALIAS: GL_R16UI gl:GL_R16UI +ALIAS: GL_R32I gl:GL_R32I +ALIAS: GL_R32UI gl:GL_R32UI +ALIAS: GL_RG8I gl:GL_RG8I +ALIAS: GL_RG8UI gl:GL_RG8UI +ALIAS: GL_RG16I gl:GL_RG16I +ALIAS: GL_RG16UI gl:GL_RG16UI +ALIAS: GL_RG32I gl:GL_RG32I +ALIAS: GL_RG32UI gl:GL_RG32UI +ALIAS: GL_VERTEX_ARRAY_BINDING gl:GL_VERTEX_ARRAY_BINDING +ALIAS: GL_SAMPLER_2D_RECT gl:GL_SAMPLER_2D_RECT +ALIAS: GL_SAMPLER_2D_RECT_SHADOW gl:GL_SAMPLER_2D_RECT_SHADOW +ALIAS: GL_SAMPLER_BUFFER gl:GL_SAMPLER_BUFFER +ALIAS: GL_INT_SAMPLER_2D_RECT gl:GL_INT_SAMPLER_2D_RECT +ALIAS: GL_INT_SAMPLER_BUFFER gl:GL_INT_SAMPLER_BUFFER +ALIAS: GL_UNSIGNED_INT_SAMPLER_2D_RECT gl:GL_UNSIGNED_INT_SAMPLER_2D_RECT +ALIAS: GL_UNSIGNED_INT_SAMPLER_BUFFER gl:GL_UNSIGNED_INT_SAMPLER_BUFFER +ALIAS: GL_TEXTURE_BUFFER gl:GL_TEXTURE_BUFFER +ALIAS: GL_MAX_TEXTURE_BUFFER_SIZE gl:GL_MAX_TEXTURE_BUFFER_SIZE +ALIAS: GL_TEXTURE_BINDING_BUFFER gl:GL_TEXTURE_BINDING_BUFFER +ALIAS: GL_TEXTURE_BUFFER_DATA_STORE_BINDING gl:GL_TEXTURE_BUFFER_DATA_STORE_BINDING +ALIAS: GL_TEXTURE_BUFFER_FORMAT gl:GL_TEXTURE_BUFFER_FORMAT +ALIAS: GL_TEXTURE_RECTANGLE gl:GL_TEXTURE_RECTANGLE +ALIAS: GL_TEXTURE_BINDING_RECTANGLE gl:GL_TEXTURE_BINDING_RECTANGLE +ALIAS: GL_PROXY_TEXTURE_RECTANGLE gl:GL_PROXY_TEXTURE_RECTANGLE +ALIAS: GL_MAX_RECTANGLE_TEXTURE_SIZE gl:GL_MAX_RECTANGLE_TEXTURE_SIZE +ALIAS: GL_RED_SNORM gl:GL_RED_SNORM +ALIAS: GL_RG_SNORM gl:GL_RG_SNORM +ALIAS: GL_RGB_SNORM gl:GL_RGB_SNORM +ALIAS: GL_RGBA_SNORM gl:GL_RGBA_SNORM +ALIAS: GL_R8_SNORM gl:GL_R8_SNORM +ALIAS: GL_RG8_SNORM gl:GL_RG8_SNORM +ALIAS: GL_RGB8_SNORM gl:GL_RGB8_SNORM +ALIAS: GL_RGBA8_SNORM gl:GL_RGBA8_SNORM +ALIAS: GL_R16_SNORM gl:GL_R16_SNORM +ALIAS: GL_RG16_SNORM gl:GL_RG16_SNORM +ALIAS: GL_RGB16_SNORM gl:GL_RGB16_SNORM +ALIAS: GL_RGBA16_SNORM gl:GL_RGBA16_SNORM +ALIAS: GL_SIGNED_NORMALIZED gl:GL_SIGNED_NORMALIZED +ALIAS: GL_PRIMITIVE_RESTART gl:GL_PRIMITIVE_RESTART +ALIAS: GL_PRIMITIVE_RESTART_INDEX gl:GL_PRIMITIVE_RESTART_INDEX +ALIAS: GL_COPY_READ_BUFFER gl:GL_COPY_READ_BUFFER +ALIAS: GL_COPY_WRITE_BUFFER gl:GL_COPY_WRITE_BUFFER +ALIAS: GL_UNIFORM_BUFFER gl:GL_UNIFORM_BUFFER +ALIAS: GL_UNIFORM_BUFFER_BINDING gl:GL_UNIFORM_BUFFER_BINDING +ALIAS: GL_UNIFORM_BUFFER_START gl:GL_UNIFORM_BUFFER_START +ALIAS: GL_UNIFORM_BUFFER_SIZE gl:GL_UNIFORM_BUFFER_SIZE +ALIAS: GL_MAX_VERTEX_UNIFORM_BLOCKS gl:GL_MAX_VERTEX_UNIFORM_BLOCKS +ALIAS: GL_MAX_FRAGMENT_UNIFORM_BLOCKS gl:GL_MAX_FRAGMENT_UNIFORM_BLOCKS +ALIAS: GL_MAX_COMBINED_UNIFORM_BLOCKS gl:GL_MAX_COMBINED_UNIFORM_BLOCKS +ALIAS: GL_MAX_UNIFORM_BUFFER_BINDINGS gl:GL_MAX_UNIFORM_BUFFER_BINDINGS +ALIAS: GL_MAX_UNIFORM_BLOCK_SIZE gl:GL_MAX_UNIFORM_BLOCK_SIZE +ALIAS: GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS gl:GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS +ALIAS: GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS gl:GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS +ALIAS: GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT gl:GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT +ALIAS: GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH gl:GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH +ALIAS: GL_ACTIVE_UNIFORM_BLOCKS gl:GL_ACTIVE_UNIFORM_BLOCKS +ALIAS: GL_UNIFORM_TYPE gl:GL_UNIFORM_TYPE +ALIAS: GL_UNIFORM_SIZE gl:GL_UNIFORM_SIZE +ALIAS: GL_UNIFORM_NAME_LENGTH gl:GL_UNIFORM_NAME_LENGTH +ALIAS: GL_UNIFORM_BLOCK_INDEX gl:GL_UNIFORM_BLOCK_INDEX +ALIAS: GL_UNIFORM_OFFSET gl:GL_UNIFORM_OFFSET +ALIAS: GL_UNIFORM_ARRAY_STRIDE gl:GL_UNIFORM_ARRAY_STRIDE +ALIAS: GL_UNIFORM_MATRIX_STRIDE gl:GL_UNIFORM_MATRIX_STRIDE +ALIAS: GL_UNIFORM_IS_ROW_MAJOR gl:GL_UNIFORM_IS_ROW_MAJOR +ALIAS: GL_UNIFORM_BLOCK_BINDING gl:GL_UNIFORM_BLOCK_BINDING +ALIAS: GL_UNIFORM_BLOCK_DATA_SIZE gl:GL_UNIFORM_BLOCK_DATA_SIZE +ALIAS: GL_UNIFORM_BLOCK_NAME_LENGTH gl:GL_UNIFORM_BLOCK_NAME_LENGTH +ALIAS: GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS gl:GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS +ALIAS: GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES gl:GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES +ALIAS: GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER gl:GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER +ALIAS: GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER gl:GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER +ALIAS: GL_INVALID_INDEX gl:GL_INVALID_INDEX + +ALIAS: glCullFace gl:glCullFace +ALIAS: glFrontFace gl:glFrontFace +ALIAS: glHint gl:glHint +ALIAS: glLineWidth gl:glLineWidth +ALIAS: glPointSize gl:glPointSize +ALIAS: glPolygonMode gl:glPolygonMode +ALIAS: glScissor gl:glScissor +ALIAS: glTexParameterf gl:glTexParameterf +ALIAS: glTexParameterfv gl:glTexParameterfv +ALIAS: glTexParameteri gl:glTexParameteri +ALIAS: glTexParameteriv gl:glTexParameteriv +ALIAS: glTexImage1D gl:glTexImage1D +ALIAS: glTexImage2D gl:glTexImage2D +ALIAS: glDrawBuffer gl:glDrawBuffer +ALIAS: glClear gl:glClear +ALIAS: glClearColor gl:glClearColor +ALIAS: glClearStencil gl:glClearStencil +ALIAS: glClearDepth gl:glClearDepth +ALIAS: glStencilMask gl:glStencilMask +ALIAS: glColorMask gl:glColorMask +ALIAS: glDepthMask gl:glDepthMask +ALIAS: glDisable gl:glDisable +ALIAS: glEnable gl:glEnable +ALIAS: glFinish gl:glFinish +ALIAS: glFlush gl:glFlush +ALIAS: glBlendFunc gl:glBlendFunc +ALIAS: glLogicOp gl:glLogicOp +ALIAS: glStencilFunc gl:glStencilFunc +ALIAS: glStencilOp gl:glStencilOp +ALIAS: glDepthFunc gl:glDepthFunc +ALIAS: glPixelStoref gl:glPixelStoref +ALIAS: glPixelStorei gl:glPixelStorei +ALIAS: glReadBuffer gl:glReadBuffer +ALIAS: glReadPixels gl:glReadPixels +ALIAS: glGetBooleanv gl:glGetBooleanv +ALIAS: glGetDoublev gl:glGetDoublev +ALIAS: glGetError gl:glGetError +ALIAS: glGetFloatv gl:glGetFloatv +ALIAS: glGetIntegerv gl:glGetIntegerv +ALIAS: glGetString gl:glGetString +ALIAS: glGetTexImage gl:glGetTexImage +ALIAS: glGetTexParameterfv gl:glGetTexParameterfv +ALIAS: glGetTexParameteriv gl:glGetTexParameteriv +ALIAS: glGetTexLevelParameterfv gl:glGetTexLevelParameterfv +ALIAS: glGetTexLevelParameteriv gl:glGetTexLevelParameteriv +ALIAS: glIsEnabled gl:glIsEnabled +ALIAS: glDepthRange gl:glDepthRange +ALIAS: glViewport gl:glViewport +ALIAS: glDrawArrays gl:glDrawArrays +ALIAS: glDrawElements gl:glDrawElements +ALIAS: glGetPointerv gl:glGetPointerv +ALIAS: glPolygonOffset gl:glPolygonOffset +ALIAS: glCopyTexImage1D gl:glCopyTexImage1D +ALIAS: glCopyTexImage2D gl:glCopyTexImage2D +ALIAS: glCopyTexSubImage1D gl:glCopyTexSubImage1D +ALIAS: glCopyTexSubImage2D gl:glCopyTexSubImage2D +ALIAS: glTexSubImage1D gl:glTexSubImage1D +ALIAS: glTexSubImage2D gl:glTexSubImage2D +ALIAS: glBindTexture gl:glBindTexture +ALIAS: glDeleteTextures gl:glDeleteTextures +ALIAS: glGenTextures gl:glGenTextures +ALIAS: glIsTexture gl:glIsTexture +ALIAS: glBlendColor gl:glBlendColor +ALIAS: glBlendEquation gl:glBlendEquation +ALIAS: glDrawRangeElements gl:glDrawRangeElements +ALIAS: glTexImage3D gl:glTexImage3D +ALIAS: glTexSubImage3D gl:glTexSubImage3D +ALIAS: glCopyTexSubImage3D gl:glCopyTexSubImage3D +ALIAS: glActiveTexture gl:glActiveTexture +ALIAS: glSampleCoverage gl:glSampleCoverage +ALIAS: glCompressedTexImage3D gl:glCompressedTexImage3D +ALIAS: glCompressedTexImage2D gl:glCompressedTexImage2D +ALIAS: glCompressedTexImage1D gl:glCompressedTexImage1D +ALIAS: glCompressedTexSubImage3D gl:glCompressedTexSubImage3D +ALIAS: glCompressedTexSubImage2D gl:glCompressedTexSubImage2D +ALIAS: glCompressedTexSubImage1D gl:glCompressedTexSubImage1D +ALIAS: glGetCompressedTexImage gl:glGetCompressedTexImage +ALIAS: glBlendFuncSeparate gl:glBlendFuncSeparate +ALIAS: glMultiDrawArrays gl:glMultiDrawArrays +ALIAS: glMultiDrawElements gl:glMultiDrawElements +ALIAS: glPointParameterf gl:glPointParameterf +ALIAS: glPointParameterfv gl:glPointParameterfv +ALIAS: glPointParameteri gl:glPointParameteri +ALIAS: glPointParameteriv gl:glPointParameteriv +ALIAS: glGenQueries gl:glGenQueries +ALIAS: glDeleteQueries gl:glDeleteQueries +ALIAS: glIsQuery gl:glIsQuery +ALIAS: glBeginQuery gl:glBeginQuery +ALIAS: glEndQuery gl:glEndQuery +ALIAS: glGetQueryiv gl:glGetQueryiv +ALIAS: glGetQueryObjectiv gl:glGetQueryObjectiv +ALIAS: glGetQueryObjectuiv gl:glGetQueryObjectuiv +ALIAS: glBindBuffer gl:glBindBuffer +ALIAS: glDeleteBuffers gl:glDeleteBuffers +ALIAS: glGenBuffers gl:glGenBuffers +ALIAS: glIsBuffer gl:glIsBuffer +ALIAS: glBufferData gl:glBufferData +ALIAS: glBufferSubData gl:glBufferSubData +ALIAS: glGetBufferSubData gl:glGetBufferSubData +ALIAS: glMapBuffer gl:glMapBuffer +ALIAS: glUnmapBuffer gl:glUnmapBuffer +ALIAS: glGetBufferParameteriv gl:glGetBufferParameteriv +ALIAS: glGetBufferPointerv gl:glGetBufferPointerv +ALIAS: glBlendEquationSeparate gl:glBlendEquationSeparate +ALIAS: glDrawBuffers gl:glDrawBuffers +ALIAS: glStencilOpSeparate gl:glStencilOpSeparate +ALIAS: glStencilFuncSeparate gl:glStencilFuncSeparate +ALIAS: glStencilMaskSeparate gl:glStencilMaskSeparate +ALIAS: glAttachShader gl:glAttachShader +ALIAS: glBindAttribLocation gl:glBindAttribLocation +ALIAS: glCompileShader gl:glCompileShader +ALIAS: glCreateProgram gl:glCreateProgram +ALIAS: glCreateShader gl:glCreateShader +ALIAS: glDeleteProgram gl:glDeleteProgram +ALIAS: glDeleteShader gl:glDeleteShader +ALIAS: glDetachShader gl:glDetachShader +ALIAS: glDisableVertexAttribArray gl:glDisableVertexAttribArray +ALIAS: glEnableVertexAttribArray gl:glEnableVertexAttribArray +ALIAS: glGetActiveAttrib gl:glGetActiveAttrib +ALIAS: glGetActiveUniform gl:glGetActiveUniform +ALIAS: glGetAttachedShaders gl:glGetAttachedShaders +ALIAS: glGetAttribLocation gl:glGetAttribLocation +ALIAS: glGetProgramiv gl:glGetProgramiv +ALIAS: glGetProgramInfoLog gl:glGetProgramInfoLog +ALIAS: glGetShaderiv gl:glGetShaderiv +ALIAS: glGetShaderInfoLog gl:glGetShaderInfoLog +ALIAS: glGetShaderSource gl:glGetShaderSource +ALIAS: glGetUniformLocation gl:glGetUniformLocation +ALIAS: glGetUniformfv gl:glGetUniformfv +ALIAS: glGetUniformiv gl:glGetUniformiv +ALIAS: glGetVertexAttribdv gl:glGetVertexAttribdv +ALIAS: glGetVertexAttribfv gl:glGetVertexAttribfv +ALIAS: glGetVertexAttribiv gl:glGetVertexAttribiv +ALIAS: glGetVertexAttribPointerv gl:glGetVertexAttribPointerv +ALIAS: glIsProgram gl:glIsProgram +ALIAS: glIsShader gl:glIsShader +ALIAS: glLinkProgram gl:glLinkProgram +ALIAS: glShaderSource gl:glShaderSource +ALIAS: glUseProgram gl:glUseProgram +ALIAS: glUniform1f gl:glUniform1f +ALIAS: glUniform2f gl:glUniform2f +ALIAS: glUniform3f gl:glUniform3f +ALIAS: glUniform4f gl:glUniform4f +ALIAS: glUniform1i gl:glUniform1i +ALIAS: glUniform2i gl:glUniform2i +ALIAS: glUniform3i gl:glUniform3i +ALIAS: glUniform4i gl:glUniform4i +ALIAS: glUniform1fv gl:glUniform1fv +ALIAS: glUniform2fv gl:glUniform2fv +ALIAS: glUniform3fv gl:glUniform3fv +ALIAS: glUniform4fv gl:glUniform4fv +ALIAS: glUniform1iv gl:glUniform1iv +ALIAS: glUniform2iv gl:glUniform2iv +ALIAS: glUniform3iv gl:glUniform3iv +ALIAS: glUniform4iv gl:glUniform4iv +ALIAS: glUniformMatrix2fv gl:glUniformMatrix2fv +ALIAS: glUniformMatrix3fv gl:glUniformMatrix3fv +ALIAS: glUniformMatrix4fv gl:glUniformMatrix4fv +ALIAS: glValidateProgram gl:glValidateProgram +ALIAS: glVertexAttrib1d gl:glVertexAttrib1d +ALIAS: glVertexAttrib1dv gl:glVertexAttrib1dv +ALIAS: glVertexAttrib1f gl:glVertexAttrib1f +ALIAS: glVertexAttrib1fv gl:glVertexAttrib1fv +ALIAS: glVertexAttrib1s gl:glVertexAttrib1s +ALIAS: glVertexAttrib1sv gl:glVertexAttrib1sv +ALIAS: glVertexAttrib2d gl:glVertexAttrib2d +ALIAS: glVertexAttrib2dv gl:glVertexAttrib2dv +ALIAS: glVertexAttrib2f gl:glVertexAttrib2f +ALIAS: glVertexAttrib2fv gl:glVertexAttrib2fv +ALIAS: glVertexAttrib2s gl:glVertexAttrib2s +ALIAS: glVertexAttrib2sv gl:glVertexAttrib2sv +ALIAS: glVertexAttrib3d gl:glVertexAttrib3d +ALIAS: glVertexAttrib3dv gl:glVertexAttrib3dv +ALIAS: glVertexAttrib3f gl:glVertexAttrib3f +ALIAS: glVertexAttrib3fv gl:glVertexAttrib3fv +ALIAS: glVertexAttrib3s gl:glVertexAttrib3s +ALIAS: glVertexAttrib3sv gl:glVertexAttrib3sv +ALIAS: glVertexAttrib4Nbv gl:glVertexAttrib4Nbv +ALIAS: glVertexAttrib4Niv gl:glVertexAttrib4Niv +ALIAS: glVertexAttrib4Nsv gl:glVertexAttrib4Nsv +ALIAS: glVertexAttrib4Nub gl:glVertexAttrib4Nub +ALIAS: glVertexAttrib4Nubv gl:glVertexAttrib4Nubv +ALIAS: glVertexAttrib4Nuiv gl:glVertexAttrib4Nuiv +ALIAS: glVertexAttrib4Nusv gl:glVertexAttrib4Nusv +ALIAS: glVertexAttrib4bv gl:glVertexAttrib4bv +ALIAS: glVertexAttrib4d gl:glVertexAttrib4d +ALIAS: glVertexAttrib4dv gl:glVertexAttrib4dv +ALIAS: glVertexAttrib4f gl:glVertexAttrib4f +ALIAS: glVertexAttrib4fv gl:glVertexAttrib4fv +ALIAS: glVertexAttrib4iv gl:glVertexAttrib4iv +ALIAS: glVertexAttrib4s gl:glVertexAttrib4s +ALIAS: glVertexAttrib4sv gl:glVertexAttrib4sv +ALIAS: glVertexAttrib4ubv gl:glVertexAttrib4ubv +ALIAS: glVertexAttrib4uiv gl:glVertexAttrib4uiv +ALIAS: glVertexAttrib4usv gl:glVertexAttrib4usv +ALIAS: glVertexAttribPointer gl:glVertexAttribPointer +ALIAS: glUniformMatrix2x3fv gl:glUniformMatrix2x3fv +ALIAS: glUniformMatrix3x2fv gl:glUniformMatrix3x2fv +ALIAS: glUniformMatrix2x4fv gl:glUniformMatrix2x4fv +ALIAS: glUniformMatrix4x2fv gl:glUniformMatrix4x2fv +ALIAS: glUniformMatrix3x4fv gl:glUniformMatrix3x4fv +ALIAS: glUniformMatrix4x3fv gl:glUniformMatrix4x3fv +ALIAS: glColorMaski gl:glColorMaski +ALIAS: glGetBooleani_v gl:glGetBooleani_v +ALIAS: glGetIntegeri_v gl:glGetIntegeri_v +ALIAS: glEnablei gl:glEnablei +ALIAS: glDisablei gl:glDisablei +ALIAS: glIsEnabledi gl:glIsEnabledi +ALIAS: glBeginTransformFeedback gl:glBeginTransformFeedback +ALIAS: glEndTransformFeedback gl:glEndTransformFeedback +ALIAS: glBindBufferRange gl:glBindBufferRange +ALIAS: glBindBufferBase gl:glBindBufferBase +ALIAS: glTransformFeedbackVaryings gl:glTransformFeedbackVaryings +ALIAS: glGetTransformFeedbackVarying gl:glGetTransformFeedbackVarying +ALIAS: glClampColor gl:glClampColor +ALIAS: glBeginConditionalRender gl:glBeginConditionalRender +ALIAS: glEndConditionalRender gl:glEndConditionalRender +ALIAS: glVertexAttribIPointer gl:glVertexAttribIPointer +ALIAS: glGetVertexAttribIiv gl:glGetVertexAttribIiv +ALIAS: glGetVertexAttribIuiv gl:glGetVertexAttribIuiv +ALIAS: glGetUniformuiv gl:glGetUniformuiv +ALIAS: glBindFragDataLocation gl:glBindFragDataLocation +ALIAS: glGetFragDataLocation gl:glGetFragDataLocation +ALIAS: glUniform1ui gl:glUniform1ui +ALIAS: glUniform2ui gl:glUniform2ui +ALIAS: glUniform3ui gl:glUniform3ui +ALIAS: glUniform4ui gl:glUniform4ui +ALIAS: glUniform1uiv gl:glUniform1uiv +ALIAS: glUniform2uiv gl:glUniform2uiv +ALIAS: glUniform3uiv gl:glUniform3uiv +ALIAS: glUniform4uiv gl:glUniform4uiv +ALIAS: glTexParameterIiv gl:glTexParameterIiv +ALIAS: glTexParameterIuiv gl:glTexParameterIuiv +ALIAS: glGetTexParameterIiv gl:glGetTexParameterIiv +ALIAS: glGetTexParameterIuiv gl:glGetTexParameterIuiv +ALIAS: glClearBufferiv gl:glClearBufferiv +ALIAS: glClearBufferuiv gl:glClearBufferuiv +ALIAS: glClearBufferfv gl:glClearBufferfv +ALIAS: glClearBufferfi gl:glClearBufferfi +ALIAS: glGetStringi gl:glGetStringi +ALIAS: glDrawArraysInstanced gl:glDrawArraysInstanced +ALIAS: glDrawElementsInstanced gl:glDrawElementsInstanced +ALIAS: glTexBuffer gl:glTexBuffer +ALIAS: glPrimitiveRestartIndex gl:glPrimitiveRestartIndex +ALIAS: glIsRenderbuffer gl:glIsRenderbuffer +ALIAS: glBindRenderbuffer gl:glBindRenderbuffer +ALIAS: glDeleteRenderbuffers gl:glDeleteRenderbuffers +ALIAS: glGenRenderbuffers gl:glGenRenderbuffers +ALIAS: glRenderbufferStorage gl:glRenderbufferStorage +ALIAS: glGetRenderbufferParameteriv gl:glGetRenderbufferParameteriv +ALIAS: glIsFramebuffer gl:glIsFramebuffer +ALIAS: glBindFramebuffer gl:glBindFramebuffer +ALIAS: glDeleteFramebuffers gl:glDeleteFramebuffers +ALIAS: glGenFramebuffers gl:glGenFramebuffers +ALIAS: glCheckFramebufferStatus gl:glCheckFramebufferStatus +ALIAS: glFramebufferTexture1D gl:glFramebufferTexture1D +ALIAS: glFramebufferTexture2D gl:glFramebufferTexture2D +ALIAS: glFramebufferTexture3D gl:glFramebufferTexture3D +ALIAS: glFramebufferRenderbuffer gl:glFramebufferRenderbuffer +ALIAS: glGetFramebufferAttachmentParameteriv gl:glGetFramebufferAttachmentParameteriv +ALIAS: glGenerateMipmap gl:glGenerateMipmap +ALIAS: glBlitFramebuffer gl:glBlitFramebuffer +ALIAS: glRenderbufferStorageMultisample gl:glRenderbufferStorageMultisample +ALIAS: glFramebufferTextureLayer gl:glFramebufferTextureLayer +ALIAS: glMapBufferRange gl:glMapBufferRange +ALIAS: glFlushMappedBufferRange gl:glFlushMappedBufferRange +ALIAS: glBindVertexArray gl:glBindVertexArray +ALIAS: glDeleteVertexArrays gl:glDeleteVertexArrays +ALIAS: glGenVertexArrays gl:glGenVertexArrays +ALIAS: glIsVertexArray gl:glIsVertexArray +ALIAS: glGetUniformIndices gl:glGetUniformIndices +ALIAS: glGetActiveUniformsiv gl:glGetActiveUniformsiv +ALIAS: glGetActiveUniformName gl:glGetActiveUniformName +ALIAS: glGetUniformBlockIndex gl:glGetUniformBlockIndex +ALIAS: glGetActiveUniformBlockiv gl:glGetActiveUniformBlockiv +ALIAS: glGetActiveUniformBlockName gl:glGetActiveUniformBlockName +ALIAS: glUniformBlockBinding gl:glUniformBlockBinding +ALIAS: glCopyBufferSubData gl:glCopyBufferSubData diff --git a/basis/opengl/gl3/summary.txt b/basis/opengl/gl3/summary.txt new file mode 100644 index 0000000000..ae758b2fff --- /dev/null +++ b/basis/opengl/gl3/summary.txt @@ -0,0 +1 @@ +Forward-compatible subset of OpenGL 3.1 From b6abd4a90cc0dfde3e204013626df4bed4523fe3 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Thu, 25 Jun 2009 09:15:04 -0500 Subject: [PATCH 27/27] windows.offscreen:make-bitmap-image wasn't filling in the component-type of the image object it makes --- basis/windows/offscreen/offscreen.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/basis/windows/offscreen/offscreen.factor b/basis/windows/offscreen/offscreen.factor index 6e65958220..fea7240bf6 100755 --- a/basis/windows/offscreen/offscreen.factor +++ b/basis/windows/offscreen/offscreen.factor @@ -42,6 +42,7 @@ IN: windows.offscreen swap >>dim swap >>bitmap BGRX >>component-order + ubyte-components >>component-type t >>upside-down? ; : with-memory-dc ( quot: ( hDC -- ) -- ) @@ -50,4 +51,4 @@ IN: windows.offscreen :: make-bitmap-image ( dim dc quot -- image ) dim dc make-bitmap [ &DeleteObject drop ] dip quot dip - dim bitmap>image ; inline \ No newline at end of file + dim bitmap>image ; inline