From 0b45b27deaf1e58b945ba0ceb2daea860ce742c2 Mon Sep 17 00:00:00 2001 From: William Robinson Date: Sun, 27 Jan 2008 13:58:14 +0000 Subject: [PATCH] Major package refactoring. Extracted all common types and expansions into lib/types.lisp with dedicated system cl-glfw-types for all to depend on and share expansions. Put opengl expanders in a separate package (so that maybe one day, in theory, we could delete-package it). --- cl-glfw-glu.asd | 2 +- cl-glfw-opengl.asd | 10 +- cl-glfw-types.asd | 12 ++ cl-glfw.asd | 3 +- lib/glfw-package.lisp | 12 +- lib/glfw-types.lisp | 15 -- lib/glfw.lisp | 6 +- lib/glu-version_1_1.lisp | 4 +- lib/glu-version_1_2.lisp | 12 +- lib/glu-version_1_3.lisp | 26 ++-- lib/glu.lisp | 55 ++++---- lib/opengl-extensions.lisp | 2 +- lib/opengl-library.lisp | 11 ++ lib/opengl-package.lisp | 9 +- lib/opengl-type-map.lisp | 126 +++++++++++++++++ lib/opengl-types.lisp | 343 --------------------------------------------- lib/opengl.lisp | 8 -- lib/scaffolding.lisp | 157 +++++++++++++++++++++ lib/types.lisp | 65 +++++++++ 19 files changed, 441 insertions(+), 437 deletions(-) create mode 100644 cl-glfw-types.asd delete mode 100644 lib/glfw-types.lisp rewrite lib/glu-version_1_3.lisp (85%) create mode 100644 lib/opengl-library.lisp create mode 100644 lib/opengl-type-map.lisp delete mode 100644 lib/opengl-types.lisp create mode 100644 lib/scaffolding.lisp create mode 100644 lib/types.lisp diff --git a/cl-glfw-glu.asd b/cl-glfw-glu.asd index 395f4a9..73988a2 100644 --- a/cl-glfw-glu.asd +++ b/cl-glfw-glu.asd @@ -8,7 +8,7 @@ :version "0.3" :author "William Robinson " :licence "Public Domain" - :depends-on (cffi cl-glfw-opengl) + :depends-on (cffi cl-glfw-types) :components ((:module lib :components ((:file "glu"))))) (pushnew (merge-pathnames diff --git a/cl-glfw-opengl.asd b/cl-glfw-opengl.asd index e653886..2b78a82 100644 --- a/cl-glfw-opengl.asd +++ b/cl-glfw-opengl.asd @@ -8,13 +8,15 @@ :version "0.3" :author "William Robinson " :licence "Public Domain" - :depends-on (cffi) + :depends-on (cffi cl-glfw-types) :components ((:module lib :serial t :components - ((:file "opengl-package") - (:file "opengl-types") - (:file "opengl") + ((:file "scaffolding") + (:file "opengl-package") ; template-expanded + (:file "opengl-type-map") ; template-expanded + (:file "opengl-library") + (:file "opengl") ; template-expanded (:file "opengl-convenience") (:file "opengl-extensions"))))) diff --git a/cl-glfw-types.asd b/cl-glfw-types.asd new file mode 100644 index 0000000..2dc274f --- /dev/null +++ b/cl-glfw-types.asd @@ -0,0 +1,12 @@ +(defpackage #:cl-glfw-types-system + (:use #:asdf #:cl)) + +(in-package #:cl-glfw-types-system) + +(defsystem cl-glfw-types + :description "Common Lisp bindings for GLFW: Base CFFI type definitions and expanders package" + :version "0.3" + :author "William Robinson " + :licence "Public Domain" + :depends-on (cffi) + :components ((:module lib :components ((:file "types"))))) \ No newline at end of file diff --git a/cl-glfw.asd b/cl-glfw.asd index 80a7bd8..cc6ffca 100644 --- a/cl-glfw.asd +++ b/cl-glfw.asd @@ -8,8 +8,7 @@ :version "0.3" :author "William Robinson " :licence "Public Domain" - :depends-on (cffi) + :depends-on (cffi cl-glfw-types) :components ((:module lib :serial t :components ((:file "glfw-package") - (:file "glfw-types") (:file "glfw"))))) \ No newline at end of file diff --git a/lib/glfw-package.lisp b/lib/glfw-package.lisp index ab36d20..d3bfea3 100644 --- a/lib/glfw-package.lisp +++ b/lib/glfw-package.lisp @@ -1,12 +1,14 @@ -(defpackage glfw - (:use #:cl #:cffi) +(defpackage #:cl-glfw + (:nicknames #:glfw) + (:use #:cl #:cffi #:cl-glfw-types) + (:shadowing-import-from #:cl-glfw-types #:boolean #:byte #:float #:char #:string) (:shadow #:sleep #:+red-bits+ #:+green-bits+ #:+blue-bits+ #:+alpha-bits+ #:+stencil-bits+ #:+depth-bits+ #:+accum-red-bits+ #:+accum-green-bits+ #:+accum-blue-bits+ #:+accum-alpha-bits+ #:+aux-buffers+ #:+stereo+ - #:cond #:boolean + #:cond #:enable #:disable) - (:export #:+accelerated+ #:+accum-alpha-bits+ #:+accum-blue-bits+ #:+accum-green-bits+ #:+accum-red-bits+ #:+active+ #:+alpha-bits+ #:+alpha-map-bit+ #:+auto-poll-events+ #:+aux-buffers+ #:+axes+ #:+blue-bits+ #:+build-mipmaps-bit+ #:+buttons+ #:+depth-bits+ #:+fsaa-samples+ #:+fullscreen+ #:+green-bits+ #:+iconified+ #:+infinity+ #:+joystick-1+ #:+joystick-10+ #:+joystick-11+ #:+joystick-12+ #:+joystick-13+ #:+joystick-14+ #:+joystick-15+ #:+joystick-16+ #:+joystick-2+ #:+joystick-3+ #:+joystick-4+ #:+joystick-5+ #:+joystick-6+ #:+joystick-7+ #:+joystick-8+ #:+joystick-9+ #:+joystick-last+ #:+key-backspace+ #:+key-del+ #:+key-down+ #:+key-end+ #:+key-enter+ #:+key-esc+ #:+key-f1+ #:+key-f10+ #:+key-f11+ #:+key-f12+ #:+key-f13+ #:+key-f14+ #:+key-f15+ #:+key-f16+ #:+key-f17+ #:+key-f18+ #:+key-f19+ #:+key-f2+ #:+key-f20+ #:+key-f21+ #:+key-f22+ #:+key-f23+ #:+key-f24+ #:+key-f25+ #:+key-f3+ #:+key-f4+ #:+key-f5+ #:+key-f6+ #:+key-f7+ #:+key-f8+ #:+key-f9+ #:+key-home+ #:+key-insert+ #:+key-kp-0+ #:+key-kp-1+ #:+key-kp-2+ #:+key-kp-3+ #:+key-kp-4+ #:+key-kp-5+ #:+key-kp-6+ #:+key-kp-7+ #:+key-kp-8+ #:+key-kp-9+ #:+key-kp-add+ #:+key-kp-decimal+ #:+key-kp-divide+ #:+key-kp-enter+ #:+key-kp-equal+ #:+key-kp-multiply+ #:+key-kp-subtract+ #:+key-lalt+ #:+key-last+ #:+key-lctrl+ #:+key-left+ #:+key-lshift+ #:+key-pagedown+ #:+key-pageup+ #:+key-ralt+ #:+key-rctrl+ #:+key-repeat+ #:+key-right+ #:+key-rshift+ #:+key-space+ #:+key-special+ #:+key-tab+ #:+key-unknown+ #:+key-up+ #:+mouse-button-1+ #:+mouse-button-2+ #:+mouse-button-3+ #:+mouse-button-4+ #:+mouse-button-5+ #:+mouse-button-6+ #:+mouse-button-7+ #:+mouse-button-8+ #:+mouse-button-last+ #:+mouse-button-left+ #:+mouse-button-middle+ #:+mouse-button-right+ #:+mouse-cursor+ #:+no-rescale-bit+ #:+nowait+ #:+opened+ #:+origin-ul-bit+ #:+present+ #:+press+ #:+red-bits+ #:+refresh-rate+ #:+release+ #:+stencil-bits+ #:+stereo+ #:+sticky-keys+ #:+sticky-mouse-buttons+ #:+system-keys+ #:+wait+ #:+window+ #:+window-no-resize+ #:broadcast-cond #:close-window #:create-cond #:create-mutex #:create-thread #:defcfun+doc #:defcfun+out+doc #:destroy-cond #:destroy-mutex #:destroy-thread #:disable #:do-window #:enable #:extension-supported #:free-image #:get-desktop-mode #:get-gl-version #:get-joystick-buttons #:get-joystick-param #:get-joystick-pos #:get-key #:get-mouse-button #:get-mouse-pos #:get-mouse-wheel #:get-number-of-processors #:get-proc-address #:get-thread-id #:get-time #:get-version #:get-video-modes #:get-window-param #:get-window-size #:iconify-window #:init #:load-memory-texture-2d #:load-texture-2d #:load-texture-image-2d #:lock-mutex #:open-window #:open-window-hint #:poll-events #:read-image #:read-memory-image #:restore-window #:set-char-callback #:set-key-callback #:set-mouse-button-callback #:set-mouse-pos #:set-mouse-pos-callback #:set-mouse-wheel #:set-mouse-wheel-callback #:set-time #:set-window-close-callback #:set-window-pos #:set-window-refresh-callback #:set-window-size #:set-window-size-callback #:set-window-title #:signal-cond #:sleep #:swap-buffers #:swap-interval #:terminate #:unlock-mutex #:wait-cond #:wait-events #:wait-thread #:with-init #:with-init-window #:with-lock-mutex #:with-open-window)) + (:export #:+accelerated+ #:+accum-alpha-bits+ #:+accum-blue-bits+ #:+accum-green-bits+ #:+accum-red-bits+ #:+active+ #:+alpha-bits+ #:+alpha-map-bit+ #:+auto-poll-events+ #:+aux-buffers+ #:+axes+ #:+blue-bits+ #:+build-mipmaps-bit+ #:+buttons+ #:+depth-bits+ #:+fsaa-samples+ #:+fullscreen+ #:+green-bits+ #:+iconified+ #:+infinity+ #:+joystick-1+ #:+joystick-10+ #:+joystick-11+ #:+joystick-12+ #:+joystick-13+ #:+joystick-14+ #:+joystick-15+ #:+joystick-16+ #:+joystick-2+ #:+joystick-3+ #:+joystick-4+ #:+joystick-5+ #:+joystick-6+ #:+joystick-7+ #:+joystick-8+ #:+joystick-9+ #:+joystick-last+ #:+key-backspace+ #:+key-del+ #:+key-down+ #:+key-end+ #:+key-enter+ #:+key-esc+ #:+key-f1+ #:+key-f10+ #:+key-f11+ #:+key-f12+ #:+key-f13+ #:+key-f14+ #:+key-f15+ #:+key-f16+ #:+key-f17+ #:+key-f18+ #:+key-f19+ #:+key-f2+ #:+key-f20+ #:+key-f21+ #:+key-f22+ #:+key-f23+ #:+key-f24+ #:+key-f25+ #:+key-f3+ #:+key-f4+ #:+key-f5+ #:+key-f6+ #:+key-f7+ #:+key-f8+ #:+key-f9+ #:+key-home+ #:+key-insert+ #:+key-kp-0+ #:+key-kp-1+ #:+key-kp-2+ #:+key-kp-3+ #:+key-kp-4+ #:+key-kp-5+ #:+key-kp-6+ #:+key-kp-7+ #:+key-kp-8+ #:+key-kp-9+ #:+key-kp-add+ #:+key-kp-decimal+ #:+key-kp-divide+ #:+key-kp-enter+ #:+key-kp-equal+ #:+key-kp-multiply+ #:+key-kp-subtract+ #:+key-lalt+ #:+key-last+ #:+key-lctrl+ #:+key-left+ #:+key-lshift+ #:+key-pagedown+ #:+key-pageup+ #:+key-ralt+ #:+key-rctrl+ #:+key-repeat+ #:+key-right+ #:+key-rshift+ #:+key-space+ #:+key-special+ #:+key-tab+ #:+key-unknown+ #:+key-up+ #:+mouse-button-1+ #:+mouse-button-2+ #:+mouse-button-3+ #:+mouse-button-4+ #:+mouse-button-5+ #:+mouse-button-6+ #:+mouse-button-7+ #:+mouse-button-8+ #:+mouse-button-last+ #:+mouse-button-left+ #:+mouse-button-middle+ #:+mouse-button-right+ #:+mouse-cursor+ #:+no-rescale-bit+ #:+nowait+ #:+opened+ #:+origin-ul-bit+ #:+present+ #:+press+ #:+red-bits+ #:+refresh-rate+ #:+release+ #:+stencil-bits+ #:+stereo+ #:+sticky-keys+ #:+sticky-mouse-buttons+ #:+system-keys+ #:+wait+ #:+window+ #:+window-no-resize+ #:boolean #:broadcast-cond #:close-window #:create-cond #:create-mutex #:create-thread #:defcfun+doc #:defcfun+out+doc #:destroy-cond #:destroy-mutex #:destroy-thread #:disable #:do-window #:enable #:extension-supported #:free-image #:get-desktop-mode #:get-gl-version #:get-joystick-buttons #:get-joystick-param #:get-joystick-pos #:get-key #:get-mouse-button #:get-mouse-pos #:get-mouse-wheel #:get-number-of-processors #:get-proc-address #:get-thread-id #:get-time #:get-version #:get-video-modes #:get-window-param #:get-window-size #:iconify-window #:init #:load-memory-texture-2d #:load-texture-2d #:load-texture-image-2d #:lock-mutex #:open-window #:open-window-hint #:poll-events #:read-image #:read-memory-image #:restore-window #:set-char-callback #:set-key-callback #:set-mouse-button-callback #:set-mouse-pos #:set-mouse-pos-callback #:set-mouse-wheel #:set-mouse-wheel-callback #:set-time #:set-window-close-callback #:set-window-pos #:set-window-refresh-callback #:set-window-size #:set-window-size-callback #:set-window-title #:signal-cond #:sleep #:swap-buffers #:swap-interval #:terminate #:unlock-mutex #:wait-cond #:wait-events #:wait-thread #:with-init #:with-init-window #:with-lock-mutex #:with-open-window)) #| exports generated by this, after the package is loaded: (format t "~{#:~a~^ ~}" @@ -17,5 +19,3 @@ (loop for s being each symbol in '#:glfw collecting s))) #'string<)) |# - -(in-package #:glfw) diff --git a/lib/glfw-types.lisp b/lib/glfw-types.lisp deleted file mode 100644 index 4aec9d0..0000000 --- a/lib/glfw-types.lisp +++ /dev/null @@ -1,15 +0,0 @@ - -(in-package #:glfw) - -;; copy the boolean from OpenGL -(defctype boolean :uint8) - -(defconstant +false+ #x0) -(defconstant +true+ #x1) - -(defmethod cffi:expand-to-foreign (value (type (eql 'boolean))) - `(if ,value +true+ +false+)) - -(defmethod cffi:expand-from-foreign (value (type (eql 'boolean))) - `(not (= ,value +false+))) - diff --git a/lib/glfw.lisp b/lib/glfw.lisp index 8f78e8f..b668133 100644 --- a/lib/glfw.lisp +++ b/lib/glfw.lisp @@ -1,4 +1,4 @@ -(in-package #:glfw) +(in-package #:cl-glfw) (defmacro defcfun+doc ((c-name lisp-name) return-type (&body args) docstring) `(progn @@ -333,7 +333,7 @@ Wrapped in a block named glfw:with-open-window." (block with-open-window (glfw:set-window-title ,title) ,@forms) - (when (eql (glfw:get-window-param glfw:+opened+) +true+) + (when (glfw:get-window-param glfw:+opened+) (close-window))) (error "Error initializing glfw window."))) @@ -361,7 +361,7 @@ If the window is closed, the loop is also exited." (loop named do-window do ,@forms (glfw:swap-buffers) - (unless (eql (glfw:get-window-param glfw:+opened+) +true+) + (unless (glfw:get-window-param glfw:+opened+) (return-from do-window))))) (defcfun+doc ("glfwSetWindowCloseCallback" set-window-close-callback) :void ((cbfun :pointer)) diff --git a/lib/glu-version_1_1.lisp b/lib/glu-version_1_1.lisp index 1da0e03..370c861 100644 --- a/lib/glu-version_1_1.lisp +++ b/lib/glu-version_1_1.lisp @@ -1,3 +1,3 @@ -(in-package #:glu) +(in-package #:cl-glfw-glu) -(defcfun ("gluGetString" get-string) :pointer (name gl:enum)) \ No newline at end of file +(defcfun ("gluGetString" get-string) :pointer (name enum)) \ No newline at end of file diff --git a/lib/glu-version_1_2.lisp b/lib/glu-version_1_2.lisp index 8e2572f..734af23 100644 --- a/lib/glu-version_1_2.lisp +++ b/lib/glu-version_1_2.lisp @@ -1,18 +1,18 @@ -(in-package #:glu) +(in-package #:cl-glfw-glu) -(defcfun ("gluNextContour" next-contour) :void (tess :pointer) (type gl:enum)) +(defcfun ("gluNextContour" next-contour) :void (tess :pointer) (type enum)) (defcfun ("gluEndPolygon" end-polygon) :void (tess :pointer)) (defcfun ("gluDeleteTess" delete-tess) :void (tess :pointer)) (defcfun ("gluNewTess" new-tess) :pointer ) (defcfun ("gluTessBeginContour" tess-begin-contour) :void (tess :pointer)) (defcfun ("gluTessBeginPolygon" tess-begin-polygon) :void (tess :pointer) (data :pointer)) -(defcfun ("gluTessCallback" tess-callback) :void (tess :pointer) (which gl:enum) (CallBackFunc :pointer)) +(defcfun ("gluTessCallback" tess-callback) :void (tess :pointer) (which enum) (CallBackFunc :pointer)) (defcfun ("gluTessEndContour" tess-end-contour) :void (tess :pointer)) (defcfun ("gluTessEndPolygon" tess-end-polygon) :void (tess :pointer)) -(defcfun ("gluTessNormal" tess-normal) :void (tess :pointer) (valueX gl:double) (valueY gl:double) (valueZ gl:double)) -(defcfun ("gluTessProperty" tess-property) :void (tess :pointer) (which gl:enum) (data gl:double)) +(defcfun ("gluTessNormal" tess-normal) :void (tess :pointer) (valueX double) (valueY double) (valueZ double)) +(defcfun ("gluTessProperty" tess-property) :void (tess :pointer) (which enum) (data double)) (defcfun ("gluTessVertex" tess-vertex) :void (tess :pointer) (location :pointer) (data :pointer)) -(defcfun ("gluGetTessProperty" get-tess-property) :void (tess :pointer) (which gl:enum) (data :pointer)) +(defcfun ("gluGetTessProperty" get-tess-property) :void (tess :pointer) (which enum) (data :pointer)) (defcfun ("gluBeginPolygon" begin-polygon) :void (tess :pointer)) diff --git a/lib/glu-version_1_3.lisp b/lib/glu-version_1_3.lisp dissimilarity index 85% index b967ec8..eb62dc8 100644 --- a/lib/glu-version_1_3.lisp +++ b/lib/glu-version_1_3.lisp @@ -1,13 +1,13 @@ -(in-package #:glu) - -(defcfun ("gluScaleImage" scale-image) gl:int (format gl:enum) (wIn gl:sizei) (hIn gl:sizei) (typeIn gl:enum) (dataIn :pointer) (wOut gl:sizei) (hOut gl:sizei) (typeOut gl:enum) (dataOut :pointer)) -(defcfun ("gluCheckExtension" check-extension) gl:boolean (extName :pointer) (extString :pointer)) -(defcfun ("gluBuild1DMipmapLevels" build-1d-mipmap-levels) gl:int (target gl:enum) (internalFormat gl:int) (width gl:sizei) (format gl:enum) (type gl:enum) (level gl:int) (base gl:int) (max gl:int) (data :pointer)) -(defcfun ("gluBuild2DMipmapLevels" build-2d-mipmap-levels) gl:int (target gl:enum) (internalFormat gl:int) (width gl:sizei) (height gl:sizei) (format gl:enum) (type gl:enum) (level gl:int) (base gl:int) (max gl:int) (data :pointer)) -(defcfun ("gluBuild3DMipmapLevels" build-3d-mipmap-levels) gl:int (target gl:enum) (internalFormat gl:int) (width gl:sizei) (height gl:sizei) (depth gl:sizei) (format gl:enum) (type gl:enum) (level gl:int) (base gl:int) (max gl:int) (data :pointer)) -(defcfun ("gluBuild3DMipmaps" build-3d-mipmaps) gl:int (target gl:enum) (internalFormat gl:int) (width gl:sizei) (height gl:sizei) (depth gl:sizei) (format gl:enum) (type gl:enum) (data :pointer)) - -(defcfun ("gluNurbsCallback" nurbs-callback) :void (nurb :pointer) (which gl:enum) (CallBackFunc :pointer)) -(defcfun ("gluNurbsCallbackData" nurbs-callback-data) :void (nurb :pointer) (userData :pointer)) -(defcfun ("gluNurbsCallbackDataEXT" nurbs-callback-dataext) :void (nurb :pointer) (userData :pointer)) -(defcfun ("gluUnProject4" un-project-4) gl:int (winX gl:double) (winY gl:double) (winZ gl:double) (clipW gl:double) (model :pointer) (proj :pointer) (view :pointer) (nearVal gl:double) (farVal gl:double) (objX :pointer) (objY :pointer) (objZ :pointer) (objW :pointer)) +(in-package #:cl-glfw-glu) + +(defcfun ("gluScaleImage" scale-image) int (format enum) (wIn sizei) (hIn sizei) (typeIn enum) (dataIn :pointer) (wOut sizei) (hOut sizei) (typeOut enum) (dataOut :pointer)) +(defcfun ("gluCheckExtension" check-extension) boolean (extName :pointer) (extString :pointer)) +(defcfun ("gluBuild1DMipmapLevels" build-1d-mipmap-levels) int (target enum) (internalFormat int) (width sizei) (format enum) (type enum) (level int) (base int) (max int) (data :pointer)) +(defcfun ("gluBuild2DMipmapLevels" build-2d-mipmap-levels) int (target enum) (internalFormat int) (width sizei) (height sizei) (format enum) (type enum) (level int) (base int) (max int) (data :pointer)) +(defcfun ("gluBuild3DMipmapLevels" build-3d-mipmap-levels) int (target enum) (internalFormat int) (width sizei) (height sizei) (depth sizei) (format enum) (type enum) (level int) (base int) (max int) (data :pointer)) +(defcfun ("gluBuild3DMipmaps" build-3d-mipmaps) int (target enum) (internalFormat int) (width sizei) (height sizei) (depth sizei) (format enum) (type enum) (data :pointer)) + +(defcfun ("gluNurbsCallback" nurbs-callback) :void (nurb :pointer) (which enum) (CallBackFunc :pointer)) +(defcfun ("gluNurbsCallbackData" nurbs-callback-data) :void (nurb :pointer) (userData :pointer)) +(defcfun ("gluNurbsCallbackDataEXT" nurbs-callback-dataext) :void (nurb :pointer) (userData :pointer)) +(defcfun ("gluUnProject4" un-project-4) int (winX double) (winY double) (winZ double) (clipW double) (model :pointer) (proj :pointer) (view :pointer) (nearVal double) (farVal double) (objX :pointer) (objY :pointer) (objZ :pointer) (objW :pointer)) diff --git a/lib/glu.lisp b/lib/glu.lisp index 98e4898..9f22694 100644 --- a/lib/glu.lisp +++ b/lib/glu.lisp @@ -1,9 +1,10 @@ (defpackage #:cl-glfw-openglu - (:use #:cffi #:cl) - (:nicknames #:openglu #:glu) - (:export +ext-object-space-tess+ +ext-nurbs-tessellator+ +false+ +true+ +version-1-1+ +version-1-2+ +version-1-3+ +version+ +extensions+ +invalid-enum+ +invalid-value+ +out-of-memory+ +incompatible-gl-version+ +invalid-operation+ +outline-polygon+ +outline-patch+ +nurbs-error+ +error+ +nurbs-begin+ +nurbs-begin-ext+ +nurbs-vertex+ +nurbs-vertex-ext+ +nurbs-normal+ +nurbs-normal-ext+ +nurbs-color+ +nurbs-color-ext+ +nurbs-texture-coord+ +nurbs-tex-coord-ext+ +nurbs-end+ +nurbs-end-ext+ +nurbs-begin-data+ +nurbs-begin-data-ext+ +nurbs-vertex-data+ +nurbs-vertex-data-ext+ +nurbs-normal-data+ +nurbs-normal-data-ext+ +nurbs-color-data+ +nurbs-color-data-ext+ +nurbs-texture-coord-data+ +nurbs-tex-coord-data-ext+ +nurbs-end-data+ +nurbs-end-data-ext+ +nurbs-error-1+ +nurbs-error-2+ +nurbs-error-3+ +nurbs-error-4+ +nurbs-error-5+ +nurbs-error-6+ +nurbs-error-7+ +nurbs-error-8+ +nurbs-error-9+ +nurbs-error-10+ +nurbs-error-11+ +nurbs-error-12+ +nurbs-error-13+ +nurbs-error-14+ +nurbs-error-15+ +nurbs-error-16+ +nurbs-error-17+ +nurbs-error-18+ +nurbs-error-19+ +nurbs-error-20+ +nurbs-error-21+ +nurbs-error-22+ +nurbs-error-23+ +nurbs-error-24+ +nurbs-error-25+ +nurbs-error-26+ +nurbs-error-27+ +nurbs-error-28+ +nurbs-error-29+ +nurbs-error-30+ +nurbs-error-31+ +nurbs-error-32+ +nurbs-error-33+ +nurbs-error-34+ +nurbs-error-35+ +nurbs-error-36+ +nurbs-error-37+ +auto-load-matrix+ +culling+ +sampling-tolerance+ +display-mode+ +parametric-tolerance+ +sampling-method+ +u-step+ +v-step+ +nurbs-mode+ +nurbs-mode-ext+ +nurbs-tessellator+ +nurbs-tessellator-ext+ +nurbs-renderer+ +nurbs-renderer-ext+ +object-parametric-error+ +object-parametric-error-ext+ +object-path-length+ +object-path-length-ext+ +path-length+ +parametric-error+ +domain-distance+ +map-1-trim-2+ +map-1-trim-3+ +point+ +line+ +fill+ +silhouette+ +smooth+ +flat+ +none+ +outside+ +inside+ +tess-begin+ +begin+ +tess-vertex+ +vertex+ +tess-end+ +end+ +tess-error+ +tess-edge-flag+ +edge-flag+ +tess-combine+ +tess-begin-data+ +tess-vertex-data+ +tess-end-data+ +tess-error-data+ +tess-edge-flag-data+ +tess-combine-data+ +cw+ +ccw+ +interior+ +exterior+ +unknown+ +tess-winding-rule+ +tess-boundary-only+ +tess-tolerance+ +tess-error-1+ +tess-error-2+ +tess-error-3+ +tess-error-4+ +tess-error-5+ +tess-error-6+ +tess-error-7+ +tess-error-8+ +tess-missing-begin-polygon+ +tess-missing-begin-contour+ +tess-missing-end-polygon+ +tess-missing-end-contour+ +tess-coord-too-large+ +tess-need-combine-callback+ +tess-winding-odd+ +tess-winding-nonzero+ +tess-winding-positive+ +tess-winding-negative+ +tess-winding-abs-geq-two+ +tess-max-coord+ begin-curve begin-polygon begin-surface begin-trim build-1d-mipmap-levels build-1d-mipmaps build-2d-mipmap-levels build-2d-mipmaps build-3d-mipmap-levels build-3d-mipmaps check-extension cylinder delete-nurbs-renderer delete-quadric delete-tess disk end-curve end-polygon end-surface end-trim error-string get-nurbs-property get-string get-tess-property load-sampling-matrices look-at new-nurbs-renderer new-quadric new-tess next-contour nurbs-callback nurbs-callback-data nurbs-callback-dataext nurbs-curve nurbs-property nurbs-surface ortho-2d partial-disk perspective pick-matrix project pwl-curve quadric-callback quadric-draw-style quadric-normals quadric-orientation quadric-texture scale-image sphere tess-begin-contour tess-begin-polygon tess-callback tess-end-contour tess-end-polygon tess-normal tess-property tess-vertex un-project un-project-4)) + (:use #:cl-glfw-types #:cffi #:cl) + (:shadowing-import-from #:cl-glfw-types #:boolean #:byte #:float #:char #:string) + (:nicknames #:cl-glfw-glu #:openglu #:glu) + (:export #:boolean #:double #:enum #:float #:int #:sizei +ext-object-space-tess+ +ext-nurbs-tessellator+ +false+ +true+ +version-1-1+ +version-1-2+ +version-1-3+ +version+ +extensions+ +invalid-enum+ +invalid-value+ +out-of-memory+ +incompatible-gl-version+ +invalid-operation+ +outline-polygon+ +outline-patch+ +nurbs-error+ +error+ +nurbs-begin+ +nurbs-begin-ext+ +nurbs-vertex+ +nurbs-vertex-ext+ +nurbs-normal+ +nurbs-normal-ext+ +nurbs-color+ +nurbs-color-ext+ +nurbs-texture-coord+ +nurbs-tex-coord-ext+ +nurbs-end+ +nurbs-end-ext+ +nurbs-begin-data+ +nurbs-begin-data-ext+ +nurbs-vertex-data+ +nurbs-vertex-data-ext+ +nurbs-normal-data+ +nurbs-normal-data-ext+ +nurbs-color-data+ +nurbs-color-data-ext+ +nurbs-texture-coord-data+ +nurbs-tex-coord-data-ext+ +nurbs-end-data+ +nurbs-end-data-ext+ +nurbs-error-1+ +nurbs-error-2+ +nurbs-error-3+ +nurbs-error-4+ +nurbs-error-5+ +nurbs-error-6+ +nurbs-error-7+ +nurbs-error-8+ +nurbs-error-9+ +nurbs-error-10+ +nurbs-error-11+ +nurbs-error-12+ +nurbs-error-13+ +nurbs-error-14+ +nurbs-error-15+ +nurbs-error-16+ +nurbs-error-17+ +nurbs-error-18+ +nurbs-error-19+ +nurbs-error-20+ +nurbs-error-21+ +nurbs-error-22+ +nurbs-error-23+ +nurbs-error-24+ +nurbs-error-25+ +nurbs-error-26+ +nurbs-error-27+ +nurbs-error-28+ +nurbs-error-29+ +nurbs-error-30+ +nurbs-error-31+ +nurbs-error-32+ +nurbs-error-33+ +nurbs-error-34+ +nurbs-error-35+ +nurbs-error-36+ +nurbs-error-37+ +auto-load-matrix+ +culling+ +sampling-tolerance+ +display-mode+ +parametric-tolerance+ +sampling-method+ +u-step+ +v-step+ +nurbs-mode+ +nurbs-mode-ext+ +nurbs-tessellator+ +nurbs-tessellator-ext+ +nurbs-renderer+ +nurbs-renderer-ext+ +object-parametric-error+ +object-parametric-error-ext+ +object-path-length+ +object-path-length-ext+ +path-length+ +parametric-error+ +domain-distance+ +map-1-trim-2+ +map-1-trim-3+ +point+ +line+ +fill+ +silhouette+ +smooth+ +flat+ +none+ +outside+ +inside+ +tess-begin+ +begin+ +tess-vertex+ +vertex+ +tess-end+ +end+ +tess-error+ +tess-edge-flag+ +edge-flag+ +tess-combine+ +tess-begin-data+ +tess-vertex-data+ +tess-end-data+ +tess-error-data+ +tess-edge-flag-data+ +tess-combine-data+ +cw+ +ccw+ +interior+ +exterior+ +unknown+ +tess-winding-rule+ +tess-boundary-only+ +tess-tolerance+ +tess-error-1+ +tess-error-2+ +tess-error-3+ +tess-error-4+ +tess-error-5+ +tess-error-6+ +tess-error-7+ +tess-error-8+ +tess-missing-begin-polygon+ +tess-missing-begin-contour+ +tess-missing-end-polygon+ +tess-missing-end-contour+ +tess-coord-too-large+ +tess-need-combine-callback+ +tess-winding-odd+ +tess-winding-nonzero+ +tess-winding-positive+ +tess-winding-negative+ +tess-winding-abs-geq-two+ +tess-max-coord+ begin-curve begin-polygon begin-surface begin-trim build-1d-mipmap-levels build-1d-mipmaps build-2d-mipmap-levels build-2d-mipmaps build-3d-mipmap-levels build-3d-mipmaps check-extension cylinder delete-nurbs-renderer delete-quadric delete-tess disk end-curve end-polygon end-surface end-trim error-string get-nurbs-property get-string get-tess-property load-sampling-matrices look-at new-nurbs-renderer new-quadric new-tess next-contour nurbs-callback nurbs-callback-data nurbs-callback-dataext nurbs-curve nurbs-property nurbs-surface ortho-2d partial-disk perspective pick-matrix project pwl-curve quadric-callback quadric-draw-style quadric-normals quadric-orientation quadric-texture scale-image sphere tess-begin-contour tess-begin-polygon tess-callback tess-end-contour tess-end-polygon tess-normal tess-property tess-vertex un-project un-project-4)) -(in-package #:glu) +(in-package #:cl-glfw-glu) (ignore-errors (load-foreign-library '(:or "glu32.dll" @@ -195,34 +196,34 @@ (defcfun ("gluBeginCurve" begin-curve) :void (nurb :pointer)) (defcfun ("gluBeginSurface" begin-surface) :void (nurb :pointer)) (defcfun ("gluBeginTrim" begin-trim) :void (nurb :pointer)) -(defcfun ("gluBuild1DMipmaps" build-1d-mipmaps) gl:int (target gl:enum) (internalFormat gl:int) (width gl:sizei) (format gl:enum) (type gl:enum) (data :pointer)) -(defcfun ("gluBuild2DMipmaps" build-2d-mipmaps) gl:int (target gl:enum) (internalFormat gl:int) (width gl:sizei) (height gl:sizei) (format gl:enum) (type gl:enum) (data :pointer)) -(defcfun ("gluCylinder" cylinder) :void (quad :pointer) (base gl:double) (top gl:double) (height gl:double) (slices gl:int) (stacks gl:int)) +(defcfun ("gluBuild1DMipmaps" build-1d-mipmaps) int (target enum) (internalFormat int) (width sizei) (format enum) (type enum) (data :pointer)) +(defcfun ("gluBuild2DMipmaps" build-2d-mipmaps) int (target enum) (internalFormat int) (width sizei) (height sizei) (format enum) (type enum) (data :pointer)) +(defcfun ("gluCylinder" cylinder) :void (quad :pointer) (base double) (top double) (height double) (slices int) (stacks int)) (defcfun ("gluDeleteNurbsRenderer" delete-nurbs-renderer) :void (nurb :pointer)) (defcfun ("gluDeleteQuadric" delete-quadric) :void (quad :pointer)) -(defcfun ("gluDisk" disk) :void (quad :pointer) (inner gl:double) (outer gl:double) (slices gl:int) (loops gl:int)) +(defcfun ("gluDisk" disk) :void (quad :pointer) (inner double) (outer double) (slices int) (loops int)) (defcfun ("gluEndCurve" end-curve) :void (nurb :pointer)) (defcfun ("gluEndSurface" end-surface) :void (nurb :pointer)) (defcfun ("gluEndTrim" end-trim) :void (nurb :pointer)) -(defcfun ("gluErrorString" error-string) :pointer (error gl:enum)) -(defcfun ("gluGetNurbsProperty" get-nurbs-property) :void (nurb :pointer) (property gl:enum) (data :pointer)) +(defcfun ("gluErrorString" error-string) :pointer (error enum)) +(defcfun ("gluGetNurbsProperty" get-nurbs-property) :void (nurb :pointer) (property enum) (data :pointer)) (defcfun ("gluLoadSamplingMatrices" load-sampling-matrices) :void (nurb :pointer) (model :pointer) (perspective :pointer) (view :pointer)) -(defcfun ("gluLookAt" look-at) :void (eyeX gl:double) (eyeY gl:double) (eyeZ gl:double) (centerX gl:double) (centerY gl:double) (centerZ gl:double) (upX gl:double) (upY gl:double) (upZ gl:double)) +(defcfun ("gluLookAt" look-at) :void (eyeX double) (eyeY double) (eyeZ double) (centerX double) (centerY double) (centerZ double) (upX double) (upY double) (upZ double)) (defcfun ("gluNewNurbsRenderer" new-nurbs-renderer) :pointer ) (defcfun ("gluNewQuadric" new-quadric) :pointer ) -(defcfun ("gluNurbsCurve" nurbs-curve) :void (nurb :pointer) (knotCount gl:int) (knots :pointer) (stride gl:int) (control :pointer) (order gl:int) (type gl:enum)) -(defcfun ("gluNurbsProperty" nurbs-property) :void (nurb :pointer) (property gl:enum) (value gl:float)) -(defcfun ("gluNurbsSurface" nurbs-surface) :void (nurb :pointer) (sKnotCount gl:int) (sKnots :pointer) (tKnotCount gl:int) (tKnots :pointer) (sStride gl:int) (tStride gl:int) (control :pointer) (sOrder gl:int) (tOrder gl:int) (type gl:enum)) -(defcfun ("gluOrtho2D" ortho-2d) :void (left gl:double) (right gl:double) (bottom gl:double) (top gl:double)) -(defcfun ("gluPartialDisk" partial-disk) :void (quad :pointer) (inner gl:double) (outer gl:double) (slices gl:int) (loops gl:int) (start gl:double) (sweep gl:double)) -(defcfun ("gluPerspective" perspective) :void (fovy gl:double) (aspect gl:double) (zNear gl:double) (zFar gl:double)) -(defcfun ("gluPickMatrix" pick-matrix) :void (x gl:double) (y gl:double) (delX gl:double) (delY gl:double) (viewport :pointer)) -(defcfun ("gluProject" project) gl:int (objX gl:double) (objY gl:double) (objZ gl:double) (model :pointer) (proj :pointer) (view :pointer) (winX :pointer) (winY :pointer) (winZ :pointer)) -(defcfun ("gluPwlCurve" pwl-curve) :void (nurb :pointer) (count gl:int) (data :pointer) (stride gl:int) (type gl:enum)) -(defcfun ("gluQuadricCallback" quadric-callback) :void (quad :pointer) (which gl:enum) (CallBackFunc :pointer)) -(defcfun ("gluQuadricDrawStyle" quadric-draw-style) :void (quad :pointer) (draw gl:enum)) -(defcfun ("gluQuadricNormals" quadric-normals) :void (quad :pointer) (normal gl:enum)) -(defcfun ("gluQuadricOrientation" quadric-orientation) :void (quad :pointer) (orientation gl:enum)) -(defcfun ("gluQuadricTexture" quadric-texture) :void (quad :pointer) (texture gl:boolean)) -(defcfun ("gluSphere" sphere) :void (quad :pointer) (radius gl:double) (slices gl:int) (stacks gl:int)) -(defcfun ("gluUnProject" un-project) gl:int (winX gl:double) (winY gl:double) (winZ gl:double) (model :pointer) (proj :pointer) (view :pointer) (objX :pointer) (objY :pointer) (objZ :pointer)) +(defcfun ("gluNurbsCurve" nurbs-curve) :void (nurb :pointer) (knotCount int) (knots :pointer) (stride int) (control :pointer) (order int) (type enum)) +(defcfun ("gluNurbsProperty" nurbs-property) :void (nurb :pointer) (property enum) (value float)) +(defcfun ("gluNurbsSurface" nurbs-surface) :void (nurb :pointer) (sKnotCount int) (sKnots :pointer) (tKnotCount int) (tKnots :pointer) (sStride int) (tStride int) (control :pointer) (sOrder int) (tOrder int) (type enum)) +(defcfun ("gluOrtho2D" ortho-2d) :void (left double) (right double) (bottom double) (top double)) +(defcfun ("gluPartialDisk" partial-disk) :void (quad :pointer) (inner double) (outer double) (slices int) (loops int) (start double) (sweep double)) +(defcfun ("gluPerspective" perspective) :void (fovy double) (aspect double) (zNear double) (zFar double)) +(defcfun ("gluPickMatrix" pick-matrix) :void (x double) (y double) (delX double) (delY double) (viewport :pointer)) +(defcfun ("gluProject" project) int (objX double) (objY double) (objZ double) (model :pointer) (proj :pointer) (view :pointer) (winX :pointer) (winY :pointer) (winZ :pointer)) +(defcfun ("gluPwlCurve" pwl-curve) :void (nurb :pointer) (count int) (data :pointer) (stride int) (type enum)) +(defcfun ("gluQuadricCallback" quadric-callback) :void (quad :pointer) (which enum) (CallBackFunc :pointer)) +(defcfun ("gluQuadricDrawStyle" quadric-draw-style) :void (quad :pointer) (draw enum)) +(defcfun ("gluQuadricNormals" quadric-normals) :void (quad :pointer) (normal enum)) +(defcfun ("gluQuadricOrientation" quadric-orientation) :void (quad :pointer) (orientation enum)) +(defcfun ("gluQuadricTexture" quadric-texture) :void (quad :pointer) (texture boolean)) +(defcfun ("gluSphere" sphere) :void (quad :pointer) (radius double) (slices int) (stacks int)) +(defcfun ("gluUnProject" un-project) int (winX double) (winY double) (winZ double) (model :pointer) (proj :pointer) (view :pointer) (objX :pointer) (objY :pointer) (objZ :pointer)) diff --git a/lib/opengl-extensions.lisp b/lib/opengl-extensions.lisp index 93b25fd..459add4 100644 --- a/lib/opengl-extensions.lisp +++ b/lib/opengl-extensions.lisp @@ -1,4 +1,4 @@ -(defpackage #:opengl-extensions +(defpackage #:cl-glfw-opengl-extensions (:nicknames #:gl-ext) (:use #:cl) (:export #:scan-available-extensions #:available-extensions #:extension-available-p #:load-extension)) diff --git a/lib/opengl-library.lisp b/lib/opengl-library.lisp new file mode 100644 index 0000000..c0b9609 --- /dev/null +++ b/lib/opengl-library.lisp @@ -0,0 +1,11 @@ +(in-package #:cl-glfw-opengl) + +(cffi:load-foreign-library '(:or (:framework "OpenGL") + "opengl32.dll" + (:default "libGL") + (:default "opengl") + (:default "opengl32") + (:default "GL") + (:default "gl") + (:default "libOpenGL") + (:default "OpenGL"))) \ No newline at end of file diff --git a/lib/opengl-package.lisp b/lib/opengl-package.lisp index 03d93a8..b8380c1 100644 --- a/lib/opengl-package.lisp +++ b/lib/opengl-package.lisp @@ -1,8 +1,7 @@ - (defpackage #:cl-glfw-opengl - (:use #:cffi #:cl) + (:use #:cffi #:cl #:cl-glfw-types #:cl-glfw-scaffolding) (:nicknames #:gl #:opengl) - (:shadow #:boolean #:byte #:float #:char #:string) + (:shadowing-import-from #:cl-glfw-types #:boolean #:byte #:float #:char #:string) (:export #:enum #:boolean #:bitfield #:byte #:short #:int #:sizei #:ubyte #:ushort #:uint #:float #:clampf #:double #:clampd #:void #:uint64 #:int64 @@ -4526,6 +4525,4 @@ convolution-parameter-f-ext convolution-filter-2d-ext convolution-filter-1d-ext blend-equation-ext -blend-color-ext )) - -(in-package #:cl-glfw-opengl) +blend-color-ext)) diff --git a/lib/opengl-type-map.lisp b/lib/opengl-type-map.lisp new file mode 100644 index 0000000..501c8bc --- /dev/null +++ b/lib/opengl-type-map.lisp @@ -0,0 +1,126 @@ +(in-package #:cl-glfw-opengl) + +(setf *type-map* + '(|AccumOp| cl-glfw-opengl:enum |AlphaFunction| cl-glfw-opengl:enum |AttribMask| cl-glfw-opengl:bitfield + |BeginMode| cl-glfw-opengl:enum |BinormalPointerTypeEXT| cl-glfw-opengl:enum + |BlendEquationMode| cl-glfw-opengl:enum |BlendEquationModeEXT| cl-glfw-opengl:enum + |BlendFuncSeparateParameterEXT| cl-glfw-opengl:enum |BlendingFactorDest| cl-glfw-opengl:enum + |BlendingFactorSrc| cl-glfw-opengl:enum |Boolean| cl-glfw-opengl:boolean |BooleanPointer| + :pointer |Char| cl-glfw-opengl:char |CharPointer| :pointer |CheckedFloat32| + cl-glfw-opengl:float |CheckedInt32| cl-glfw-opengl:int |ClampColorTargetARB| cl-glfw-opengl:enum + |ClampColorModeARB| cl-glfw-opengl:enum |ClampedColorF| cl-glfw-opengl:clampf |ClampedFloat32| + cl-glfw-opengl:clampf |ClampedFloat64| cl-glfw-opengl:clampd |ClampedStencilValue| cl-glfw-opengl:int + |ClearBufferMask| cl-glfw-opengl:bitfield |ClientAttribMask| cl-glfw-opengl:bitfield + |ClipPlaneName| cl-glfw-opengl:enum |ColorB| cl-glfw-opengl:byte |ColorD| cl-glfw-opengl:double + |ColorF| cl-glfw-opengl:float |ColorI| cl-glfw-opengl:int |ColorIndexValueD| cl-glfw-opengl:double + |ColorIndexValueF| cl-glfw-opengl:float |ColorIndexValueI| cl-glfw-opengl:int + |ColorIndexValueS| cl-glfw-opengl:short |ColorIndexValueUB| cl-glfw-opengl:ubyte + |ColorMaterialParameter| cl-glfw-opengl:enum |ColorPointerType| cl-glfw-opengl:enum |ColorS| + cl-glfw-opengl:short |ColorTableParameterPName| cl-glfw-opengl:enum + |ColorTableParameterPNameSGI| cl-glfw-opengl:enum |ColorTableTarget| cl-glfw-opengl:enum + |ColorTableTargetSGI| cl-glfw-opengl:enum |ColorUB| cl-glfw-opengl:ubyte |ColorUI| cl-glfw-opengl:uint + |ColorUS| cl-glfw-opengl:ushort |CombinerBiasNV| cl-glfw-opengl:enum + |CombinerComponentUsageNV| cl-glfw-opengl:enum |CombinerMappingNV| cl-glfw-opengl:enum + |CombinerParameterNV| cl-glfw-opengl:enum |CombinerPortionNV| cl-glfw-opengl:enum + |CombinerRegisterNV| cl-glfw-opengl:enum |CombinerScaleNV| cl-glfw-opengl:enum + |CombinerStageNV| cl-glfw-opengl:enum |CombinerVariableNV| cl-glfw-opengl:enum + |CompressedTextureARB| cl-glfw-opengl:void |ControlPointNV| cl-glfw-opengl:void + |ControlPointTypeNV| cl-glfw-opengl:enum |ConvolutionParameter| cl-glfw-opengl:enum + |ConvolutionParameterEXT| cl-glfw-opengl:enum |ConvolutionTarget| cl-glfw-opengl:enum + |ConvolutionTargetEXT| cl-glfw-opengl:enum |CoordD| cl-glfw-opengl:double |CoordF| + cl-glfw-opengl:float |CoordI| cl-glfw-opengl:int |CoordS| cl-glfw-opengl:short |CullFaceMode| + cl-glfw-opengl:enum |CullParameterEXT| cl-glfw-opengl:enum |DepthFunction| cl-glfw-opengl:enum + |DrawBufferMode| cl-glfw-opengl:enum |DrawElementsType| cl-glfw-opengl:enum + |ElementPointerTypeATI| cl-glfw-opengl:enum |EnableCap| cl-glfw-opengl:enum |ErrorCode| + cl-glfw-opengl:enum |EvalMapsModeNV| cl-glfw-opengl:enum |EvalTargetNV| cl-glfw-opengl:enum + |FeedbackElement| cl-glfw-opengl:float |FeedbackType| cl-glfw-opengl:enum |FenceNV| + cl-glfw-opengl:uint |FenceConditionNV| cl-glfw-opengl:enum |FenceParameterNameNV| cl-glfw-opengl:enum + |FfdMaskSGIX| cl-glfw-opengl:bitfield |FfdTargetSGIX| cl-glfw-opengl:enum |Float32| + cl-glfw-opengl:float |Float32Pointer| :pointer |Float64| cl-glfw-opengl:double + |Float64Pointer| :pointer |FogParameter| cl-glfw-opengl:enum |FogPointerTypeEXT| + cl-glfw-opengl:enum |FogPointerTypeIBM| cl-glfw-opengl:enum |FragmentLightModelParameterSGIX| + cl-glfw-opengl:enum |FragmentLightNameSGIX| cl-glfw-opengl:enum |FragmentLightParameterSGIX| + cl-glfw-opengl:enum |FramebufferAttachment| cl-glfw-opengl:enum |FramebufferTarget| + cl-glfw-opengl:enum |FrontFaceDirection| cl-glfw-opengl:enum |FunctionPointer| :pointer + |GetColorTableParameterPName| cl-glfw-opengl:enum |GetColorTableParameterPNameSGI| + cl-glfw-opengl:enum |GetConvolutionParameterPName| cl-glfw-opengl:enum + |GetHistogramParameterPName| cl-glfw-opengl:enum |GetHistogramParameterPNameEXT| + cl-glfw-opengl:enum |GetMapQuery| cl-glfw-opengl:enum |GetMinmaxParameterPName| cl-glfw-opengl:enum + |GetMinmaxParameterPNameEXT| cl-glfw-opengl:enum |GetPName| cl-glfw-opengl:enum + |GetPointervPName| cl-glfw-opengl:enum |GetTextureParameter| cl-glfw-opengl:enum |HintMode| + cl-glfw-opengl:enum |HintTarget| cl-glfw-opengl:enum |HintTargetPGI| cl-glfw-opengl:enum + |HistogramTarget| cl-glfw-opengl:enum |HistogramTargetEXT| cl-glfw-opengl:enum + |IglooFunctionSelectSGIX| cl-glfw-opengl:enum |IglooParameterSGIX| cl-glfw-opengl:void + |ImageTransformPNameHP| cl-glfw-opengl:enum |ImageTransformTargetHP| cl-glfw-opengl:enum + |IndexFunctionEXT| cl-glfw-opengl:enum |IndexMaterialParameterEXT| cl-glfw-opengl:enum + |IndexPointerType| cl-glfw-opengl:enum |Int16| cl-glfw-opengl:short |Int32| cl-glfw-opengl:int |Int8| + cl-glfw-opengl:byte |InterleavedArrayFormat| cl-glfw-opengl:enum |LightEnvParameterSGIX| + cl-glfw-opengl:enum |LightModelParameter| cl-glfw-opengl:enum |LightName| cl-glfw-opengl:enum + |LightParameter| cl-glfw-opengl:enum |LightTextureModeEXT| cl-glfw-opengl:enum + |LightTexturePNameEXT| cl-glfw-opengl:enum |LineStipple| cl-glfw-opengl:ushort |List| + cl-glfw-opengl:uint |ListMode| cl-glfw-opengl:enum |ListNameType| cl-glfw-opengl:enum + |ListParameterName| cl-glfw-opengl:enum |LogicOp| cl-glfw-opengl:enum |MapAttribParameterNV| + cl-glfw-opengl:enum |MapParameterNV| cl-glfw-opengl:enum |MapTarget| cl-glfw-opengl:enum |MapTargetNV| + cl-glfw-opengl:enum |MapTypeNV| cl-glfw-opengl:enum |MaskedColorIndexValueF| cl-glfw-opengl:float + |MaskedColorIndexValueI| cl-glfw-opengl:uint |MaskedStencilValue| cl-glfw-opengl:uint + |MaterialFace| cl-glfw-opengl:enum |MaterialParameter| cl-glfw-opengl:enum + |MatrixIndexPointerTypeARB| cl-glfw-opengl:enum |MatrixMode| cl-glfw-opengl:enum + |MatrixTransformNV| cl-glfw-opengl:enum |MeshMode1| cl-glfw-opengl:enum |MeshMode2| + cl-glfw-opengl:enum |MinmaxTarget| cl-glfw-opengl:enum |MinmaxTargetEXT| cl-glfw-opengl:enum + |NormalPointerType| cl-glfw-opengl:enum |NurbsCallback| cl-glfw-opengl:enum |NurbsObj| + :pointer |NurbsProperty| cl-glfw-opengl:enum |NurbsTrim| cl-glfw-opengl:enum + |OcclusionQueryParameterNameNV| cl-glfw-opengl:enum |PixelCopyType| cl-glfw-opengl:enum + |PixelFormat| cl-glfw-opengl:enum |PixelInternalFormat| cl-glfw-opengl:enum |PixelMap| + cl-glfw-opengl:enum |PixelStoreParameter| cl-glfw-opengl:enum |PixelTexGenModeSGIX| + cl-glfw-opengl:enum |PixelTexGenParameterNameSGIS| cl-glfw-opengl:enum + |PixelTransferParameter| cl-glfw-opengl:enum |PixelTransformPNameEXT| cl-glfw-opengl:enum + |PixelTransformTargetEXT| cl-glfw-opengl:enum |PixelType| cl-glfw-opengl:enum + |PointParameterNameARB| cl-glfw-opengl:enum |PolygonMode| cl-glfw-opengl:enum |ProgramNV| + cl-glfw-opengl:uint |ProgramCharacterNV| cl-glfw-opengl:ubyte |ProgramParameterNV| cl-glfw-opengl:enum + |ProgramParameterPName| cl-glfw-opengl:enum |QuadricCallback| cl-glfw-opengl:enum + |QuadricDrawStyle| cl-glfw-opengl:enum |QuadricNormal| cl-glfw-opengl:enum |QuadricObj| + :pointer |QuadricOrientation| cl-glfw-opengl:enum |ReadBufferMode| cl-glfw-opengl:enum + |RenderbufferTarget| cl-glfw-opengl:enum |RenderingMode| cl-glfw-opengl:enum + |ReplacementCodeSUN| cl-glfw-opengl:uint |ReplacementCodeTypeSUN| cl-glfw-opengl:enum + |SamplePassARB| cl-glfw-opengl:enum |SamplePatternEXT| cl-glfw-opengl:enum |SamplePatternSGIS| + cl-glfw-opengl:enum |SecondaryColorPointerTypeIBM| cl-glfw-opengl:enum |SelectName| + cl-glfw-opengl:uint |SeparableTarget| cl-glfw-opengl:enum |SeparableTargetEXT| cl-glfw-opengl:enum + |ShadingModel| cl-glfw-opengl:enum |SizeI| cl-glfw-opengl:sizei |SpriteParameterNameSGIX| + cl-glfw-opengl:enum |StencilFunction| cl-glfw-opengl:enum |StencilFaceDirection| cl-glfw-opengl:enum + |StencilOp| cl-glfw-opengl:enum |StencilValue| cl-glfw-opengl:int |String| cl-glfw-opengl:string + |StringName| cl-glfw-opengl:enum |TangentPointerTypeEXT| cl-glfw-opengl:enum |TessCallback| + cl-glfw-opengl:enum |TessContour| cl-glfw-opengl:enum |TessProperty| cl-glfw-opengl:enum + |TesselatorObj| :pointer |TexCoordPointerType| cl-glfw-opengl:enum |Texture| + cl-glfw-opengl:uint |TextureComponentCount| cl-glfw-opengl:int |TextureCoordName| cl-glfw-opengl:enum + |TextureEnvParameter| cl-glfw-opengl:enum |TextureEnvTarget| cl-glfw-opengl:enum + |TextureFilterSGIS| cl-glfw-opengl:enum |TextureGenParameter| cl-glfw-opengl:enum + |TextureNormalModeEXT| cl-glfw-opengl:enum |TextureParameterName| cl-glfw-opengl:enum + |TextureTarget| cl-glfw-opengl:enum |TextureUnit| cl-glfw-opengl:enum |UInt16| cl-glfw-opengl:ushort + |UInt32| cl-glfw-opengl:uint |UInt8| cl-glfw-opengl:ubyte |VertexAttribEnum| cl-glfw-opengl:enum + |VertexAttribEnumNV| cl-glfw-opengl:enum |VertexAttribPointerTypeNV| cl-glfw-opengl:enum + |VertexPointerType| cl-glfw-opengl:enum |VertexWeightPointerTypeEXT| cl-glfw-opengl:enum + |Void| cl-glfw-opengl:void |VoidPointer| :pointer |ConstVoidPointer| :pointer + |WeightPointerTypeARB| cl-glfw-opengl:enum |WinCoord| cl-glfw-opengl:int |void| :void + |ArrayObjectPNameATI| cl-glfw-opengl:enum |ArrayObjectUsageATI| cl-glfw-opengl:enum + |ConstFloat32| cl-glfw-opengl:float |ConstInt32| cl-glfw-opengl:int |ConstUInt32| cl-glfw-opengl:uint + |ConstVoid| cl-glfw-opengl:void |DataTypeEXT| cl-glfw-opengl:enum |FragmentOpATI| cl-glfw-opengl:enum + |GetTexBumpParameterATI| cl-glfw-opengl:enum |GetVariantValueEXT| cl-glfw-opengl:enum + |ParameterRangeEXT| cl-glfw-opengl:enum |PreserveModeATI| cl-glfw-opengl:enum + |ProgramFormatARB| cl-glfw-opengl:enum |ProgramTargetARB| cl-glfw-opengl:enum |ProgramTarget| + cl-glfw-opengl:enum |ProgramPropertyARB| cl-glfw-opengl:enum |ProgramStringPropertyARB| + cl-glfw-opengl:enum |ScalarType| cl-glfw-opengl:enum |SwizzleOpATI| cl-glfw-opengl:enum + |TexBumpParameterATI| cl-glfw-opengl:enum |VariantCapEXT| cl-glfw-opengl:enum + |VertexAttribPointerPropertyARB| cl-glfw-opengl:enum |VertexAttribPointerTypeARB| + cl-glfw-opengl:enum |VertexAttribPropertyARB| cl-glfw-opengl:enum |VertexShaderCoordOutEXT| + cl-glfw-opengl:enum |VertexShaderOpEXT| cl-glfw-opengl:enum |VertexShaderParameterEXT| + cl-glfw-opengl:enum |VertexShaderStorageTypeEXT| cl-glfw-opengl:enum + |VertexShaderTextureUnitParameter| cl-glfw-opengl:enum |VertexShaderWriteMaskEXT| + cl-glfw-opengl:enum |VertexStreamATI| cl-glfw-opengl:enum |PNTrianglesPNameATI| cl-glfw-opengl:enum + |BufferOffset| cl-glfw-opengl:intptr |BufferSize| cl-glfw-opengl:sizeiptr |BufferAccessARB| + cl-glfw-opengl:enum |BufferOffsetARB| cl-glfw-opengl:intptr |BufferPNameARB| cl-glfw-opengl:enum + |BufferPointerNameARB| cl-glfw-opengl:enum |BufferSizeARB| cl-glfw-opengl:sizeiptr + |BufferTargetARB| cl-glfw-opengl:enum |BufferUsageARB| cl-glfw-opengl:enum |ObjectTypeAPPLE| + cl-glfw-opengl:enum |VertexArrayPNameAPPLE| cl-glfw-opengl:enum |DrawBufferModeATI| + cl-glfw-opengl:enum |Half16NV| cl-glfw-opengl:half |PixelDataRangeTargetNV| cl-glfw-opengl:enum + |GLenum| cl-glfw-opengl:enum |handleARB| cl-glfw-opengl:handle |charARB| cl-glfw-opengl:char + |charPointerARB| :pointer |Int64EXT| cl-glfw-opengl:int64 |UInt64EXT| cl-glfw-opengl:uint64)) \ No newline at end of file diff --git a/lib/opengl-types.lisp b/lib/opengl-types.lisp deleted file mode 100644 index f4e38e6..0000000 --- a/lib/opengl-types.lisp +++ /dev/null @@ -1,343 +0,0 @@ - -(in-package #:cl-glfw-opengl) - -(cffi:load-foreign-library '(:or (:framework "OpenGL") - "opengl32.dll" - (:default "libGL") - (:default "opengl") - (:default "opengl32") - (:default "GL") - (:default "gl") - (:default "libOpenGL") - (:default "OpenGL"))) - -;; TYPES - -(defctype enum :uint32) -(defctype boolean :uint8) -(defctype bitfield :uint32) -(defctype byte :int8) -(defctype short :int16) -(defctype int :int32) -(defctype sizei :int32) -(defctype ubyte :uint8) -(defctype ushort :uint16) -(defctype uint :uint32) -(defctype float :float) -(defctype clampf :float) -(defctype double :double) -(defctype clampd :double) -(defctype void :void) - -#-cffi-features:no-long-long -(defctype uint64 :uint64) -#-cffi-features:no-long-long -(defctype int64 :int64) - -(defctype intptr #.(find-symbol (format nil "INT~d" (* 8 (cffi:foreign-type-size :pointer))) (find-package '#:keyword))) -(defctype sizeiptr #.(find-symbol (format nil "INT~d" (* 8 (cffi:foreign-type-size :pointer))) (find-package '#:keyword))) - -(defctype handle :unsigned-int) - -(defctype char :char) - -(defctype string :string) - -(defctype half :unsigned-short) ; this is how glext.h defines it anyway - -(defmethod cffi:expand-to-foreign (value (type (eql 'boolean))) - `(if ,value gl:+true+ gl:+false+)) - -(defmethod cffi:expand-from-foreign (value (type (eql 'boolean))) - `(not (= ,value gl:+false+))) - -(defmethod cffi:expand-to-foreign (value (type (eql 'clampf))) - `(coerce ,value 'single-float)) - -(defmethod cffi:expand-to-foreign (value (type (eql 'clampd))) - `(coerce ,value 'double-float)) - -(defmethod cffi:expand-to-foreign (value (type (eql 'float))) - `(coerce ,value 'single-float)) - -(defmethod cffi:expand-to-foreign (value (type (eql 'double))) - `(coerce ,value 'double-float)) - -(defparameter *type-maps* - '(|AccumOp| cl-glfw-opengl:enum |AlphaFunction| cl-glfw-opengl:enum |AttribMask| cl-glfw-opengl:bitfield - |BeginMode| cl-glfw-opengl:enum |BinormalPointerTypeEXT| cl-glfw-opengl:enum - |BlendEquationMode| cl-glfw-opengl:enum |BlendEquationModeEXT| cl-glfw-opengl:enum - |BlendFuncSeparateParameterEXT| cl-glfw-opengl:enum |BlendingFactorDest| cl-glfw-opengl:enum - |BlendingFactorSrc| cl-glfw-opengl:enum |Boolean| cl-glfw-opengl:boolean |BooleanPointer| - :pointer |Char| cl-glfw-opengl:char |CharPointer| :pointer |CheckedFloat32| - cl-glfw-opengl:float |CheckedInt32| cl-glfw-opengl:int |ClampColorTargetARB| cl-glfw-opengl:enum - |ClampColorModeARB| cl-glfw-opengl:enum |ClampedColorF| cl-glfw-opengl:clampf |ClampedFloat32| - cl-glfw-opengl:clampf |ClampedFloat64| cl-glfw-opengl:clampd |ClampedStencilValue| cl-glfw-opengl:int - |ClearBufferMask| cl-glfw-opengl:bitfield |ClientAttribMask| cl-glfw-opengl:bitfield - |ClipPlaneName| cl-glfw-opengl:enum |ColorB| cl-glfw-opengl:byte |ColorD| cl-glfw-opengl:double - |ColorF| cl-glfw-opengl:float |ColorI| cl-glfw-opengl:int |ColorIndexValueD| cl-glfw-opengl:double - |ColorIndexValueF| cl-glfw-opengl:float |ColorIndexValueI| cl-glfw-opengl:int - |ColorIndexValueS| cl-glfw-opengl:short |ColorIndexValueUB| cl-glfw-opengl:ubyte - |ColorMaterialParameter| cl-glfw-opengl:enum |ColorPointerType| cl-glfw-opengl:enum |ColorS| - cl-glfw-opengl:short |ColorTableParameterPName| cl-glfw-opengl:enum - |ColorTableParameterPNameSGI| cl-glfw-opengl:enum |ColorTableTarget| cl-glfw-opengl:enum - |ColorTableTargetSGI| cl-glfw-opengl:enum |ColorUB| cl-glfw-opengl:ubyte |ColorUI| cl-glfw-opengl:uint - |ColorUS| cl-glfw-opengl:ushort |CombinerBiasNV| cl-glfw-opengl:enum - |CombinerComponentUsageNV| cl-glfw-opengl:enum |CombinerMappingNV| cl-glfw-opengl:enum - |CombinerParameterNV| cl-glfw-opengl:enum |CombinerPortionNV| cl-glfw-opengl:enum - |CombinerRegisterNV| cl-glfw-opengl:enum |CombinerScaleNV| cl-glfw-opengl:enum - |CombinerStageNV| cl-glfw-opengl:enum |CombinerVariableNV| cl-glfw-opengl:enum - |CompressedTextureARB| cl-glfw-opengl:void |ControlPointNV| cl-glfw-opengl:void - |ControlPointTypeNV| cl-glfw-opengl:enum |ConvolutionParameter| cl-glfw-opengl:enum - |ConvolutionParameterEXT| cl-glfw-opengl:enum |ConvolutionTarget| cl-glfw-opengl:enum - |ConvolutionTargetEXT| cl-glfw-opengl:enum |CoordD| cl-glfw-opengl:double |CoordF| - cl-glfw-opengl:float |CoordI| cl-glfw-opengl:int |CoordS| cl-glfw-opengl:short |CullFaceMode| - cl-glfw-opengl:enum |CullParameterEXT| cl-glfw-opengl:enum |DepthFunction| cl-glfw-opengl:enum - |DrawBufferMode| cl-glfw-opengl:enum |DrawElementsType| cl-glfw-opengl:enum - |ElementPointerTypeATI| cl-glfw-opengl:enum |EnableCap| cl-glfw-opengl:enum |ErrorCode| - cl-glfw-opengl:enum |EvalMapsModeNV| cl-glfw-opengl:enum |EvalTargetNV| cl-glfw-opengl:enum - |FeedbackElement| cl-glfw-opengl:float |FeedbackType| cl-glfw-opengl:enum |FenceNV| - cl-glfw-opengl:uint |FenceConditionNV| cl-glfw-opengl:enum |FenceParameterNameNV| cl-glfw-opengl:enum - |FfdMaskSGIX| cl-glfw-opengl:bitfield |FfdTargetSGIX| cl-glfw-opengl:enum |Float32| - cl-glfw-opengl:float |Float32Pointer| :pointer |Float64| cl-glfw-opengl:double - |Float64Pointer| :pointer |FogParameter| cl-glfw-opengl:enum |FogPointerTypeEXT| - cl-glfw-opengl:enum |FogPointerTypeIBM| cl-glfw-opengl:enum |FragmentLightModelParameterSGIX| - cl-glfw-opengl:enum |FragmentLightNameSGIX| cl-glfw-opengl:enum |FragmentLightParameterSGIX| - cl-glfw-opengl:enum |FramebufferAttachment| cl-glfw-opengl:enum |FramebufferTarget| - cl-glfw-opengl:enum |FrontFaceDirection| cl-glfw-opengl:enum |FunctionPointer| :pointer - |GetColorTableParameterPName| cl-glfw-opengl:enum |GetColorTableParameterPNameSGI| - cl-glfw-opengl:enum |GetConvolutionParameterPName| cl-glfw-opengl:enum - |GetHistogramParameterPName| cl-glfw-opengl:enum |GetHistogramParameterPNameEXT| - cl-glfw-opengl:enum |GetMapQuery| cl-glfw-opengl:enum |GetMinmaxParameterPName| cl-glfw-opengl:enum - |GetMinmaxParameterPNameEXT| cl-glfw-opengl:enum |GetPName| cl-glfw-opengl:enum - |GetPointervPName| cl-glfw-opengl:enum |GetTextureParameter| cl-glfw-opengl:enum |HintMode| - cl-glfw-opengl:enum |HintTarget| cl-glfw-opengl:enum |HintTargetPGI| cl-glfw-opengl:enum - |HistogramTarget| cl-glfw-opengl:enum |HistogramTargetEXT| cl-glfw-opengl:enum - |IglooFunctionSelectSGIX| cl-glfw-opengl:enum |IglooParameterSGIX| cl-glfw-opengl:void - |ImageTransformPNameHP| cl-glfw-opengl:enum |ImageTransformTargetHP| cl-glfw-opengl:enum - |IndexFunctionEXT| cl-glfw-opengl:enum |IndexMaterialParameterEXT| cl-glfw-opengl:enum - |IndexPointerType| cl-glfw-opengl:enum |Int16| cl-glfw-opengl:short |Int32| cl-glfw-opengl:int |Int8| - cl-glfw-opengl:byte |InterleavedArrayFormat| cl-glfw-opengl:enum |LightEnvParameterSGIX| - cl-glfw-opengl:enum |LightModelParameter| cl-glfw-opengl:enum |LightName| cl-glfw-opengl:enum - |LightParameter| cl-glfw-opengl:enum |LightTextureModeEXT| cl-glfw-opengl:enum - |LightTexturePNameEXT| cl-glfw-opengl:enum |LineStipple| cl-glfw-opengl:ushort |List| - cl-glfw-opengl:uint |ListMode| cl-glfw-opengl:enum |ListNameType| cl-glfw-opengl:enum - |ListParameterName| cl-glfw-opengl:enum |LogicOp| cl-glfw-opengl:enum |MapAttribParameterNV| - cl-glfw-opengl:enum |MapParameterNV| cl-glfw-opengl:enum |MapTarget| cl-glfw-opengl:enum |MapTargetNV| - cl-glfw-opengl:enum |MapTypeNV| cl-glfw-opengl:enum |MaskedColorIndexValueF| cl-glfw-opengl:float - |MaskedColorIndexValueI| cl-glfw-opengl:uint |MaskedStencilValue| cl-glfw-opengl:uint - |MaterialFace| cl-glfw-opengl:enum |MaterialParameter| cl-glfw-opengl:enum - |MatrixIndexPointerTypeARB| cl-glfw-opengl:enum |MatrixMode| cl-glfw-opengl:enum - |MatrixTransformNV| cl-glfw-opengl:enum |MeshMode1| cl-glfw-opengl:enum |MeshMode2| - cl-glfw-opengl:enum |MinmaxTarget| cl-glfw-opengl:enum |MinmaxTargetEXT| cl-glfw-opengl:enum - |NormalPointerType| cl-glfw-opengl:enum |NurbsCallback| cl-glfw-opengl:enum |NurbsObj| - :pointer |NurbsProperty| cl-glfw-opengl:enum |NurbsTrim| cl-glfw-opengl:enum - |OcclusionQueryParameterNameNV| cl-glfw-opengl:enum |PixelCopyType| cl-glfw-opengl:enum - |PixelFormat| cl-glfw-opengl:enum |PixelInternalFormat| cl-glfw-opengl:enum |PixelMap| - cl-glfw-opengl:enum |PixelStoreParameter| cl-glfw-opengl:enum |PixelTexGenModeSGIX| - cl-glfw-opengl:enum |PixelTexGenParameterNameSGIS| cl-glfw-opengl:enum - |PixelTransferParameter| cl-glfw-opengl:enum |PixelTransformPNameEXT| cl-glfw-opengl:enum - |PixelTransformTargetEXT| cl-glfw-opengl:enum |PixelType| cl-glfw-opengl:enum - |PointParameterNameARB| cl-glfw-opengl:enum |PolygonMode| cl-glfw-opengl:enum |ProgramNV| - cl-glfw-opengl:uint |ProgramCharacterNV| cl-glfw-opengl:ubyte |ProgramParameterNV| cl-glfw-opengl:enum - |ProgramParameterPName| cl-glfw-opengl:enum |QuadricCallback| cl-glfw-opengl:enum - |QuadricDrawStyle| cl-glfw-opengl:enum |QuadricNormal| cl-glfw-opengl:enum |QuadricObj| - :pointer |QuadricOrientation| cl-glfw-opengl:enum |ReadBufferMode| cl-glfw-opengl:enum - |RenderbufferTarget| cl-glfw-opengl:enum |RenderingMode| cl-glfw-opengl:enum - |ReplacementCodeSUN| cl-glfw-opengl:uint |ReplacementCodeTypeSUN| cl-glfw-opengl:enum - |SamplePassARB| cl-glfw-opengl:enum |SamplePatternEXT| cl-glfw-opengl:enum |SamplePatternSGIS| - cl-glfw-opengl:enum |SecondaryColorPointerTypeIBM| cl-glfw-opengl:enum |SelectName| - cl-glfw-opengl:uint |SeparableTarget| cl-glfw-opengl:enum |SeparableTargetEXT| cl-glfw-opengl:enum - |ShadingModel| cl-glfw-opengl:enum |SizeI| cl-glfw-opengl:sizei |SpriteParameterNameSGIX| - cl-glfw-opengl:enum |StencilFunction| cl-glfw-opengl:enum |StencilFaceDirection| cl-glfw-opengl:enum - |StencilOp| cl-glfw-opengl:enum |StencilValue| cl-glfw-opengl:int |String| cl-glfw-opengl:string - |StringName| cl-glfw-opengl:enum |TangentPointerTypeEXT| cl-glfw-opengl:enum |TessCallback| - cl-glfw-opengl:enum |TessContour| cl-glfw-opengl:enum |TessProperty| cl-glfw-opengl:enum - |TesselatorObj| :pointer |TexCoordPointerType| cl-glfw-opengl:enum |Texture| - cl-glfw-opengl:uint |TextureComponentCount| cl-glfw-opengl:int |TextureCoordName| cl-glfw-opengl:enum - |TextureEnvParameter| cl-glfw-opengl:enum |TextureEnvTarget| cl-glfw-opengl:enum - |TextureFilterSGIS| cl-glfw-opengl:enum |TextureGenParameter| cl-glfw-opengl:enum - |TextureNormalModeEXT| cl-glfw-opengl:enum |TextureParameterName| cl-glfw-opengl:enum - |TextureTarget| cl-glfw-opengl:enum |TextureUnit| cl-glfw-opengl:enum |UInt16| cl-glfw-opengl:ushort - |UInt32| cl-glfw-opengl:uint |UInt8| cl-glfw-opengl:ubyte |VertexAttribEnum| cl-glfw-opengl:enum - |VertexAttribEnumNV| cl-glfw-opengl:enum |VertexAttribPointerTypeNV| cl-glfw-opengl:enum - |VertexPointerType| cl-glfw-opengl:enum |VertexWeightPointerTypeEXT| cl-glfw-opengl:enum - |Void| cl-glfw-opengl:void |VoidPointer| :pointer |ConstVoidPointer| :pointer - |WeightPointerTypeARB| cl-glfw-opengl:enum |WinCoord| cl-glfw-opengl:int |void| :void - |ArrayObjectPNameATI| cl-glfw-opengl:enum |ArrayObjectUsageATI| cl-glfw-opengl:enum - |ConstFloat32| cl-glfw-opengl:float |ConstInt32| cl-glfw-opengl:int |ConstUInt32| cl-glfw-opengl:uint - |ConstVoid| cl-glfw-opengl:void |DataTypeEXT| cl-glfw-opengl:enum |FragmentOpATI| cl-glfw-opengl:enum - |GetTexBumpParameterATI| cl-glfw-opengl:enum |GetVariantValueEXT| cl-glfw-opengl:enum - |ParameterRangeEXT| cl-glfw-opengl:enum |PreserveModeATI| cl-glfw-opengl:enum - |ProgramFormatARB| cl-glfw-opengl:enum |ProgramTargetARB| cl-glfw-opengl:enum |ProgramTarget| - cl-glfw-opengl:enum |ProgramPropertyARB| cl-glfw-opengl:enum |ProgramStringPropertyARB| - cl-glfw-opengl:enum |ScalarType| cl-glfw-opengl:enum |SwizzleOpATI| cl-glfw-opengl:enum - |TexBumpParameterATI| cl-glfw-opengl:enum |VariantCapEXT| cl-glfw-opengl:enum - |VertexAttribPointerPropertyARB| cl-glfw-opengl:enum |VertexAttribPointerTypeARB| - cl-glfw-opengl:enum |VertexAttribPropertyARB| cl-glfw-opengl:enum |VertexShaderCoordOutEXT| - cl-glfw-opengl:enum |VertexShaderOpEXT| cl-glfw-opengl:enum |VertexShaderParameterEXT| - cl-glfw-opengl:enum |VertexShaderStorageTypeEXT| cl-glfw-opengl:enum - |VertexShaderTextureUnitParameter| cl-glfw-opengl:enum |VertexShaderWriteMaskEXT| - cl-glfw-opengl:enum |VertexStreamATI| cl-glfw-opengl:enum |PNTrianglesPNameATI| cl-glfw-opengl:enum - |BufferOffset| cl-glfw-opengl:intptr |BufferSize| cl-glfw-opengl:sizeiptr |BufferAccessARB| - cl-glfw-opengl:enum |BufferOffsetARB| cl-glfw-opengl:intptr |BufferPNameARB| cl-glfw-opengl:enum - |BufferPointerNameARB| cl-glfw-opengl:enum |BufferSizeARB| cl-glfw-opengl:sizeiptr - |BufferTargetARB| cl-glfw-opengl:enum |BufferUsageARB| cl-glfw-opengl:enum |ObjectTypeAPPLE| - cl-glfw-opengl:enum |VertexArrayPNameAPPLE| cl-glfw-opengl:enum |DrawBufferModeATI| - cl-glfw-opengl:enum |Half16NV| cl-glfw-opengl:half |PixelDataRangeTargetNV| cl-glfw-opengl:enum - |GLenum| cl-glfw-opengl:enum |handleARB| cl-glfw-opengl:handle |charARB| cl-glfw-opengl:char - |charPointerARB| :pointer |Int64EXT| cl-glfw-opengl:int64 |UInt64EXT| cl-glfw-opengl:uint64)) - -(defun c-name (func-spec) (first (first func-spec))) -(defun lisp-name (func-spec) (second (first func-spec))) -(defun freturn (func-spec) (first (getf (rest func-spec) :return))) -(defun args (func-spec) (getf (rest func-spec) :args)) - -(defun deconstant (symbol) - (if (not (constantp symbol)) - symbol - (deconstant (intern (concatenate 'cl:string "_" (symbol-name symbol)))))) - -(defun final-arg-name (arg) - (deconstant (intern (string-upcase (symbol-name (getf arg :name)))))) - -(defun final-arg-type (arg) - (let ((type (getf *type-maps* (getf arg :type)))) - (cond - ((eql 'void type) :pointer) - ((getf arg :array) (if (eql type 'char) :string :pointer)) - (t type)))) - -(defun arg-element-type (arg) - (getf *type-maps* (getf arg :type))) - -(defun conc-symbols (&rest symbols) - (intern (apply #'concatenate (cons 'cl:string (mapcar #'symbol-name symbols))))) - -(defun array-wrappable-p (arg #|args|#) - (let ((resolved-type (getf *type-maps* (getf arg :type)))) - (and (getf arg :array) - ;; we must have a type, ie. not a void* pointer - (not (eql 'void resolved-type)) - (not (eql :void resolved-type)) - ;; opengl cannot retain this pointer, as we would destroy it after passing it - (not (getf arg :retained)) - ;; can we guarantee a size? - used to do this, but the app programmer must get it right himself for OpenGL anyway - ;; so doing it this way is consistent with the C-interface, though more dangerous - #| - (or (integerp (getf arg :size)) - (and (symbolp (getf arg :size)) - (find-if #'(lambda (other-arg) - (eql (getf arg :size) (final-arg-name other-arg))) - args)))|# - ;; our own hook - (not (getf arg :wrapped))))) - -(defun gl-function-definition (func-spec &optional (c-prefix "gl") (lisp-prefix '#:||)) - `(defcfun (,(concatenate 'cl:string c-prefix (c-name func-spec)) - ,(conc-symbols lisp-prefix (lisp-name func-spec))) - ,(getf *type-maps* (intern (freturn func-spec))) - ,@(mapcar #'(lambda (arg) (list (final-arg-name arg) (final-arg-type arg))) - (args func-spec)))) - -(defun gl-funcall-definition (func-spec fpointer) - `(foreign-funcall ,fpointer - ,@(mapcan #'(lambda (arg) - `(,(final-arg-type arg) ,(final-arg-name arg))) - (args func-spec)) - ,(getf *type-maps* (intern (freturn func-spec))))) - -(defun expand-a-wrapping (func-spec final-content) - (let* ((func-spec (copy-tree func-spec)) ; duplicate because we're not supposed to modify macro params - (args (args func-spec)) - (first-wrappable (position-if #'array-wrappable-p args))) - (if first-wrappable - (let* ((arg (elt (args func-spec) first-wrappable)) - (original-array-name (gensym (symbol-name (final-arg-name arg)))) - (array-name (final-arg-name arg))) - ;; set it wrapped by non-consingly attaching a wrapped property on the end - (nconc arg (list :wrapped t)) - `(if (and (typep ,array-name 'sequence) (not (stringp ,array-name))) - ;; the actual allocation - (let* ((,original-array-name ,array-name) - (,array-name (foreign-alloc ',(arg-element-type arg) - ;; we used to base it on the count of whatever the spec said - #|:count ,(getf arg :size)|# - ;; but now, we'll use the user's sequence size, or just their content - ,@(if (eql (getf arg :direction) :in) - `(:initial-contents ,original-array-name) - `(:count (length ,original-array-name)))))) - ;; (format t "Copying ~a elements of ~a: ~a into ~a~%" - ;; ,(getf arg :size) ',array-name ,original-array-name ,array-name) - (unwind-protect - (prog1 - #| as input values are set above, we don't use this now (and above is a prog1, it was prog2 before) - ;; custom coersion of input values, before call ; ; ; ; ; ; ; ; ; ; ; - ,(when (eql (getf arg :direction) :in) - `(cond - ((listp ,original-array-name) - (loop for i upfrom 0 for e in ,original-array-name - do (setf (mem-aref ,array-name ',(arg-element-type arg) i) e))) - ((vectorp ,original-array-name) - (loop for i upfrom 0 for e across ,original-array-name - do (setf (mem-aref ,array-name ',(arg-element-type arg) i) e))))) - |# - ;; recurse in case there are more - ,(expand-a-wrapping func-spec final-content) - ;; custom coersion of output values, after call - ,(when (eql (getf arg :direction) :out) - `(cond - ((listp ,original-array-name) - (do ((i 0 (1+ i)) - (ce ,original-array-name (cdr ce))) - ((not ce)) - #|((or (not ce) - (>= i ,(getf arg :size))))|# - (setf (car ce) - (mem-aref ,array-name ',(arg-element-type arg) i)))) - ((vectorp ,original-array-name) - (do ((i 0 (1+ i))) - ((>= i (length ,original-array-name))) - #|((or (>= i (length ,original-array-name)) - (>= i ,(getf arg :size))))|# - (setf (aref ,original-array-name i) - (mem-aref ,array-name ',(arg-element-type arg) i))))))) - (foreign-free ,array-name))) - ;; in the case the arg wasn't a sequence, pass it straight through - ,(expand-a-wrapping func-spec final-content))) - ;; in the case that there is no more wrapping to be done, emit the final content to start unwinding - final-content))) - -(defun wrapped-win32-gl-function-definition (func-spec) - `(let ((fpointer (foreign-funcall "wglGetProcAddress" - :string ,(concatenate 'cl:string "gl" (c-name func-spec)) - :pointer))) - ;; I know the CFFI guide recommends against holding pointers, but for extensions on win, - ;; function pointers are the only way to do it. I don't think the locations are compiled - ;; in-to the fasl files, as it's a top-level form. - (when (null-pointer-p fpointer) - (error 'simple-error "Error! Can't find function ~a" (first func-spec))) - (defun ,(lisp-name func-spec) - ,(mapcar #'(lambda (arg) (final-arg-name arg)) - (args func-spec)) - ;; if there is more than 0 wrappable arrays - ,(let ((args (args func-spec))) - (if (some #'array-wrappable-p args) - (expand-a-wrapping func-spec - (gl-funcall-definition func-spec 'fpointer)) - (gl-funcall-definition func-spec 'fpointer)))))) - -(defun wrapped-gl-function-definition (func-spec) - (let ((args (args func-spec))) - ;; if there is more than 0 wrappable arrays - (if (some #'array-wrappable-p args) - `(progn - ;; make an inlined function prefixed with % - (declaim (inline ,(conc-symbols '#:% (lisp-name func-spec)))) - ,(gl-function-definition func-spec "gl" '#:%) - ;; the exposed function with wrappings - (defun ,(lisp-name func-spec) ,(mapcar #'final-arg-name (args func-spec)) - ,(expand-a-wrapping func-spec - `(,(conc-symbols '#:% (lisp-name func-spec)) - ,@(mapcar #'final-arg-name (args func-spec)))))) - (gl-function-definition func-spec)))) diff --git a/lib/opengl.lisp b/lib/opengl.lisp index af56aad..dc2a083 100644 --- a/lib/opengl.lisp +++ b/lib/opengl.lisp @@ -1,14 +1,6 @@ (in-package #:cl-glfw-opengl) -(defmacro defglfun (func-spec) - (wrapped-gl-function-definition func-spec)) - -(defmacro defglextfun (func-spec) - #+win32 (wrapped-win32-gl-function-definition func-spec) - #-win32 (wrapped-gl-function-definition func-spec)) - - ;;;; Enumerations: AttribMask diff --git a/lib/scaffolding.lisp b/lib/scaffolding.lisp new file mode 100644 index 0000000..e8bbd90 --- /dev/null +++ b/lib/scaffolding.lisp @@ -0,0 +1,157 @@ +(defpackage #:cl-glfw-scaffolding + (:use #:cl #:cffi) + (:export #:defglfun #:defglextfun #:*type-map*)) +(in-package #:cl-glfw-scaffolding) + +(defparameter *type-map* nil) + +(defun c-name (func-spec) (first (first func-spec))) +(defun lisp-name (func-spec) (second (first func-spec))) +(defun freturn (func-spec) (first (getf (rest func-spec) :return))) +(defun args (func-spec) (getf (rest func-spec) :args)) + +(defun deconstant (symbol) + (if (not (constantp symbol)) + symbol + (deconstant (intern (concatenate 'cl:string "_" (symbol-name symbol)))))) + +(defun final-arg-name (arg) + (deconstant (intern (string-upcase (symbol-name (getf arg :name)))))) + + +(defun final-arg-type (arg) + (let ((type (getf *type-map* (getf arg :type)))) + (cond + ((equal "VOID" (symbol-name type)) :pointer) + ((getf arg :array) (if (equal (symbol-name type) "CHAR") :string :pointer)) + (t type)))) + +(defun arg-element-type (arg) + (getf *type-map* (getf arg :type))) + +(defun conc-symbols (&rest symbols) + (intern (apply #'concatenate (cons 'cl:string (mapcar #'symbol-name symbols))))) + +(defun array-wrappable-p (arg #|args|#) + (let ((resolved-type (getf *type-map* (getf arg :type)))) + (and (getf arg :array) + ;; we must have a type, ie. not a void* pointer + (not (equal "VOID" (symbol-name resolved-type))) + ;; opengl cannot retain this pointer, as we would destroy it after passing it + (not (getf arg :retained)) + ;; can we guarantee a size? - used to do this, but the app programmer must get it right himself for OpenGL anyway + ;; so doing it this way is consistent with the C-interface, though more dangerous + #| + (or (integerp (getf arg :size)) + (and (symbolp (getf arg :size)) + (find-if #'(lambda (other-arg) + (eql (getf arg :size) (final-arg-name other-arg))) + args)))|# + ;; our own hook + (not (getf arg :wrapped))))) + +(defun gl-function-definition (func-spec &optional (c-prefix "gl") (lisp-prefix '#:||)) + `(defcfun (,(concatenate 'cl:string c-prefix (c-name func-spec)) + ,(conc-symbols lisp-prefix (lisp-name func-spec))) + ,(getf *type-map* (intern (freturn func-spec))) + ,@(mapcar #'(lambda (arg) (list (final-arg-name arg) (final-arg-type arg))) + (args func-spec)))) + +(defun gl-funcall-definition (func-spec fpointer) + `(foreign-funcall ,fpointer + ,@(mapcan #'(lambda (arg) + `(,(final-arg-type arg) ,(final-arg-name arg))) + (args func-spec)) + ,(getf *type-map* (intern (freturn func-spec))))) + +(defun expand-a-wrapping (func-spec final-content) + (let* ((func-spec (copy-tree func-spec)) ; duplicate because we're not supposed to modify macro params + (args (args func-spec)) + (first-wrappable (position-if #'array-wrappable-p args))) + (if first-wrappable + (let* ((arg (elt (args func-spec) first-wrappable)) + (original-array-name (gensym (symbol-name (final-arg-name arg)))) + (array-name (final-arg-name arg))) + ;; set it wrapped by non-consingly attaching a wrapped property on the end + (nconc arg (list :wrapped t)) + `(if (and (typep ,array-name 'sequence) (not (stringp ,array-name))) + ;; the actual allocation + (let* ((,original-array-name ,array-name) + (,array-name (foreign-alloc ',(arg-element-type arg) + ;; we used to base it on the count of whatever the spec said + #|:count ,(getf arg :size)|# + ;; but now, we'll use the user's sequence size, or just their content + ,@(if (eql (getf arg :direction) :in) + `(:initial-contents ,original-array-name) + `(:count (length ,original-array-name)))))) + ;; (format t "Copying ~a elements of ~a: ~a into ~a~%" + ;; ,(getf arg :size) ',array-name ,original-array-name ,array-name) + (unwind-protect + (prog1 + ;; recurse in case there are more + ,(expand-a-wrapping func-spec final-content) + ;; custom coersion of output values, after call + ,(when (eql (getf arg :direction) :out) + `(cond + ((listp ,original-array-name) + (do ((i 0 (1+ i)) + (ce ,original-array-name (cdr ce))) + ((not ce)) + #|((or (not ce) + (>= i ,(getf arg :size))))|# + (setf (car ce) + (mem-aref ,array-name ',(arg-element-type arg) i)))) + ((vectorp ,original-array-name) + (do ((i 0 (1+ i))) + ((>= i (length ,original-array-name))) + #|((or (>= i (length ,original-array-name)) + (>= i ,(getf arg :size))))|# + (setf (aref ,original-array-name i) + (mem-aref ,array-name ',(arg-element-type arg) i))))))) + (foreign-free ,array-name))) + ;; in the case the arg wasn't a sequence, pass it straight through + ,(expand-a-wrapping func-spec final-content))) + ;; in the case that there is no more wrapping to be done, emit the final content to start unwinding + final-content))) + +(defun wrapped-win32-gl-function-definition (func-spec) + `(let ((fpointer (foreign-funcall "wglGetProcAddress" + :string ,(concatenate 'cl:string "gl" (c-name func-spec)) + :pointer))) + ;; I know the CFFI guide recommends against holding pointers, but for extensions on win, + ;; function pointers are the only way to do it. I don't think the locations are compiled + ;; in-to the fasl files, as it's a top-level form. + (when (null-pointer-p fpointer) + (error 'simple-error "Error! Can't find function ~a" (first func-spec))) + (defun ,(lisp-name func-spec) + ,(mapcar #'(lambda (arg) (final-arg-name arg)) + (args func-spec)) + ;; if there is more than 0 wrappable arrays + ,(let ((args (args func-spec))) + (if (some #'array-wrappable-p args) + (expand-a-wrapping func-spec + (gl-funcall-definition func-spec 'fpointer)) + (gl-funcall-definition func-spec 'fpointer)))))) + +(defun wrapped-gl-function-definition (func-spec) + (let ((args (args func-spec))) + ;; if there is more than 0 wrappable arrays + (if (some #'array-wrappable-p args) + `(progn + ;; make an inlined function prefixed with % + (declaim (inline ,(conc-symbols '#:% (lisp-name func-spec)))) + ,(gl-function-definition func-spec "gl" '#:%) + ;; the exposed function with wrappings + (defun ,(lisp-name func-spec) ,(mapcar #'final-arg-name (args func-spec)) + ,(expand-a-wrapping func-spec + `(,(conc-symbols '#:% (lisp-name func-spec)) + ,@(mapcar #'final-arg-name (args func-spec)))))) + (gl-function-definition func-spec)))) + +(defmacro defglfun (func-spec) + (wrapped-gl-function-definition func-spec)) + +(defmacro defglextfun (func-spec) + #+win32 (wrapped-win32-gl-function-definition func-spec) + #-win32 (wrapped-gl-function-definition func-spec)) + diff --git a/lib/types.lisp b/lib/types.lisp new file mode 100644 index 0000000..e5c87f4 --- /dev/null +++ b/lib/types.lisp @@ -0,0 +1,65 @@ +(defpackage #:cl-glfw-types + (:use #:cl #:cffi) + (:shadow #:boolean #:byte #:float #:char #:string) + (:export #:enum #:boolean #:bitfield #:byte #:short #:int #:sizei #:ubyte #:ushort #:uint + #:float #:clampf #:double #:clampd #:void #:uint64 #:int64 + #:intptr #:sizeiptr + #:handle + #:char #:string + #:half)) + +(in-package #:cl-glfw-types) + +(defctype enum :uint32) +(defctype boolean :uint8) +(defctype bitfield :uint32) +(defctype byte :int8) +(defctype short :int16) +(defctype int :int32) +(defctype sizei :int32) +(defctype ubyte :uint8) +(defctype ushort :uint16) +(defctype uint :uint32) +(defctype float :float) +(defctype clampf :float) +(defctype double :double) +(defctype clampd :double) +(defctype void :void) + +#-cffi-features:no-long-long +(defctype uint64 :uint64) +#-cffi-features:no-long-long +(defctype int64 :int64) + +;; Find a CFFI integer type the same foreign-size as a pointer +(defctype intptr #.(find-symbol (format nil "INT~d" (* 8 (cffi:foreign-type-size :pointer))) (find-package '#:keyword))) +(defctype sizeiptr #.(find-symbol (format nil "INT~d" (* 8 (cffi:foreign-type-size :pointer))) (find-package '#:keyword))) + +(defctype handle :unsigned-int) + +(defctype char :char) + +(defctype string :string) + +(defctype half :unsigned-short) ; this is how glext.h defines it anyway + +(defmethod cffi:expand-to-foreign (value (type (eql 'boolean))) + `(if ,value 1 0)) + +(defmethod cffi:expand-from-foreign (value (type (eql 'boolean))) + `(not (= ,value 0))) + +(defmethod cffi:expand-to-foreign (value (type (eql 'clampf))) + `(coerce ,value 'single-float)) + +(defmethod cffi:expand-to-foreign (value (type (eql 'clampd))) + `(coerce ,value 'double-float)) + +(defmethod cffi:expand-to-foreign (value (type (eql 'float))) + `(coerce ,value 'single-float)) + +(defmethod cffi:expand-to-foreign (value (type (eql 'double))) + `(coerce ,value 'double-float)) + +;; TODO: Maybe we can find/write a converter to a half? Does anyone want it? +;; TODO: Might we want converters to integer types? What would it be? round, or floor (or even ceil)? -- 2.11.4.GIT