]> gitweb.factorcode.org Git - factor.git/commitdiff
opengl.shaders: probably better to call the gl functions directly
authorBjörn Lindqvist <bjourne@gmail.com>
Wed, 31 Jan 2018 00:42:04 +0000 (01:42 +0100)
committerBjörn Lindqvist <bjourne@gmail.com>
Wed, 31 Jan 2018 00:42:04 +0000 (01:42 +0100)
basis/opengl/shaders/shaders-docs.factor
basis/opengl/shaders/shaders.factor
extra/gpu/shaders/shaders.factor

index 710ca8e76d6079e9c6248a0204a665cf38922117..3883d09cb5680b7a7508af75dc7d297b5960efb8 100644 (file)
@@ -1,4 +1,5 @@
-USING: help.markup help.syntax kernel quotations sequences strings ;
+USING: help.markup help.syntax kernel opengl.gl quotations sequences
+strings ;
 IN: opengl.shaders
 
 HELP: (gl-program)
@@ -12,7 +13,7 @@ HELP: (gl-program)
 
 HELP: <gl-shader>
 { $values { "source" "The GLSL source code to compile" } { "kind" "The kind of shader to compile, such as " { $snippet "GL_VERTEX_SHADER" } " or " { $snippet "GL_FRAGMENT_SHADER" } } { "shader" "a new " { $link gl-shader } } }
-{ $description "Tries to compile the given GLSL source into a shader object. The returned object can be checked for validity by " { $link check-gl-shader } " or " { $link gl-shader-ok? } ". Errors and warnings generated by the GLSL compiler will be collected in the info log, available from " { $link gl-shader-info-log } ".\n\nWhen the shader object is no longer needed, it should be deleted using " { $link delete-gl-shader } " or else be attached to a " { $link gl-program } " object deleted using " { $link delete-gl-program } "." } ;
+{ $description "Tries to compile the given GLSL source into a shader object. The returned object can be checked for validity by " { $link check-gl-shader } " or " { $link gl-shader-ok? } ". Errors and warnings generated by the GLSL compiler will be collected in the info log, available from " { $link gl-shader-info-log } ".\n\nWhen the shader object is no longer needed, it should be deleted using " { $link glDeleteShader } " or else be attached to a " { $link gl-program } " object deleted using " { $link delete-gl-program } "." } ;
 
 HELP: <vertex-shader>
 { $values { "source" "The GLSL source code to compile" } { "vertex-shader" "a new " { $link vertex-shader } } }
@@ -29,7 +30,7 @@ HELP: gl-shader
         { { $link gl-shader-ok? } " - Check whether a shader object compiled successfully" }
         { { $link check-gl-shader } " - Throw an error unless a shader object compiled successfully" }
         { { $link gl-shader-info-log } " - Retrieve the info log of messages generated by the GLSL compiler" }
-        { { $link delete-gl-shader } " - Invalidate a shader object" }
+        { { $link glDeleteShader } } " - Invalidate a shader object" }
     }
   "The derived predicate classes " { $link vertex-shader } " and " { $link fragment-shader } " are also defined for the two standard kinds of shader defined by the OpenGL specification." } ;
 
@@ -55,10 +56,6 @@ HELP: check-gl-shader
 { $values { "shader" "A " { $link gl-shader } " object" } }
 { $description "Throws an error containing the " { $link gl-shader-info-log } " for the shader object if it failed to compile. Otherwise, the shader object is left on the stack." } ;
 
-HELP: delete-gl-shader
-{ $values { "shader" "A " { $link gl-shader } " object" } }
-{ $description "Deletes the shader object, invalidating it and releasing any resources allocated for it by the OpenGL implementation." } ;
-
 HELP: gl-shader-info-log
 { $values { "shader" "A " { $link gl-shader } " object" } { "log" string } }
 { $description "Retrieves the info log for " { $snippet "shader" } ", including any errors or warnings generated in compiling the shader object." } ;
@@ -100,7 +97,7 @@ HELP: gl-program-info-log
 
 HELP: delete-gl-program
 { $values { "program" "A " { $link gl-program } " object" } }
-{ $description "Deletes the program object, invalidating it and releasing any resources allocated for it by the OpenGL implementation. Any attached " { $link gl-shader } "s are also deleted.\n\nIf the shader objects should be preserved, they should each be detached using " { $link detach-gl-program-shader } ". The program object can then be destroyed alone using " { $link delete-gl-program-only } "." } ;
+{ $description "Deletes the program object, invalidating it and releasing any resources allocated for it by the OpenGL implementation. Any attached " { $link gl-shader } "s are also deleted.\n\nIf the shader objects should be preserved, they should each be detached using " { $link glDetachShader } ". The program object can then be destroyed alone using " { $link glDeleteProgram } "." } ;
 
 HELP: with-gl-program
 { $values { "program" "A " { $link gl-program } " object" } { "quot" "A quotation with stack effect " { $snippet "( program -- )" } } }
index 4e6b0a7bb2c79fb2bc4c2c7d7897ab8cf386c61b..0c52028a318d4324ab0d38bbb38e1409e63b567e 100644 (file)
@@ -54,8 +54,6 @@ IN: opengl.shaders
 : check-gl-shader ( shader -- shader )
     dup gl-shader-ok? [ dup gl-shader-info-log throw ] unless ;
 
-: delete-gl-shader ( shader -- ) glDeleteShader ; inline
-
 PREDICATE: gl-shader < integer (gl-shader?) ;
 PREDICATE: vertex-shader < gl-shader (vertex-shader?) ;
 PREDICATE: fragment-shader < gl-shader (fragment-shader?) ;
@@ -110,23 +108,18 @@ PREDICATE: fragment-shader < gl-shader (fragment-shader?) ;
     over uint <c-array>
     [ glGetAttachedShaders ] keep [ zero? ] reject ;
 
-: delete-gl-program-only ( program -- )
-    glDeleteProgram ; inline
-
-: detach-gl-program-shader ( program shader -- )
-    glDetachShader ; inline
-
 : delete-gl-program ( program -- )
     dup gl-program-shaders [
-        2dup detach-gl-program-shader delete-gl-shader
-    ] each delete-gl-program-only ;
+        2dup glDetachShader glDeleteShader
+    ] each glDeleteProgram ;
 
 : with-gl-program ( program quot -- )
     over glUseProgram [ 0 glUseProgram ] [ ] cleanup ; inline
 
 PREDICATE: gl-program < integer (gl-program?) ;
 
-: <simple-gl-program> ( vertex-shader-source fragment-shader-source -- program )
+: <simple-gl-program> ( vertex-shader-source fragment-shader-source
+                        -- program )
     [ <vertex-shader> check-gl-shader ]
     [ <fragment-shader> check-gl-shader ] bi*
     2array <gl-program> check-gl-program ;
index 1ea5b1d31f1c9409ba90dd04b86b1cd1c9ff9990..0a07551161ecec3750bf9ca9bbd95c95dfb776cf 100755 (executable)
@@ -456,7 +456,7 @@ TUPLE: compile-shader-error shader log ;
 TUPLE: link-program-error program log ;
 
 : throw-compile-shader-error ( shader instance -- * )
-    [ dup ] dip [ gl-shader-info-log ] [ delete-gl-shader ] bi
+    [ dup ] dip [ gl-shader-info-log ] [ glDeleteShader ] bi
     replace-log-line-numbers compile-shader-error boa throw ;
 
 : throw-link-program-error ( program instance -- * )
@@ -501,7 +501,7 @@ DEFER: <shader-instance>
     pick word-directory prepend-path ;
 
 : become-shader-instance ( shader-instance new-shader-instance -- )
-    handle>> [ swap delete-gl-shader ] curry change-handle drop ;
+    handle>> [ swap glDeleteShader ] curry change-handle drop ;
 
 : refresh-shader-source ( shader -- )
     dup filename>>
@@ -509,7 +509,7 @@ DEFER: <shader-instance>
     [ drop ] if* ;
 
 : become-program-instance ( program-instance new-program-instance -- )
-    handle>> [ swap delete-gl-program-only ] curry change-handle drop ;
+    handle>> [ swap glDeleteProgram ] curry change-handle drop ;
 
 : reset-memos ( -- )
     \ uniform-index reset-memoized
@@ -625,11 +625,11 @@ SYNTAX: GLSL-PROGRAM:
     define-constant ;
 
 M: shader-instance dispose
-    [ dup valid-handle? [ delete-gl-shader ] [ drop ] if f ] change-handle
+    [ dup valid-handle? [ glDeleteShader ] [ drop ] if f ] change-handle
     [ world>> ] [ shader>> instances>> ] [ ] tri ?delete-at ;
 
 M: program-instance dispose
-    [ dup valid-handle? [ delete-gl-program-only ] [ drop ] if f ] change-handle
+    [ dup valid-handle? [ glDeleteProgram ] [ drop ] if f ] change-handle
     [ world>> ] [ program>> instances>> ] [ ] tri ?delete-at
     reset-memos ;