From 00446e4f83a219a81676bbe689753a662093f4ce Mon Sep 17 00:00:00 2001 From: David Botton Date: Thu, 11 Aug 2022 21:37:09 -0400 Subject: [PATCH] More work on webgl --- source/clog-webgl.lisp | 26 ++++++++++++++++++++++++++ tutorial/34-tutorial.lisp | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/source/clog-webgl.lisp b/source/clog-webgl.lisp index c177037..098bf35 100644 --- a/source/clog-webgl.lisp +++ b/source/clog-webgl.lisp @@ -78,7 +78,9 @@ (bind-attribute-location generic-function) (program-parameter generic-function) (attribute-location generic-function) + (uniform-location generic-function) (active-attribute generic-function) + (active-uniform generic-function) (program-info-log generic-function) (link-program generic-function) (use-program generic-function) @@ -620,10 +622,20 @@ For :GLENUM values")) (script-id obj) (script-id (gl obj)) glenum-param))) +(defgeneric attribute-location (clog-webgl-program name) + (:documentation "Returns the location of an attribute variable in clog-program")) + (defmethod attribute-location ((obj clog-webgl-program) name) (query (gl obj) (format nil "getAttribLocation(~A, '~A')" (script-id obj) name))) +(defgeneric uniform-location (clog-webgl-program name) + (:documentation "Returns the location of an uniform variable in clog-program")) + +(defmethod uniform-location ((obj clog-webgl-program) name) + (query (gl obj) (format nil "getUniformLocation(~A, '~A')" + (script-id obj) name))) + (defmethod program-info-log ((obj clog-webgl-program)) (query (gl obj) (format nil "getProgramInfoLog(~A)" (script-id obj)))) @@ -640,6 +652,20 @@ For :GLENUM values")) :connection-id (clog::connection-id obj) :html-id web-id))) +(defgeneric active-uniform (clog-webgl-program index) + (:documentation "Query about unknown uniforms")) + +(defmethod active-uniform ((obj clog-webgl-program) index) + (let ((web-id (clog-connection:generate-id))) + (js-execute obj (format nil "clog['~A']=~A.getActiveUniform(~A,~A)" + web-id + (script-id (gl obj)) (script-id obj) index)) + (make-instance 'clog-webgl-active-info + :connection-id (clog::connection-id obj) + :html-id web-id))) + +;; WebGLRenderingContext.getAttachedShaders() + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Methods - clog-webgl-program ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tutorial/34-tutorial.lisp b/tutorial/34-tutorial.lisp index 21a9971..f2c24bd 100644 --- a/tutorial/34-tutorial.lisp +++ b/tutorial/34-tutorial.lisp @@ -51,6 +51,10 @@ void main() { (let ((obj (active-attribute program n))) (format t "~A : Active Attribute - ~A ~A ~A" n (info-name obj) (info-size obj) (info-type obj)))) + (dotimes (n (parse-integer (program-parameter program :ACTIVE_UNIFORMS))) + (let ((obj (active-uniform program n))) + (format t "~A : Active Uniform - ~A ~A ~A" + n (info-name obj) (info-size obj) (info-type obj)))) (print (drawing-buffer-width gl)) (print (drawing-buffer-height gl)) (bind-buffer pos-buffer :ARRAY_BUFFER)