boot sequence cleanup, gl is a "module" now

This commit is contained in:
Erik 2016-03-15 15:59:15 +01:00
parent a512083c8d
commit f76da47ee0
4 changed files with 70 additions and 51 deletions

View File

@ -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-dir (getenv "CARP_DIR"))
(def carp-dev (not (= "" (getenv "CARP_DEV")))) (def carp-dev (env-variable-true? (getenv "CARP_DEV")))
(if (= carp-dir "") (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)) (exit -1))
nil) nil)
;; ~~~ CORE ~~~
(load-lisp (str carp-dir "lisp/core.carp")) (load-lisp (str carp-dir "lisp/core.carp"))
(load-lisp (str carp-dir "lisp/builtins.carp")) (load-lisp (str carp-dir "lisp/builtins.carp"))
(load-lisp (str carp-dir "lisp/signatures.carp")) (load-lisp (str carp-dir "lisp/signatures.carp"))
@ -13,19 +21,18 @@
(when carp-dev (when carp-dev
(load-lisp (str carp-dir "lisp/core_tests.carp"))) (load-lisp (str carp-dir "lisp/core_tests.carp")))
;; ~~~ COMPILER ~~~
(load-lisp (str carp-dir "lisp/compiler.carp")) (load-lisp (str carp-dir "lisp/compiler.carp"))
(defn load-gl ()
(load-lisp (str carp-dir "lisp/glfw_test.carp")))
(when carp-dev (when carp-dev
(do (do
(time (load-lisp (str carp-dir "lisp/compiler_tests.carp"))) (time (load-lisp (str carp-dir "lisp/compiler_tests.carp")))
(load-lisp (str carp-dir "lisp/examples.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")) ;;(load-lisp (str carp-dir "lisp/improved_core.carp"))
;; ~~~ USER BOOT FILES ~~~
(let [user-boot-file (str (getenv "HOME") "/.carp/user.carp")] (let [user-boot-file (str (getenv "HOME") "/.carp/user.carp")]
(when (file-exists? user-boot-file) (when (file-exists? user-boot-file)
(load-lisp user-boot-file))) (load-lisp user-boot-file)))

View File

@ -251,6 +251,8 @@
(defn ls () (system "ls")) (defn ls () (system "ls"))
(defn pwd () (system "pwd")) (defn pwd () (system "pwd"))
(defn user () (getenv "USER")) (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) (register-builtin "platform" '() :int)
@ -270,7 +272,6 @@
(defmacro import (module-symbol) (defmacro import (module-symbol)
(list 'import-internal (str module-symbol))) (list 'import-internal (str module-symbol)))
;;`(import-internal (name ~module-symbol)) ;;`(import-internal (name ~module-symbol))
(defn import-internal [module-name] (defn import-internal [module-name]

54
lisp/gl.carp Normal file
View 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)))

View File

@ -1,47 +1,4 @@
(import gl)
(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)))
(defn red () (defn red ()
0.6) 0.6)