-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshader.rkt
29 lines (25 loc) · 838 Bytes
/
shader.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#lang racket/base
(require ffi/vector
opengl
syntax/parse/define
(for-syntax racket/base
racket/function
racket/syntax
syntax/strip-context))
(provide (all-defined-out))
(struct shader (string)
#:transparent
#:name gfx:shader
#:constructor-name make-shader)
(define-syntax-parser define-shader
[(_ name:id form ...)
#:with source-mod (format-id #'name "~a-source" #'name)
#:with name->port (format-id #'name "~a->port" #'name)
(replace-context
this-syntax
#'(begin
(module source-mod glsl form ...)
(define name (let ()
(local-require 'source-mod)
(make-shader the-string)))
(define (name->port) (open-input-string (shader-string name) 'name))))])