mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-12 04:58:18 +03:00
boot sequence cleanup, gl is a "module" now
This commit is contained in:
parent
a512083c8d
commit
f76da47ee0
@ -1,11 +1,19 @@
|
||||
(def env-variable-true?
|
||||
(fn [v]
|
||||
(and (not (= "" v))
|
||||
(not (= "0" v))
|
||||
(not (= "false" v)))))
|
||||
|
||||
(def carp-dir (getenv "CARP_DIR"))
|
||||
(def carp-dev (not (= "" (getenv "CARP_DEV"))))
|
||||
(def carp-dev (env-variable-true? (getenv "CARP_DEV")))
|
||||
|
||||
(if (= carp-dir "")
|
||||
(do (println "Environment variable 'CARP_DIR' is not set, did you run 'carp-repl' directly? Please use the carp shell script instead.")
|
||||
(do (println (str "Environment variable 'CARP_DIR' is not set, did you run 'carp-repl' directly?\n"
|
||||
"Please use the carp shell script instead."))
|
||||
(exit -1))
|
||||
nil)
|
||||
|
||||
;; ~~~ CORE ~~~
|
||||
(load-lisp (str carp-dir "lisp/core.carp"))
|
||||
(load-lisp (str carp-dir "lisp/builtins.carp"))
|
||||
(load-lisp (str carp-dir "lisp/signatures.carp"))
|
||||
@ -13,19 +21,18 @@
|
||||
(when carp-dev
|
||||
(load-lisp (str carp-dir "lisp/core_tests.carp")))
|
||||
|
||||
;; ~~~ COMPILER ~~~
|
||||
(load-lisp (str carp-dir "lisp/compiler.carp"))
|
||||
|
||||
(defn load-gl ()
|
||||
(load-lisp (str carp-dir "lisp/glfw_test.carp")))
|
||||
|
||||
(when carp-dev
|
||||
(do
|
||||
(time (load-lisp (str carp-dir "lisp/compiler_tests.carp")))
|
||||
(load-lisp (str carp-dir "lisp/examples.carp"))
|
||||
(load-gl)))
|
||||
(load-lisp (str carp-dir "lisp/glfw_test.carp"))))
|
||||
|
||||
;;(load-lisp (str carp-dir "lisp/improved_core.carp"))
|
||||
|
||||
;; ~~~ USER BOOT FILES ~~~
|
||||
(let [user-boot-file (str (getenv "HOME") "/.carp/user.carp")]
|
||||
(when (file-exists? user-boot-file)
|
||||
(load-lisp user-boot-file)))
|
||||
|
@ -251,6 +251,8 @@
|
||||
(defn ls () (system "ls"))
|
||||
(defn pwd () (system "pwd"))
|
||||
(defn user () (getenv "USER"))
|
||||
(defn mkdir (dir-name) (system (str "mkdir " dir-name)))
|
||||
(defn touch (file-name) (system (str "touch " file-name)))
|
||||
|
||||
(register-builtin "platform" '() :int)
|
||||
|
||||
@ -270,7 +272,6 @@
|
||||
|
||||
(defmacro import (module-symbol)
|
||||
(list 'import-internal (str module-symbol)))
|
||||
|
||||
;;`(import-internal (name ~module-symbol))
|
||||
|
||||
(defn import-internal [module-name]
|
||||
|
54
lisp/gl.carp
Normal file
54
lisp/gl.carp
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
(defn register-glfw ()
|
||||
(let [glfw (load-dylib "libglfw3.dylib")
|
||||
gl-constants (load-dylib (str carp-dir "gl-constants/gl_constants.so"))]
|
||||
(do
|
||||
(reset! header-files (cons "<GLFW/glfw3.h>" header-files))
|
||||
(reset! header-files (cons (str "\"" carp-dir "gl-constants/gl_constants.h\"") header-files))
|
||||
|
||||
(register glfw "glfwInit" '() :bool)
|
||||
(register glfw "glfwCreateWindow" '(:int :int (:ref :string) :GLFWmonitor :GLFWwindow) '(:ref :GLFWwindow))
|
||||
(register glfw "glfwMakeContextCurrent" '((:ref :GLFWwindow)) :void)
|
||||
(register glfw "glfwTerminate" '() :void)
|
||||
(register glfw "glfwPollEvents" '() :void)
|
||||
(register glfw "glfwWindowShouldClose" '((:ref :GLFWwindow)) :bool)
|
||||
(register glfw "glfwSwapBuffers" '((:ref :GLFWwindow)) :void)
|
||||
|
||||
(register glfw "glClearColor" '(:float :float :float :float) :void)
|
||||
(register glfw "glClear" '(:int) :void)
|
||||
(register glfw "glColor3f" '(:float :float :float) :void)
|
||||
(register glfw "glBegin" '(:int) :void)
|
||||
(register glfw "glEnd" '() :void)
|
||||
(register glfw "glVertex3f" '(:float, :float, :float) :void)
|
||||
|
||||
(register-variable gl-constants "gl_color_buffer_bit" :int)
|
||||
(register-variable gl-constants "gl_lines" :int)
|
||||
(register-variable gl-constants "gl_line_strip" :int)
|
||||
(register-variable gl-constants "gl_triangles" :int)
|
||||
|
||||
)))
|
||||
|
||||
;; glfwSetKeyCallback(window, key_callback);
|
||||
;; void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);;
|
||||
|
||||
;; glfwSetCharCallback(window, character_callback);
|
||||
;; void character_callback(GLFWwindow* window, unsigned int codepoint)
|
||||
|
||||
;; glfwSetCursorPosCallback(window, cursor_pos_callback);
|
||||
;; static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos)
|
||||
|
||||
(register-glfw)
|
||||
|
||||
(defn set-clear-color ()
|
||||
(glClearColor 0.0f 0.95f 0.75f 1.0f))
|
||||
|
||||
(defn draw-rect (x y w h)
|
||||
(do (glBegin gl-triangles)
|
||||
(glVertex3f x y 0.0f)
|
||||
(glVertex3f (+ x w) y 0.0f)
|
||||
(glVertex3f (+ x w) (+ y h) 0.0f)
|
||||
(glVertex3f (+ x w) (+ y h) 0.0f)
|
||||
(glVertex3f x (+ y h) 0.0f)
|
||||
(glVertex3f x y 0.0f)
|
||||
(glEnd)))
|
||||
|
@ -1,47 +1,4 @@
|
||||
|
||||
(defn register-glfw ()
|
||||
(let [glfw (load-dylib "libglfw3.dylib")
|
||||
gl-constants (load-dylib (str carp-dir "gl-constants/gl_constants.so"))]
|
||||
(do
|
||||
(reset! header-files (cons "<GLFW/glfw3.h>" header-files))
|
||||
(reset! header-files (cons (str "\"" carp-dir "gl-constants/gl_constants.h\"") header-files))
|
||||
|
||||
(register glfw "glfwInit" '() :bool)
|
||||
(register glfw "glfwCreateWindow" '(:int :int (:ref :string) :GLFWmonitor :GLFWwindow) '(:ref :GLFWwindow))
|
||||
(register glfw "glfwMakeContextCurrent" '((:ref :GLFWwindow)) :void)
|
||||
(register glfw "glfwTerminate" '() :void)
|
||||
(register glfw "glfwPollEvents" '() :void)
|
||||
(register glfw "glfwWindowShouldClose" '((:ref :GLFWwindow)) :bool)
|
||||
(register glfw "glfwSwapBuffers" '((:ref :GLFWwindow)) :void)
|
||||
|
||||
(register glfw "glClearColor" '(:float :float :float :float) :void)
|
||||
(register glfw "glClear" '(:int) :void)
|
||||
(register glfw "glColor3f" '(:float :float :float) :void)
|
||||
(register glfw "glBegin" '(:int) :void)
|
||||
(register glfw "glEnd" '() :void)
|
||||
(register glfw "glVertex3f" '(:float, :float, :float) :void)
|
||||
|
||||
(register-variable gl-constants "gl_color_buffer_bit" :int)
|
||||
(register-variable gl-constants "gl_lines" :int)
|
||||
(register-variable gl-constants "gl_line_strip" :int)
|
||||
(register-variable gl-constants "gl_triangles" :int)
|
||||
|
||||
)))
|
||||
|
||||
(register-glfw)
|
||||
|
||||
(defn set-clear-color ()
|
||||
(glClearColor 0.0f 0.95f 0.75f 1.0f))
|
||||
|
||||
(defn draw-rect (x y w h)
|
||||
(do (glBegin gl-triangles)
|
||||
(glVertex3f x y 0.0f)
|
||||
(glVertex3f (+ x w) y 0.0f)
|
||||
(glVertex3f (+ x w) (+ y h) 0.0f)
|
||||
(glVertex3f (+ x w) (+ y h) 0.0f)
|
||||
(glVertex3f x (+ y h) 0.0f)
|
||||
(glVertex3f x y 0.0f)
|
||||
(glEnd)))
|
||||
(import gl)
|
||||
|
||||
(defn red ()
|
||||
0.6)
|
||||
|
Loading…
Reference in New Issue
Block a user