From 19d77c51930f04c714a1f58bd71f0f2d49259dc4 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Tue, 16 Jun 2009 18:14:22 -0500 Subject: [PATCH] let gl-error know about GL_INVALID_FRAMEBUFFER_OPERATION_EXT error. add helper word to link a GL program with named multiple render targets --- basis/opengl/opengl.factor | 3 ++- basis/opengl/shaders/shaders.factor | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/basis/opengl/opengl.factor b/basis/opengl/opengl.factor index 72ca8b8cdb..7d79516a2c 100644 --- a/basis/opengl/opengl.factor +++ b/basis/opengl/opengl.factor @@ -25,6 +25,7 @@ IN: opengl { HEX: 0503 "Stack overflow" } { HEX: 0504 "Stack underflow" } { HEX: 0505 "Out of memory" } + { HEX: 0506 "Invalid framebuffer operation" } } at "Unknown error" or ; TUPLE: gl-error code string ; @@ -190,4 +191,4 @@ MACRO: set-draw-buffers ( buffers -- ) GL_PROJECTION glMatrixMode glLoadIdentity GL_MODELVIEW glMatrixMode - glLoadIdentity ; \ No newline at end of file + glLoadIdentity ; diff --git a/basis/opengl/shaders/shaders.factor b/basis/opengl/shaders/shaders.factor index 15fab1aae0..a946fd16f4 100755 --- a/basis/opengl/shaders/shaders.factor +++ b/basis/opengl/shaders/shaders.factor @@ -61,10 +61,21 @@ PREDICATE: fragment-shader < gl-shader (fragment-shader?) ; ! Programs +: ( shaders frag-data-locations -- program ) + glCreateProgram + [ + [ swap [ glAttachShader ] with each ] + [ swap [ first2 swap glBindFragDataLocationEXT ] with each ] bi-curry bi* + ] + [ glLinkProgram ] + [ ] tri + gl-error ; + : ( shaders -- program ) - glCreateProgram swap - [ dupd glAttachShader ] each - [ glLinkProgram ] keep + glCreateProgram + [ swap [ glAttachShader ] with each ] + [ glLinkProgram ] + [ ] tri gl-error ; : (gl-program?) ( object -- ? )