Description: Upstream changes introduced in version 0.4.4-4
This patch has been created by dpkg-source during the package build.
Here's the last changelog entry, hopefully it gives details on why
those changes were made:
.
gauche-gl (0.4.4-4) unstable; urgency=low
.
* debian/gauche-gl.info: New file.
* debian/patches/00_new_api_0.9.patch: New file for new Gauche 0.9.
* debian/patches/01_no_path_xtra.patch: New file from diff of 0.4.4-3.
* debian/{rules,source,patches,README.source}: Use 3.0 (quilt) format.
* debian/compat: Updated.
* debian/control (Section): It's now lisp.
(Homepage): New field.
(Depends): Added ${misc:Depends}.
(Build-Depends): This is for new gauche-dev (>= 0.9).
Added autoconf and texinfo.
.
The person named in the Author field signed this changelog entry.
Author: NIIBE Yutaka <gniibe@fsij.org>
---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:
Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: http://bugs.debian.org/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>
--- gauche-gl-0.4.4.orig/doc/gauche-gl-refe.texi
+++ gauche-gl-0.4.4/doc/gauche-gl-refe.texi
@@ -46,7 +46,7 @@ This manual is for version 0.4.4.
* OpenGL API::
* GLUT API::
* Vectors and matrices::
-* Simple image handling::
+* Simple utilities::
* Indices::
@end menu
@@ -71,13 +71,12 @@ optimized for 3D homogeneous coordinates
The vector and matrix objects here can be directly passed to
Gauche-gl functions.
The functions are descrbied in @ref{Vectors and matrices}.
-@item gl.simple-image
-OpenGL doesn't provide any means of reading/writing image data, and
-it should be covered by other Gauche extensions. However,
-it is sometimes handy to have simple means to handle external
-image data, so that you can do some experiment with Gauche-gl alone.
-This module provides minimal support for that.
-The functions are descrbied in @ref{Simple image handling}.
+@item gl.simple.*
+These modules provide simple APIs for programmers to
+hack up a very simple OpenGL application. They are by no
+means intended for general application development, but
+would be handy for throwaway script.
+See @ref{Simple utilities} for the details.
@end table
@c ======================================================================
@@ -2905,7 +2904,7 @@ f64vector of size 4 or @code{<vector4f>}
@c ======================================================================
-@node Vectors and matrices, Simple image handling, GLUT API, Top
+@node Vectors and matrices, Simple utilities, GLUT API, Top
@chapter Vectors and matrices
@deftp {Module} gl.math3d
@@ -3102,6 +3101,10 @@ Returns a cross product of two vector4fs
(@var{w} element is ignored).
@end defun
+@defun vector4f-norm v
+Returns the norm (length) of the vector @var{v}.
+@end defun
+
@defun vector4f-normalize x
@defunx vector4f-normalize! x
Returns a normalized vector of vector4f @var{x}.
@@ -3326,6 +3329,12 @@ it specifies the start offset in vector
initial values. The f32vector @var{v} must have enough length.
@end defun
+@defun f32vector->matrix4f! m v &optional (start 0)
+Extract 16 flonums in the f32vector @var{v} starting from the
+index @var{start}, and fill the matrix4f @var{m} with them.
+The f32vector @var{v} must have enough length.
+@end defun
+
@defun matrix4f->f32vector m
Returns a new f32vector that has elements from matrix4f @var{m}.
@end defun
@@ -3455,8 +3464,8 @@ rotation is represented by a quaternion
@xref{Quaternions}, for more details about quaternions.
@end defun
-@defun euler-angle->matrxi4f xangle yangle zangle &optional order
-@defunx euler-angle->matrxi4f! m xangle yangle zangle &optional order
+@defun euler-angle->matrix4f xangle yangle zangle &optional order
+@defunx euler-angle->matrix4f! m xangle yangle zangle &optional order
Returns a matrix that represents rotation along x, y and z axis
by @var{xangle}, @var{yangle}, and @var{zangle}, respectively.
@@ -3513,12 +3522,23 @@ and @var{s}. The return value is a bool
@var{m} is non-singular or not.
@end defun
+@defun matrix4f->translation m
+Extract the translation component from the given TRS matrix @var{m}
+and returns it as a @code{<vector4f>}.
+@end defun
+
+@defun matrix4f->translation! v m
+Extract the translation component from the given TRS matrix @var{m}
+and stores the result into a @code{<vector4f>} @var{v}.
+Returns @var{v}.
+@end defun
+
@defun matrix4f->rotation m
From given orthogonal matrix @var{m}, extracts and returns
and rotation axis and angle, as a vector4f and a real number.
@end defun
-@defun matrix4f->rotation! m v
+@defun matrix4f->rotation! v m
Same as above, except the storage of vector4f @var{v} is reused
to store the result axis.
@end defun
@@ -3594,6 +3614,25 @@ around a unit vector @var{axis} by angle
a f32vector (only first three component is used).
@end defun
+@defun vectors->quatf v w
+@defunx vectors->quatf! q v w
+Given two unit vectors @var{v} and @var{w}, calculates and returns
+a quaternion that represents a rotation from @var{v} to @var{w}.
+The destructive version @code{vectors->quatf!} modifies @var{q}.
+@end defun
+
+@defun axes->quatf v1 v2 w1 w2
+@defunx axes->quatf! q v1 v2 w1 w2
+The arguments must be all unit vectors,
+@var{v1} and @var{v2} must be perpendicular,
+and also @var{w1} and @var{w2} must be perpendicular.
+
+Calculates and returns a quaternion that represents a rotation
+which transforms @var{v1} to @var{w1}, and @var{v2} to @var{w2},
+respectively. The destructive version stores the result
+into @var{q}.
+@end defun
+
@defun quatf-add p q
@defunx quatf-add! p q
@defunx quatf-sub p q
@@ -3611,11 +3650,13 @@ The destructive version modifies @var{q}
@defun quatf-mul p q
@defunx quatf-mul! p q
Multiply two quaternions @var{p} and @var{q}.
-The destructive version modifies @var{p}.
+The destructive version modifies @var{p} as well.
@end defun
-@defun quatf-conjugate q
-Returns a conjugate of a quaternion @var{q}.
+@defun quatf-conjugate p
+@defunx quatf-conjugate! q p
+Returns a conjugate of a quaternion @var{p}.
+The destructive version modifies @var{q} as well.
@end defun
@defun quatf-transform q p
@@ -3647,22 +3688,47 @@ The behavior is undefined if @var{q} is
The destructive version modifies @var{m}.
@end defun
+@defun matrix4f->quatf m
+@defunx matrix4f->quatf! q m
+Extracts the rotation component of a matrix @var{m} and
+returns a quaterion that represents the rotation.
+@code{Matrix4f->quatf!} also uses @var{q} as the storage
+to store the result.
+@end defun
+
@defun quatf-slerp p q t
@defunx quatf-slerp! r p q t
Returns a quaternion that interpolates between two
unit quaternions @var{p} and @var{q}, by a scalar value @var{t}.
-The destructive version modifies @var{t}.
+The destructive version modifies @var{r}.
@end defun
+@c ======================================================================
+@node Simple utilities, Indices, Vectors and matrices, Top
+@chapter Simple utilities
+This chapter covers @code{gl.simple.*} modules. They are
+provided for the convenience of those who wants quick experiment
+with Gauche-gl alone, without a hassle to install a bunch of
+other modules. Their features are pretty limited, but you
+may find them handy when you need to hack up some throwaway
+script that need to show some graphics on the screen.
+@menu
+* Simple image handling::
+* Simple viewer::
+@end menu
-@c ======================================================================
-@node Simple image handling, Indices, Vectors and matrices, Top
-@chapter Simple image handling
+@node Simple image handling, Simple viewer, Simple utilities, Simple utilities
+@section Simple image handling
+
+@deftp {Module} gl.simple.image
+@mdindex gl.simple.image
+OpenGL doesn't provide any means of reading/writing image data, and
+it should be covered by other Gauche extensions. However,
+it is sometimes handy to have simple means to handle external
+image data, so that you can do some experiment with Gauche-gl alone.
-@deftp {Module} gl.simple-image
-@mdindex gl.simple-image
This module provides a minimal support to handle external image
data, so that one can do some experiment in Gauche-gl alone.
@@ -3691,10 +3757,140 @@ image data vector is usually huge, and y
for the REPL to display the entire result.
@end defun
+@node Simple viewer, , Simple image handling, Simple utilities
+@section Simple viewer
+
+@deftp {Module} gl.simple.viewer
+@mdindex gl.simple.viewer
+This module packages common operations to allow users to
+view 3D objects, controlling the camera by the mouse,
+and have some interactions with the keyboard.
+
+A typical way of using the viewer is like the following:
+
+@example
+(use gl)
+(use gl.glut)
+(use gl.simple.viewer)
+
+(define (main args)
+ (glut-init args)
+ (simple-viewer-display <your-display-thunk>)
+ (simple-viewer-set-key! <key> <handler> ...)
+ (simple-viewer-window <name> :title <title> ...)
+ (simple-viewer-run) ; loop forever. type ESC to exit.
+ 0)
+@end example
+
+The viewer handles mouse drag (to move the camera),
+and also draws reference grid and axes by default for
+your convenience. You have to provide a thunk, which
+must draw your 3D object.
+
+For the keyboard events, you can use a convenient API
+to associate handler to the key (character for normal keys,
+and constants like @code{GL_LEFT_ARROW} for special keys).
+
+The reshape event is handled implicitly, though you can
+override it.
+
+If you call @code{simple-viewer-run}, it enters the event
+loop and never returns. If you wish to keep REPL and/or
+other parts of your application run concurrently,
+the convenient way is to run @code{simple-viewer-run}
+in a separate thread.
+
+@example
+(use gauche.threads)
+
+(define (run-viewer)
+ (thread-start! (make-thread simple-viewer-run #f)))
+@end example
+
+See also the code under @file{examples/simple} directory
+of the source tree for more examples.
+@end deftp
+
+@defun simple-viewer-window name &key title mode parent width height x y
+Creates a new GL window with @var{name}, which must be a symbol
+to identify the window later in the simple viewer framework.
+The window won't be shown until @code{simple-viewer-run} is called.
+
+Each window
+@end defun
+
+
+@defun simple-viewer-display &optional display-thunk
+Gets/sets the display thunk, which is called every time
+the GL window is redrawn. You can change the display thunk
+any time, even while the viewer thread is running.
+
+If no argument is given, returns the current display thunk.
+It can be @code{#f} if no display thunk is set.
+
+When the display thunk is called, the matrix mode is
+@code{MODELVIEW} and the camera transformation is already applied.
+The grid and axes are also drawn, unless you've customized them.
+
+In the display thunk you can just write your model in the
+world coordinate system. It is guaranteed that
+the current color is white and line width is 1.0, but
+the states of other GL contexts are undefined,
+so you have to set them explicitly.
+@end defun
+
+@defun simple-viewer-reshape &optional reshape-proc
+Gets/sets the reshape procedure which is called every
+time the GL window configuration is changed. (It is
+also called when the GL window is shown first time.)
+You can change the reshape procedure any time,
+even while the viewer thread is running.
+
+If no argument is given, returns the current reshape proc.
+
+A reshape procedure is called with two arguments,
+the width and the height (in pixels) of the new GL
+window configuration. By default, @code{gl.simple.viewer}
+sets a procedure that changes viewport and
+projection matrix apopropriately; you need to change
+it only if you want a different behavior.
+@end defun
+
+@defun simple-viewer-grid &optional grid-proc
+@defunx simple-viewer-axis &optional axis-proc
+Gets/sets a procedure to draw a grid and axes.
+You can change these procedures
+any time, even while the viewer thread is running.
+
+The @var{grid-proc} and @var{axis-proc} are called with no arguments
+every time the GL window is redrawn, before the display thunk
+is invoked.
+The matrix mode is @code{MODELVIEW}, the camera transformation
+is already applied, and lighting is disabled.
+
+The default grid proc draws 10x10 grid
+on X-Z plane centered at the origin. The default axis proc
+draws a red line from origin to +X, a green line from origin to +Y,
+and a blue line from origin to +Z.
+
+You can pass @code{#f} to disable grid and/or axis display.
+
+If no argument is given, returns the current grid/axis proc,
+respectively.
+@end defun
+
+@defun simple-viewer-set-key! key handler @dots{}
+Even number of arguments must be given; the first of
+every two specifies the key, and the next one
+specifies the action when the key is pressed.
+@end defun
+
+
+
@c ======================================================================
-@node Indices, , Simple image handling, Top
+@node Indices, , Simple utilities, Top
@appendix Indices
@c NODE ç´¢å¼
--- gauche-gl-0.4.4.orig/doc/gauche-gl-refj.texi
+++ gauche-gl-0.4.4/doc/gauche-gl-refj.texi
@@ -46,7 +46,7 @@ This manual is for version 0.4.4.
* OpenGL API::
* GLUT API::
* Vectors and matrices::
-* Simple image handling::
+* Simple utilities::
* º÷°ú::
@end menu
@@ -71,13 +71,12 @@ optimized for 3D homogeneous coordinates
The vector and matrix objects here can be directly passed to
Gauche-gl functions.
The functions are descrbied in @ref{Vectors and matrices}.
-@item gl.simple-image
-OpenGL doesn't provide any means of reading/writing image data, and
-it should be covered by other Gauche extensions. However,
-it is sometimes handy to have simple means to handle external
-image data, so that you can do some experiment with Gauche-gl alone.
-This module provides minimal support for that.
-The functions are descrbied in @ref{Simple image handling}.
+@item gl.simple.*
+These modules provide simple APIs for programmers to
+hack up a very simple OpenGL application. They are by no
+means intended for general application development, but
+would be handy for throwaway script.
+See @ref{Simple utilities} for the details.
@end table
@c ======================================================================
@@ -2905,7 +2904,7 @@ f64vector of size 4 or @code{<vector4f>}
@c ======================================================================
-@node Vectors and matrices, Simple image handling, GLUT API, Top
+@node Vectors and matrices, Simple utilities, GLUT API, Top
@chapter Vectors and matrices
@deftp {Module} gl.math3d
@@ -3102,6 +3101,10 @@ Returns a cross product of two vector4fs
(@var{w} element is ignored).
@end defun
+@defun vector4f-norm v
+Returns the norm (length) of the vector @var{v}.
+@end defun
+
@defun vector4f-normalize x
@defunx vector4f-normalize! x
Returns a normalized vector of vector4f @var{x}.
@@ -3326,6 +3329,12 @@ it specifies the start offset in vector
initial values. The f32vector @var{v} must have enough length.
@end defun
+@defun f32vector->matrix4f! m v &optional (start 0)
+Extract 16 flonums in the f32vector @var{v} starting from the
+index @var{start}, and fill the matrix4f @var{m} with them.
+The f32vector @var{v} must have enough length.
+@end defun
+
@defun matrix4f->f32vector m
Returns a new f32vector that has elements from matrix4f @var{m}.
@end defun
@@ -3455,8 +3464,8 @@ rotation is represented by a quaternion
@xref{Quaternions}, for more details about quaternions.
@end defun
-@defun euler-angle->matrxi4f xangle yangle zangle &optional order
-@defunx euler-angle->matrxi4f! m xangle yangle zangle &optional order
+@defun euler-angle->matrix4f xangle yangle zangle &optional order
+@defunx euler-angle->matrix4f! m xangle yangle zangle &optional order
Returns a matrix that represents rotation along x, y and z axis
by @var{xangle}, @var{yangle}, and @var{zangle}, respectively.
@@ -3513,12 +3522,23 @@ and @var{s}. The return value is a bool
@var{m} is non-singular or not.
@end defun
+@defun matrix4f->translation m
+Extract the translation component from the given TRS matrix @var{m}
+and returns it as a @code{<vector4f>}.
+@end defun
+
+@defun matrix4f->translation! v m
+Extract the translation component from the given TRS matrix @var{m}
+and stores the result into a @code{<vector4f>} @var{v}.
+Returns @var{v}.
+@end defun
+
@defun matrix4f->rotation m
From given orthogonal matrix @var{m}, extracts and returns
and rotation axis and angle, as a vector4f and a real number.
@end defun
-@defun matrix4f->rotation! m v
+@defun matrix4f->rotation! v m
Same as above, except the storage of vector4f @var{v} is reused
to store the result axis.
@end defun
@@ -3594,6 +3614,25 @@ around a unit vector @var{axis} by angle
a f32vector (only first three component is used).
@end defun
+@defun vectors->quatf v w
+@defunx vectors->quatf! q v w
+Given two unit vectors @var{v} and @var{w}, calculates and returns
+a quaternion that represents a rotation from @var{v} to @var{w}.
+The destructive version @code{vectors->quatf!} modifies @var{q}.
+@end defun
+
+@defun axes->quatf v1 v2 w1 w2
+@defunx axes->quatf! q v1 v2 w1 w2
+The arguments must be all unit vectors,
+@var{v1} and @var{v2} must be perpendicular,
+and also @var{w1} and @var{w2} must be perpendicular.
+
+Calculates and returns a quaternion that represents a rotation
+which transforms @var{v1} to @var{w1}, and @var{v2} to @var{w2},
+respectively. The destructive version stores the result
+into @var{q}.
+@end defun
+
@defun quatf-add p q
@defunx quatf-add! p q
@defunx quatf-sub p q
@@ -3611,11 +3650,13 @@ The destructive version modifies @var{q}
@defun quatf-mul p q
@defunx quatf-mul! p q
Multiply two quaternions @var{p} and @var{q}.
-The destructive version modifies @var{p}.
+The destructive version modifies @var{p} as well.
@end defun
-@defun quatf-conjugate q
-Returns a conjugate of a quaternion @var{q}.
+@defun quatf-conjugate p
+@defunx quatf-conjugate! q p
+Returns a conjugate of a quaternion @var{p}.
+The destructive version modifies @var{q} as well.
@end defun
@defun quatf-transform q p
@@ -3647,22 +3688,47 @@ The behavior is undefined if @var{q} is
The destructive version modifies @var{m}.
@end defun
+@defun matrix4f->quatf m
+@defunx matrix4f->quatf! q m
+Extracts the rotation component of a matrix @var{m} and
+returns a quaterion that represents the rotation.
+@code{Matrix4f->quatf!} also uses @var{q} as the storage
+to store the result.
+@end defun
+
@defun quatf-slerp p q t
@defunx quatf-slerp! r p q t
Returns a quaternion that interpolates between two
unit quaternions @var{p} and @var{q}, by a scalar value @var{t}.
-The destructive version modifies @var{t}.
+The destructive version modifies @var{r}.
@end defun
+@c ======================================================================
+@node Simple utilities, º÷°ú, Vectors and matrices, Top
+@chapter Simple utilities
+This chapter covers @code{gl.simple.*} modules. They are
+provided for the convenience of those who wants quick experiment
+with Gauche-gl alone, without a hassle to install a bunch of
+other modules. Their features are pretty limited, but you
+may find them handy when you need to hack up some throwaway
+script that need to show some graphics on the screen.
+@menu
+* Simple image handling::
+* Simple viewer::
+@end menu
-@c ======================================================================
-@node Simple image handling, º÷°ú, Vectors and matrices, Top
-@chapter Simple image handling
+@node Simple image handling, Simple viewer, Simple utilities, Simple utilities
+@section Simple image handling
+
+@deftp {Module} gl.simple.image
+@mdindex gl.simple.image
+OpenGL doesn't provide any means of reading/writing image data, and
+it should be covered by other Gauche extensions. However,
+it is sometimes handy to have simple means to handle external
+image data, so that you can do some experiment with Gauche-gl alone.
-@deftp {Module} gl.simple-image
-@mdindex gl.simple-image
This module provides a minimal support to handle external image
data, so that one can do some experiment in Gauche-gl alone.
@@ -3691,10 +3757,140 @@ image data vector is usually huge, and y
for the REPL to display the entire result.
@end defun
+@node Simple viewer, , Simple image handling, Simple utilities
+@section Simple viewer
+
+@deftp {Module} gl.simple.viewer
+@mdindex gl.simple.viewer
+This module packages common operations to allow users to
+view 3D objects, controlling the camera by the mouse,
+and have some interactions with the keyboard.
+
+A typical way of using the viewer is like the following:
+
+@example
+(use gl)
+(use gl.glut)
+(use gl.simple.viewer)
+
+(define (main args)
+ (glut-init args)
+ (simple-viewer-display <your-display-thunk>)
+ (simple-viewer-set-key! <key> <handler> ...)
+ (simple-viewer-window <name> :title <title> ...)
+ (simple-viewer-run) ; loop forever. type ESC to exit.
+ 0)
+@end example
+
+The viewer handles mouse drag (to move the camera),
+and also draws reference grid and axes by default for
+your convenience. You have to provide a thunk, which
+must draw your 3D object.
+
+For the keyboard events, you can use a convenient API
+to associate handler to the key (character for normal keys,
+and constants like @code{GL_LEFT_ARROW} for special keys).
+
+The reshape event is handled implicitly, though you can
+override it.
+
+If you call @code{simple-viewer-run}, it enters the event
+loop and never returns. If you wish to keep REPL and/or
+other parts of your application run concurrently,
+the convenient way is to run @code{simple-viewer-run}
+in a separate thread.
+
+@example
+(use gauche.threads)
+
+(define (run-viewer)
+ (thread-start! (make-thread simple-viewer-run #f)))
+@end example
+
+See also the code under @file{examples/simple} directory
+of the source tree for more examples.
+@end deftp
+
+@defun simple-viewer-window name &key title mode parent width height x y
+Creates a new GL window with @var{name}, which must be a symbol
+to identify the window later in the simple viewer framework.
+The window won't be shown until @code{simple-viewer-run} is called.
+
+Each window
+@end defun
+
+
+@defun simple-viewer-display &optional display-thunk
+Gets/sets the display thunk, which is called every time
+the GL window is redrawn. You can change the display thunk
+any time, even while the viewer thread is running.
+
+If no argument is given, returns the current display thunk.
+It can be @code{#f} if no display thunk is set.
+
+When the display thunk is called, the matrix mode is
+@code{MODELVIEW} and the camera transformation is already applied.
+The grid and axes are also drawn, unless you've customized them.
+
+In the display thunk you can just write your model in the
+world coordinate system. It is guaranteed that
+the current color is white and line width is 1.0, but
+the states of other GL contexts are undefined,
+so you have to set them explicitly.
+@end defun
+
+@defun simple-viewer-reshape &optional reshape-proc
+Gets/sets the reshape procedure which is called every
+time the GL window configuration is changed. (It is
+also called when the GL window is shown first time.)
+You can change the reshape procedure any time,
+even while the viewer thread is running.
+
+If no argument is given, returns the current reshape proc.
+
+A reshape procedure is called with two arguments,
+the width and the height (in pixels) of the new GL
+window configuration. By default, @code{gl.simple.viewer}
+sets a procedure that changes viewport and
+projection matrix apopropriately; you need to change
+it only if you want a different behavior.
+@end defun
+
+@defun simple-viewer-grid &optional grid-proc
+@defunx simple-viewer-axis &optional axis-proc
+Gets/sets a procedure to draw a grid and axes.
+You can change these procedures
+any time, even while the viewer thread is running.
+
+The @var{grid-proc} and @var{axis-proc} are called with no arguments
+every time the GL window is redrawn, before the display thunk
+is invoked.
+The matrix mode is @code{MODELVIEW}, the camera transformation
+is already applied, and lighting is disabled.
+
+The default grid proc draws 10x10 grid
+on X-Z plane centered at the origin. The default axis proc
+draws a red line from origin to +X, a green line from origin to +Y,
+and a blue line from origin to +Z.
+
+You can pass @code{#f} to disable grid and/or axis display.
+
+If no argument is given, returns the current grid/axis proc,
+respectively.
+@end defun
+
+@defun simple-viewer-set-key! key handler @dots{}
+Even number of arguments must be given; the first of
+every two specifies the key, and the next one
+specifies the action when the key is pressed.
+@end defun
+
+
+
@c ======================================================================
-@node º÷°ú, , Simple image handling, Top
+@node º÷°ú, , Simple utilities, Top
@appendix º÷°ú
@c NODE º÷°ú