(init-video-mode)
(fill-surface screen (getf color :red) (getf color :green) (getf color :blue)))
- (defun flip ()
- (cond ((null screen) nil)
- (t (SDL_Flip screen))))
-
(defun quit-video-mode ()
(setq screen nil)))
(cond ((not (3d-mode?))
(setq mode '3d)
(init-video-mode)
+ (glClearDepth 1)
(glEnable GL_DEPTH_TEST)
+ (glDepthFunc GL_LEQUAL)
(apply-mode-change))))
(defun 3d-mode? ()
(defun init-GL ()
(glShadeModel GL_SMOOTH)
(glClearColor 0 0 0 0)
- (glClearDepth 1)
- (glDepthFunc GL_LEQUAL)
+; (glClearDepth 1)
+; (glDepthFunc GL_LEQUAL)
; (glEnable GL_BLEND)
; (glBlendFunc GL_SRC_ALPHA GL_ONE)
(glHint GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST)
(maphash (lambda (key res) (free-resource key)) resources-table)))
-;;; Connection with Gacela Skin
-(let (socket)
- (defun start-skin-client (port)
- (when (null socket) (setq socket (si::socket port :host "localhost"))))
+;;; Connection with Gacela Skin Clients
+(let (server-socket clients)
+ (defun start-skin-server (port)
+ (cond ((null server-socket) (setq server-socket (si::socket port :server #'check-skin-connections)))))
- (defun eval-from-skin ()
- (when (si::listen socket)
- (secure-block socket (eval (read socket)))))
+ (defun check-skin-connections ()
+ (cond ((and server-socket (listen server-socket)) (setq clients (cons (si::accept server-socket) clients)))))
- (defun stop-skin-client ()
- (when socket
- (si::close socket)
- (setq socket nil))))
+ (defun eval-from-skin ()
+ (labels ((eval-clients (cli-socks)
+ (cond (cli-socks
+ (let ((cli (car cli-socks)))
+ (cond ((si::listen cli)
+ (secure-block cli (eval (read cli)))
+ (si::close cli)
+ (eval-clients (cdr cli-socks)))
+ (t
+ (cons cli (eval-clients (cdr cli-socks))))))))))
+ (setq clients (eval-clients clients))))
+
+ (defun stop-skin-server ()
+ (cond (server-socket (si::close server-socket) (setq server-socket nil)))
+ (cond (clients
+ (labels ((close-clients (cli-socks)
+ (si::close (car cli-socks))
+ (close-clients (cdr cli-socks))))
+ (close-clients clients))
+ (setq clients nil)))))
;;; GaCeLa Functions
(do () ((quit?))
(glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT))
(glLoadIdentity)
+;(gluLookAt 0 0 50 0 0 0 0 1 0)
(when (functionp game-code) (funcall game-code))
(SDL_GL_SwapBuffers)
(delay-frame)
(init-frame-time)
+ (check-skin-connections)
(eval-from-skin)
(process-events))
(setq running nil))