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-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)))

View 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
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 @@
(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)