Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

add license

  • Loading branch information...
commit 9e27728640e6c313a6ea659ff2ff22efa2e0548f 1 parent 8d23486
@ztellman authored
View
17 README.md
@@ -1,4 +1,12 @@
-Penumbra is a basic wrapper for OpenGL in Clojure.
+ Copyright (c) Zachary Tellman. All rights reserved.
+ The use and distribution terms for this software are covered by the
+ Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+ which can be found in the file epl-v10.html at the root of this distribution.
+ By using this software in any fashion, you are agreeing to be bound by
+ the terms of this license.
+ You must not remove this notice, or any other, from this software.
+
+Penumbra is a wrapper for OpenGL in Clojure, by way of JOGL.
This Java/C code
@@ -41,10 +49,5 @@ rather than this:
0)))
-Some features I'd like to add, in ascending order of complexity:
-
-- helper methods for procedural mesh generation
-
-- pixel shading
+I'm currently working on adding shaders and GPGPU to the library.
-- GPGPU
View
261 epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
View
10 examples/gears.clj
@@ -1,6 +1,14 @@
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
(ns penumbra.examples.gears)
-(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view 'penumbra.window)
+(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view 'penumbra.interface.window)
;;;;;;;;;;;;;;;;;;;;;;;;
;Gear building functions
View
51 examples/render_to_texture.clj
@@ -1,6 +1,14 @@
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
(ns penumbra.examples.render-to-texture)
-(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view 'penumbra.opengl.texture 'penumbra.window)
+(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view 'penumbra.opengl.texture 'penumbra.interface.window)
(def checkers (atom nil))
(def view (atom nil))
@@ -66,7 +74,6 @@
(ref-set right-rot-y (- @right-rot-y dx))))))
(defn display [delta time]
-
(bind-texture @checkers)
(enable :texture-2d)
@@ -76,38 +83,36 @@
;render the checkered cube to a texture
(clear-color 0.5 0.5 0.5 1)
(render-to-texture @view
- (frustum-view 50 1 0.1 10)
- (push-matrix
- (rotate @left-rot-x 1 0 0) (rotate @left-rot-y 0 1 0)
- (textured-cube)))
+ (with-projection (frustum-view 50 1 0.1 10)
+ (push-matrix
+ (rotate @left-rot-x 1 0 0) (rotate @left-rot-y 0 1 0)
+ (textured-cube))))
(clear-color 0 0 0 1)
(clear)
(let [[_ _ w h] @view-bounds]
- (frustum-view 90 (float (/ w 2.0 h)) 0.1 10)
-
- ;render the checkered cube to the window
- (bind-texture @checkers)
- (with-viewport [0 0 (/ w 2.0) h]
- (push-matrix
- (rotate @left-rot-x 1 0 0) (rotate @left-rot-y 0 1 0)
- (textured-cube)))
-
- ;render a cube with the checkered cube texture
- (bind-texture @view)
- (with-viewport [(/ w 2.0) 0 (/ w 2.0) h]
- (push-matrix
- (rotate @right-rot-x 1 0 0) (rotate @right-rot-y 0 1 0)
- (textured-cube))))
+ (with-projection (frustum-view 90 (float (/ w 2.0 h)) 0.1 10)
+ ;render the checkered cube to the window
+ (bind-texture @checkers)
+ (with-viewport [0 0 (/ w 2.0) h]
+ (push-matrix
+ (rotate @left-rot-x 1 0 0) (rotate @left-rot-y 0 1 0)
+ (textured-cube)))
+ ;render a cube with the checkered cube texture
+ (bind-texture @view)
+ (with-viewport [(/ w 2.0) 0 (/ w 2.0) h]
+ (push-matrix
+ (rotate @right-rot-x 1 0 0) (rotate @right-rot-y 0 1 0)
+ (textured-cube))))
;draw a dividing line
(disable :lighting)
(disable :texture-2d)
(color 1 1 1)
- (ortho-view 0 0 1 1 0 10)
(line-width 3)
- (draw-lines (vertex 0.5 0 5) (vertex 0.5 1 5)))
+ (with-projection (ortho-view 0 0 1 1 0 10)
+ (draw-lines (vertex 0.5 0 5) (vertex 0.5 1 5)))))
(start {:display display, :mouse-drag mouse-drag, :reshape reshape, :init init})
View
10 examples/sierpinski.clj
@@ -1,6 +1,14 @@
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
(ns penumbra.examples.sierpinski)
-(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view 'penumbra.window)
+(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view 'penumbra.interface.window)
(defn draw-pyramid []
(material 1 0.25 0.25 1)
View
18 window.clj → interface/window.clj
@@ -1,4 +1,12 @@
-(ns penumbra.window)
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
+(ns penumbra.interface.window)
(import '(java.awt Frame)
'(java.awt.event MouseAdapter MouseListener
@@ -7,11 +15,13 @@
'(javax.media.opengl GLCanvas GLEventListener GLCapabilities GL)
'(com.sun.opengl.util Animator))
-(set! *warn-on-reflection* true)
-
(use 'penumbra.opengl.core 'penumbra.opengl.view 'penumbra.opengl.geometry)
-(defn clock [] (System/nanoTime))
+;;;;;;;;;;;;;;
+
+(set! *warn-on-reflection* true)
+
+(defn- clock [] (System/nanoTime))
(def last-render (ref (clock)))
(def last-pos (ref [0 0]))
View
8 opengl/core.clj
@@ -1,3 +1,11 @@
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
(ns penumbra.opengl.core)
(import '(javax.media.opengl GLCanvas GL)
View
25 opengl/geometry.clj
@@ -1,9 +1,17 @@
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
(ns penumbra.opengl.geometry)
(import '(javax.media.opengl GL)
'(javax.media.opengl.glu GLU))
-(use 'penumbra.opengl.core)
+(use 'penumbra.opengl.core 'clojure.contrib.def)
(def transform-matrix (atom nil))
@@ -49,9 +57,9 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defn prepend [text sym] (symbol (format "%s-%s" text (name sym))))
+(defn- prepend [text sym] (symbol (format "%s-%s" text (name sym))))
-(defmacro gl-facade-import
+(defmacro- gl-facade-import
"Takes an OpenGL function and turns it into two macros:
- a macro which behaves differently if we're inside a glBegin/End clause (glVertex3d -> vertex)
- a macro which directly calls the OpenGL function (glVertex3d -> gl-vertex)"
@@ -75,7 +83,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defmacro facade-transform
+(defmacro- facade-transform
"Forwards the transformed vector from fn to the OpenGL function fn represents."
[fn transform-fn]
(let [facade-fn (prepend "facade" fn)
@@ -84,7 +92,7 @@
(let [[xp# yp# zp# wp#] (apply-matrix (~transform-fn @transform-matrix) [x# y# z# 1])]
(~direct-fn xp# yp# zp#)))))
-(defn undo-translation [matrix] (vec (concat (subvec matrix 0 12) [0 0 0 0]))) ;we don't want to translate normals
+(defn- undo-translation [matrix] (vec (concat (subvec matrix 0 12) [0 0 0 0]))) ;we don't want to translate normals
(facade-transform vertex identity)
(facade-transform normal undo-translation)
@@ -92,12 +100,11 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn apply-transform
- "Pops off the head of the transform stack, multiplies it by the matrix, and pushes it back on"
[matrix transform-fn]
(swap! transform-matrix transform-fn matrix))
-(defmacro facade-multiply
- "Applies a transform to transform-stack rather than the OpenGL modelview matrix."
+(defmacro- facade-multiply
+ "Applies a transform to transform-matrix rather than the OpenGL modelview matrix."
([fn matrix-fn] `(facade-multiply ~fn ~matrix-fn mult-matrix))
([fn matrix-fn transform-fn]
(let [facade-fn (prepend "facade" fn)]
@@ -111,7 +118,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defmacro defn-draw
+(defmacro- defn-draw
"Creates a macro called draw-'type' which redirects vertex and transform calls through appropriate facades."
[primitive-type]
`(defmacro ~(symbol (str "draw-" (name primitive-type))) [& body#]
View
23 opengl/texture.clj
@@ -1,6 +1,14 @@
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
(ns penumbra.opengl.texture)
-(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view)
+(use 'penumbra.opengl.core 'penumbra.opengl.geometry 'penumbra.opengl.view 'clojure.contrib.def)
(set! *warn-on-reflection* true)
@@ -90,7 +98,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;
-(defmacro to-byte [num] `(byte (* 255 (double ~num)))) ;this is a macro for performance reasons
+(defmacro- to-byte [num] `(byte (* 255 (double ~num)))) ;this is a macro for performance reasons
(defn populate-1d-texture [size fun]
(let [buf (ByteBuffer/allocate (* size 4))]
@@ -142,15 +150,14 @@
(defmacro render-to-texture
"Renders a scene to a texture."
- [tex setup-projection & body]
+ [tex & body]
`(do
(clear)
(with-viewport [0 0 (:width ~tex) (:height ~tex)]
- (gl-matrix-mode :projection) (gl-push-matrix) ~setup-projection ;set up projection matrix
- (gl-matrix-mode :modelview) (push-matrix (scale 1 1 1) ~@body) ;render scene
+ (push-matrix
+ ~@body)
(bind-texture ~tex)
- (gl-copy-tex-sub-image-2d :texture-2d 0 0 0 0 0 (:width ~tex) (:height ~tex)) ;copy to texture
- (gl-matrix-mode :projection) (gl-pop-matrix) (gl-matrix-mode :modelview)) ;return to previous projection matrix
- (clear)))
+ (gl-copy-tex-sub-image-2d :texture-2d 0 0 0 0 0 (:width ~tex) (:height ~tex))
+ (clear))))
View
14 opengl/view.clj
@@ -1,3 +1,11 @@
+; Copyright (c) Zachary Tellman. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
(ns penumbra.opengl.view)
(use 'penumbra.opengl.core 'penumbra.opengl.geometry)
@@ -66,6 +74,12 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defmacro with-projection [projection & body]
+ `(do
+ (gl-matrix-mode :projection) (gl-push-matrix) ~projection (gl-matrix-mode :modelview)
+ ~@body
+ (gl-matrix-mode :projection) (gl-pop-matrix) (gl-matrix-mode :modelview)))
+
(defn ortho-view
"Create orthographic view, where distant objects don't get smaller."
[left top right bottom near far]
Please sign in to comment.
Something went wrong with that request. Please try again.