You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(134) |
Sep
(52) |
Oct
(13) |
Nov
(342) |
Dec
(163) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(44) |
Feb
(62) |
Mar
(158) |
Apr
(38) |
May
(70) |
Jun
(58) |
Jul
(104) |
Aug
(207) |
Sep
(83) |
Oct
(122) |
Nov
(23) |
Dec
(49) |
| 2004 |
Jan
(119) |
Feb
(132) |
Mar
(192) |
Apr
(140) |
May
(77) |
Jun
(74) |
Jul
(201) |
Aug
(63) |
Sep
(102) |
Oct
(70) |
Nov
(173) |
Dec
(78) |
| 2005 |
Jan
(174) |
Feb
(197) |
Mar
(105) |
Apr
(59) |
May
(77) |
Jun
(43) |
Jul
(21) |
Aug
(18) |
Sep
(47) |
Oct
(37) |
Nov
(74) |
Dec
(50) |
| 2006 |
Jan
(44) |
Feb
(19) |
Mar
(32) |
Apr
(24) |
May
(31) |
Jun
(55) |
Jul
(138) |
Aug
(28) |
Sep
(12) |
Oct
(41) |
Nov
(58) |
Dec
(24) |
| 2007 |
Jan
(28) |
Feb
(14) |
Mar
(10) |
Apr
(68) |
May
(30) |
Jun
(26) |
Jul
(18) |
Aug
(63) |
Sep
(19) |
Oct
(29) |
Nov
(20) |
Dec
(10) |
| 2008 |
Jan
(38) |
Feb
(7) |
Mar
(37) |
Apr
(120) |
May
(41) |
Jun
(36) |
Jul
(39) |
Aug
(24) |
Sep
(28) |
Oct
(30) |
Nov
(36) |
Dec
(75) |
| 2009 |
Jan
(46) |
Feb
(22) |
Mar
(50) |
Apr
(70) |
May
(134) |
Jun
(105) |
Jul
(75) |
Aug
(34) |
Sep
(38) |
Oct
(34) |
Nov
(19) |
Dec
(20) |
| 2010 |
Jan
(11) |
Feb
(20) |
Mar
(65) |
Apr
(83) |
May
(104) |
Jun
(73) |
Jul
(78) |
Aug
(57) |
Sep
(43) |
Oct
(35) |
Nov
(9) |
Dec
(4) |
| 2011 |
Jan
(21) |
Feb
(11) |
Mar
(18) |
Apr
(10) |
May
(18) |
Jun
(15) |
Jul
(48) |
Aug
(25) |
Sep
(17) |
Oct
(45) |
Nov
(15) |
Dec
(12) |
| 2012 |
Jan
(21) |
Feb
(9) |
Mar
(12) |
Apr
(9) |
May
(9) |
Jun
(5) |
Jul
(1) |
Aug
(10) |
Sep
(12) |
Oct
(1) |
Nov
(28) |
Dec
(5) |
| 2013 |
Jan
(4) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
| 2015 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
| 2016 |
Jan
(2) |
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(1) |
Aug
(2) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
1
(1) |
2
(14) |
3
(4) |
4
|
5
(3) |
6
(1) |
|
7
(9) |
8
(2) |
9
(4) |
10
|
11
(16) |
12
(21) |
13
(14) |
|
14
(12) |
15
(5) |
16
(6) |
17
|
18
(4) |
19
(4) |
20
(3) |
|
21
(2) |
22
(12) |
23
|
24
|
25
(8) |
26
|
27
(25) |
|
28
|
29
(2) |
30
(1) |
|
|
|
|
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-11-30 21:05:14
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2464/src/java/org/lwjgl Modified Files: Sys.java Log Message: Tweak to trap getClipboard properly Index: Sys.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/Sys.java,v retrieving revision 1.62 retrieving revision 1.63 diff -u -d -r1.62 -r1.63 --- Sys.java 25 Nov 2004 22:16:10 -0000 1.62 +++ Sys.java 30 Nov 2004 21:05:04 -0000 1.63 @@ -275,7 +275,7 @@ try { PlatformAdapter adapter = (PlatformAdapter) Class.forName(PLATFORM).newInstance(); // This avoids a Jet error message return adapter.getClipboard(); - } catch (Exception e) { + } catch (Throwable e) { Sys.log("Unable to get clipboard contents: " + e); // ignore exception and use native implementation return nGetClipboard(); |
|
From: Elias N. <eli...@us...> - 2004-11-29 08:20:24
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/opengl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6999 Modified Files: PixelFormat.java Log Message: Minimum requirements for PixelFormat is 8 bit depth Index: PixelFormat.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/opengl/PixelFormat.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- PixelFormat.java 7 Jul 2004 09:38:19 -0000 1.2 +++ PixelFormat.java 29 Nov 2004 08:20:13 -0000 1.3 @@ -70,8 +70,12 @@ /** Whether this format represents a stereo buffer or not */ private final boolean stereo; + /** + * Default pixel format is minimum 8 bits depth, and no alpha + * nor stencil requirements. + */ public PixelFormat() { - this(0, 0, 0); + this(0, 8, 0); } public PixelFormat(int alpha, int depth, int stencil) { |
|
From: Elias N. <eli...@us...> - 2004-11-29 08:16:31
|
Update of /cvsroot/java-game-lib/LWJGL/src/native/common In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6117/common Modified Files: org_lwjgl_opengl_GL11.c Log Message: Index: org_lwjgl_opengl_GL11.c =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/native/common/org_lwjgl_opengl_GL11.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- org_lwjgl_opengl_GL11.c 25 Nov 2004 22:36:07 -0000 1.5 +++ org_lwjgl_opengl_GL11.c 29 Nov 2004 08:16:21 -0000 1.6 @@ -2376,7 +2376,7 @@ static void JNICALL Java_org_lwjgl_opengl_GL11_nglTexImage2D(JNIEnv * env, jclass clazz, jint p0, jint p1, jint p2, jint p3, jint p4, jint p5, jint p6, jint p7, jobject buffer, jint offset) { GLvoid *buffer_ptr = (GLvoid *)safeGetBufferAddress(env, buffer, offset); - glTexImage2D((GLint) p0, (GLint) p1, (GLint) p2, (GLint) p3, (GLint) p4, (GLint) p5, (GLint) p6, (GLint) p7, buffer); + glTexImage2D((GLint) p0, (GLint) p1, (GLint) p2, (GLint) p3, (GLint) p4, (GLint) p5, (GLint) p6, (GLint) p7, buffer_ptr); } |
Update of /cvsroot/java-game-lib/LWJGL/www In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28743 Modified Files: documentation_openal_01.php documentation_openal_02.php documentation_openal_03.php documentation_openal_04.php documentation_openal_05.php Log Message: missing openal tutorial files Index: documentation_openal_04.php =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/www/documentation_openal_04.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- documentation_openal_04.php 27 Nov 2004 16:02:05 -0000 1.1 +++ documentation_openal_04.php 27 Nov 2004 16:06:38 -0000 1.2 @@ -143,8 +143,4 @@ of how OpenAL interacts with the operation system. </p> -<p> - Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson4.zip">here</a>. -</p> - <? require('_include/footer.php'); ?> Index: documentation_openal_01.php =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/www/documentation_openal_01.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- documentation_openal_01.php 27 Nov 2004 16:02:05 -0000 1.1 +++ documentation_openal_01.php 27 Nov 2004 16:06:38 -0000 1.2 @@ -372,7 +372,7 @@ </p> <p> - Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson1.zip">here</a>. + Download source code and resources for this lesson <a href="_files/tutorials/openal_devmaster_lesson1.zip">here</a>. </p> <? require('_include/footer.php'); ?> Index: documentation_openal_03.php =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/www/documentation_openal_03.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- documentation_openal_03.php 27 Nov 2004 16:02:05 -0000 1.1 +++ documentation_openal_03.php 27 Nov 2004 16:06:38 -0000 1.2 @@ -297,7 +297,7 @@ </p> <p> - Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson3.zip">here</a>. + Download source code and resources for this lesson <a href="_files/tutorials/openal_devmaster_lesson3.zip">here</a>. </p> <? require('_include/footer.php'); ?> Index: documentation_openal_05.php =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/www/documentation_openal_05.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- documentation_openal_05.php 27 Nov 2004 16:02:05 -0000 1.1 +++ documentation_openal_05.php 27 Nov 2004 16:06:38 -0000 1.2 @@ -259,7 +259,7 @@ </p> <p> - Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson5.zip">here</a>. + Download source code and resources for this lesson <a href="_files/tutorials/openal_devmaster_lesson5.zip">here</a>. </p> <? require('_include/footer.php'); ?> Index: documentation_openal_02.php =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/www/documentation_openal_02.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- documentation_openal_02.php 27 Nov 2004 16:02:05 -0000 1.1 +++ documentation_openal_02.php 27 Nov 2004 16:06:38 -0000 1.2 @@ -235,7 +235,7 @@ </p> <p> - Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson2.zip">here</a>. + Download source code and resources for this lesson <a href="_files/tutorials/openal_devmaster_lesson2.zip">here</a>. </p> <? require('_include/footer.php'); ?> |
|
From: Brian M. <ma...@us...> - 2004-11-27 16:06:48
|
Update of /cvsroot/java-game-lib/LWJGL/www/_files/tutorials In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28743/_files/tutorials Added Files: openal_devmaster_lesson1.zip openal_devmaster_lesson2.zip openal_devmaster_lesson3.zip openal_devmaster_lesson5.zip Log Message: missing openal tutorial files --- NEW FILE: openal_devmaster_lesson3.zip --- (This appears to be a binary file; contents omitted.) --- NEW FILE: openal_devmaster_lesson2.zip --- (This appears to be a binary file; contents omitted.) --- NEW FILE: openal_devmaster_lesson5.zip --- (This appears to be a binary file; contents omitted.) --- NEW FILE: openal_devmaster_lesson1.zip --- (This appears to be a binary file; contents omitted.) |
|
From: Brian M. <ma...@us...> - 2004-11-27 16:05:37
|
Update of /cvsroot/java-game-lib/LWJGL/www/_files/tutorials In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28608/tutorials Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_files/tutorials added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 16:05:24
|
Update of /cvsroot/java-game-lib/LWJGL/www/_files In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28569/_files Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_files added to the repository |
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/projects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27868/_gfx/projects Added Files: alienflux_1.jpg alienflux_2.jpg alienflux_3.jpg alienflux_small_1.jpg alienflux_small_2.jpg alienflux_small_3.jpg extorris_1.jpg extorris_2.jpg extorris_3.jpg extorris_small_1.jpg extorris_small_2.jpg extorris_small_3.jpg starship2d_1.jpg starship2d_2.jpg starship2d_3.jpg starship2d_small_1.jpg starship2d_small_2.jpg starship2d_small_3.jpg tribaltrouble_1.jpg tribaltrouble_2.jpg tribaltrouble_3.jpg tribaltrouble_small_1.jpg tribaltrouble_small_2.jpg tribaltrouble_small_3.jpg vermins_1.jpg vermins_2.jpg vermins_small_1.jpg vermins_small_2.jpg Log Message: sync site with online --- NEW FILE: vermins_small_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: starship2d_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: vermins_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: alienflux_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: alienflux_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: extorris_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: extorris_small_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: starship2d_small_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: vermins_small_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: starship2d_small_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: extorris_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: starship2d_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: extorris_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: alienflux_small_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: extorris_small_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: tribaltrouble_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: tribaltrouble_small_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: tribaltrouble_small_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: alienflux_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: extorris_small_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: alienflux_small_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: starship2d_small_1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: tribaltrouble_2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: starship2d_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: alienflux_small_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: tribaltrouble_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: tribaltrouble_small_3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: vermins_2.jpg --- (This appears to be a binary file; contents omitted.) |
|
From: Brian M. <ma...@us...> - 2004-11-27 16:02:24
|
Update of /cvsroot/java-game-lib/LWJGL/www/_include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27868/_include Added Files: footer.php header.php Log Message: sync site with online --- NEW FILE: header.php --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>lwjgl.org - Home of the Lightweight Java Game Library</title> <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body> <div class="mainFrame"> <div class="borderTop"><span class="left"></span><span class="right"></span></div> <div class="contentFrame"> <div class="header"><a href="index.php"><img src="_gfx/logo.png" alt="LWJGL - Lightweigt Java Game Library" border="0"/></a></div> <div class="menu"> <h2>LWJGL</h2> <p> <a href="index.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'index.php') !== false) ? ' class="activeItem"' : '');?>>Home</a><br/> <a href="about.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'about.php') !== false) ? ' class="activeItem"' : '');?>>About</a><br/> <a href="download.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'download.php') !== false) ? ' class="activeItem"' : '');?>>Download</a><br/> <a href="installation.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'installation.php') !== false) ? ' class="activeItem"' : '');?>>Installation</a><br/> <a href="documentation.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'documentation.php') !== false || strpos($_SERVER['SCRIPT_NAME'], 'documentation_') !== false) ? ' class="activeItem"' : '');?>>Documentation</a><br/> <a href="http://wiki.lwjgl.org" target="_blank">Wiki</a><br/> <a href="http://forum.lwjgl.org" target="_blank">Forum</a><br/> <a href="faq.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'faq.php') !== false) ? ' class="activeItem"' : '');?>>FAQ</a><br/> <a href="projects.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'projects.php') !== false) ? ' class="activeItem"' : '');?>>Projects</a><br/> <a href="demos.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'demos.php') !== false) ? ' class="activeItem"' : '');?>>Demos</a><br/> <a href="license.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'license.php') !== false) ? ' class="activeItem"' : '');?>>License</a><br/> <a href="contact.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'contact.php') !== false) ? ' class="activeItem"' : '');?>>Contact</a><br/> <a href="credits.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'credits.php') !== false) ? ' class="activeItem"' : '');?>>Credits</a><br/> </p> <h2>Developers</h2> <p> <a href="http://cvs.sourceforge.net/viewcvs.py/java-game-lib/" target="_blank">CVS Tree</a><br/> <a href="http://sourceforge.net/projects/java-game-lib" target="_blank">Project Home</a><br/> </p> <h2>Miscellaneous</h2> <p> <a href="links.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'links.php') !== false) ? ' class="activeItem"' : '');?>>Links</a><br/> <a href="changelog.php"<?=((strpos($_SERVER['SCRIPT_NAME'], 'changelog.php') !== false) ? ' class="activeItem"' : '');?>>Changelog</a><br/> </p> <p> <br/><a href="http://www.opengl.org" target="_blank"><img src="_gfx/button_opengl.png" alt="OpenGL" border="0"></a><br/><br/> <a href="http://www.openal.org" target="_blank"><img src="_gfx/button_openal.png" alt="OpenAL" border="0"></a><br/><br/> <a href="http://java.net" target="_blank"><img src="_gfx/button_javanet.png" alt="java.net" border="0"></a><br/><br/> <a href="http://sourceforge.net" target="_blank"><img src="_gfx/button_sourceforge.png" alt="SourceForge.net" border="0"></a><br/><br/> </p> </div> <div class="content"> --- NEW FILE: footer.php --- </div> <div class="clear"> </div> </div> <div class="borderBottom"><span class="left"></span><span class="right">content © by lwjgl.org - design © by <a href="http://www.gomjabbar.de" target="_blank">Daniel Leinich</a></span></div> </div> </body> </html> |
|
From: Brian M. <ma...@us...> - 2004-11-27 16:02:23
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/tutorials/openal/devmaster In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27868/_gfx/tutorials/openal/devmaster Added Files: compress_sin_wave.jpg doppler_effect.jpg sin_wave.jpg sound_waves.jpg Log Message: sync site with online --- NEW FILE: sin_wave.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: sound_waves.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: doppler_effect.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: compress_sin_wave.jpg --- (This appears to be a binary file; contents omitted.) |
|
From: Brian M. <ma...@us...> - 2004-11-27 16:02:19
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27868/_gfx Added Files: background.png borderBottom.png borderLeft.png borderRight.png borderTop.png button_javanet.png button_openal.png button_opengl.png button_sourceforge.png cornerBL.png cornerBR.png cornerTL.png cornerTR.png logo.png mesh.png seperator.png Log Message: sync site with online --- NEW FILE: button_javanet.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: cornerTR.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: cornerBR.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: borderBottom.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: button_openal.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: borderLeft.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mesh.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: logo.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: button_opengl.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: background.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: button_sourceforge.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: borderTop.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: cornerBL.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: seperator.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: cornerTL.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: borderRight.png --- (This appears to be a binary file; contents omitted.) |
|
From: Brian M. <ma...@us...> - 2004-11-27 16:02:17
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/installation In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27868/_gfx/installation Added Files: eclipse-1.png eclipse-2.png eclipse-3.png eclipse-4.png jcreator-1.jpg jcreator-2.jpg jcreator-3.jpg netbeans-1.png netbeans-2.png netbeans-3.png Log Message: sync site with online --- NEW FILE: eclipse-4.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: eclipse-3.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: jcreator-1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: jcreator-3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: jcreator-2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: eclipse-1.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: eclipse-2.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: netbeans-1.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: netbeans-2.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: netbeans-3.png --- (This appears to be a binary file; contents omitted.) |
Update of /cvsroot/java-game-lib/LWJGL/www In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27868 Added Files: about.php changelog.php contact.php credits.php demos.php documentation.php documentation_openal_01.php documentation_openal_02.php documentation_openal_03.php documentation_openal_04.php documentation_openal_05.php documentation_openal_06.php documentation_openal_07.php download.php faq.php index.php installation.php license.php links.php picpopup.php projects.php style.css Log Message: sync site with online --- NEW FILE: documentation_openal_03.php --- <? require('_include/header.php'); ?> <div style="margin: 0px 0px 10px 10px; width: 240px; float: right; border: 1px solid #000000;"> <table border="0" cellpadding="3" cellspacing="0"> <tr> <td width="100%" style="text-align: center; background-color: #cccccc; font-weight: bold; border-bottom: 1px solid #000000;" colspan="2">Other Articles in the Series</td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_01.php">Lesson 1: Single Static Source</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_02.php">Lesson 2: Looping and Fade-away</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_03.php">Lesson 3: Multiple Sources</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_04.php">Lesson 4: A Closer Look at ALC</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_05.php">Lesson 5: Sources Sharing Buffers</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_06.php">Lesson 6: Advanced Loading and Error Handles</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_07.php">Lesson 7: The Doppler Effect</a></td> </tr> </table> </div> <h1>Multiple Sources: Lesson 3</h1> <p> <i> Author: <a href="mailto:lig...@ho...">Jesse Maurais</a> | From: <a href="http://www.devmaster.net/articles.php?catID=6" target="_blank">devmaster.net</a><br/> Modified for LWJGL by: <a href="mailto:br...@ma...">Brian Matzon</a> </i> </p> <p> Hello. It's been a while since my last tutorial. But better late than never I guess. Since I'm sure your all impatient to read the latest tutorial, I'll just jump right into it. What we hope to accomplish with this one is to be able to play more that one audio sample at a time. Very intense games have all kinds of stuff going on usually involving different sound clips. It won't be hard to implement any of this though. Doing multiple sounds is similar to doing just one. </p> <pre class="code" style="clear: right;"> <span class="codeKeyword">import</span> java.io.IOException; <span class="codeKeyword">import</span> java.nio.FloatBuffer; <span class="codeKeyword">import</span> java.nio.IntBuffer; <span class="codeKeyword">import</span> java.util.Random; <span class="codeKeyword">import</span> org.lwjgl.BufferUtils; <span class="codeKeyword">import</span> org.lwjgl.LWJGLException; <span class="codeKeyword">import</span> org.lwjgl.openal.AL; <span class="codeKeyword">import</span> org.lwjgl.openal.AL10; <span class="codeKeyword">import</span> org.lwjgl.test.openal.WaveData; <span class="codeKeyword">public class</span> Lesson3 { <span class="codeComment">/** Maximum data buffers we will need. */</span> <span class="codeKeyword">public static final int</span> NUM_BUFFERS = 3; <span class="codeComment">/** Maximum emissions we will need. */</span> <span class="codeKeyword">public static final int</span> NUM_SOURCES = 3; <span class="codeComment">/** Index of battle sound */</span> <span class="codeKeyword">public static final int</span> BATTLE = 0; <span class="codeComment">/** Index of gun 1 sound */</span> <span class="codeKeyword">public static final int</span> GUN1 = 1; <span class="codeComment">/** Index of gun 2 sound */</span> <span class="codeKeyword">public static final int</span> GUN2 = 2; <span class="codeComment"> /** Buffers hold sound data. */</span> IntBuffer buffer = BufferUtils.createIntBuffer(NUM_BUFFERS); <span class="codeComment"> /** Sources are points emitting sound. */</span> IntBuffer source = BufferUtils.createIntBuffer(NUM_BUFFERS); <span class="codeComment"> /** Position of the source sound. */</span> FloatBuffer sourcePos = BufferUtils.createFloatBuffer(3*NUM_BUFFERS); <span class="codeComment"> /** Velocity of the source sound. */</span> FloatBuffer sourceVel = BufferUtils.createFloatBuffer(3*NUM_BUFFERS); <span class="codeComment"> /** Position of the listener. */</span> FloatBuffer listenerPos = BufferUtils.createFloatBuffer(3).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, 0.0f }); <span class="codeComment"> /** Velocity of the listener. */</span> FloatBuffer listenerVel = BufferUtils.createFloatBuffer(3).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, 0.0f }); <span class="codeComment"> /** Orientation of the listener. (first 3 elements are "at", second 3 are "up") */</span> FloatBuffer listenerOri = BufferUtils.createFloatBuffer(6).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f }); </pre> <p> I guess this little piece of source code will be familiar to a lot of you who've read the first two tutorials. The only difference is that we now have 3 different sound effects that we are going to load into the OpenAL sound system. </p> <pre class="code"> <span class="codeComment"> /** * boolean LoadALData() * * This function will load our sample data from the disk using the Alut * utility and send the data into OpenAL as a buffer. A source is then * also created to play that buffer. */</span> <span class="codeKeyword">int</span> loadALData() { <span class="codeComment">// Load wav data into a buffer.</span> AL10.alGenBuffers(buffer); <span class="codeKeyword">if</span>(AL10.alGetError() != AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_FALSE; WaveData waveFile = WaveData.create("Battle.wav"); AL10.alBufferData(buffer.get(BATTLE), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); waveFile = WaveData.create("Gun1.wav"); AL10.alBufferData(buffer.get(GUN1), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); waveFile = WaveData.create("Gun2.wav"); AL10.alBufferData(buffer.get(GUN2), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); <span class="codeComment">// Bind buffers into audio sources.</span> AL10.alGenSources(source); <span class="codeKeyword">if</span> (AL10.alGetError() != AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_FALSE; AL10.alSourcei(source.get(BATTLE), AL10.AL_BUFFER, buffer.get(BATTLE)); AL10.alSourcef(source.get(BATTLE), AL10.AL_PITCH, 1.0f ); AL10.alSourcef(source.get(BATTLE), AL10.AL_GAIN, 1.0f ); AL10.alSource (source.get(BATTLE), AL10.AL_POSITION, (FloatBuffer) sourcePos.position(BATTLE*3)); AL10.alSource (source.get(BATTLE), AL10.AL_VELOCITY, (FloatBuffer) sourceVel.position(BATTLE*3)); AL10.alSourcei(source.get(BATTLE), AL10.AL_LOOPING, AL10.AL_TRUE ); AL10.alSourcei(source.get(GUN1), AL10.AL_BUFFER, buffer.get(GUN1)); AL10.alSourcef(source.get(GUN1), AL10.AL_PITCH, 1.0f ); AL10.alSourcef(source.get(GUN1), AL10.AL_GAIN, 1.0f ); AL10.alSource (source.get(GUN1), AL10.AL_POSITION, (FloatBuffer) sourcePos.position(GUN1*3)); AL10.alSource (source.get(GUN1), AL10.AL_VELOCITY, (FloatBuffer) sourceVel.position(GUN1*3)); AL10.alSourcei(source.get(GUN1), AL10.AL_LOOPING, AL10.AL_FALSE ); AL10.alSourcei(source.get(GUN2), AL10.AL_BUFFER, buffer.get(GUN2)); AL10.alSourcef(source.get(GUN2), AL10.AL_PITCH, 1.0f ); AL10.alSourcef(source.get(GUN2), AL10.AL_GAIN, 1.0f ); AL10.alSource (source.get(GUN2), AL10.AL_POSITION, (FloatBuffer) sourcePos.position(GUN2*3)); AL10.alSource (source.get(GUN2), AL10.AL_VELOCITY, (FloatBuffer) sourceVel.position(GUN2*3)); AL10.alSourcei(source.get(GUN2), AL10.AL_LOOPING, AL10.AL_FALSE ); <span class="codeComment">// Do another error check and return.</span> <span class="codeKeyword">if</span> (AL10.alGetError() == AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_TRUE; <span class="codeKeyword">return</span> AL10.AL_FALSE; </pre> <p> This code looks quite a bit different at first, but it isn't really. Basically we load the file data into our 3 buffers, then lock the 3 buffers to our 3 sources relatively. The only other difference is that the "Battle.wav" (Source index 0) is looping while the rest are not.<br/><br/> <i><b>NOTE:</b> Notice how the buffers position is changed. Since we know a vector in the buffer consists of 3 floats, we use this knowledge to index into the buffer and position us precisely where the next vector begins. We could have used multiple buffers, but this is quicker, and takes up less code - at a slight cost of added complexity.</i> </p> <pre class="code"> <span class="codeComment"> /** * void setListenerValues() * * We already defined certain values for the Listener, but we need * to tell OpenAL to use that data. This function does just that. */</span> <span class="codeKeyword">void</span> setListenerValues() { AL10.alListener(AL10.AL_POSITION, listenerPos); AL10.alListener(AL10.AL_VELOCITY, listenerVel); AL10.alListener(AL10.AL_ORIENTATION, listenerOri); } <span class="codeComment"> /** * void killALData() * * We have allocated memory for our buffers and sources which needs * to be returned to the system. This function frees that memory. */</span> <span class="codeKeyword">void</span> killALData() { AL10.alDeleteSources(source); AL10.alDeleteBuffers(buffer); } </pre> <p> I don't think we changed anything in this code. </p> <pre class="code"> <span class="codeKeyword">public static void</span> main(String[] args) { <span class="codeKeyword">new</span> Lesson3().execute(); } <span class="codeComment"> /** * Check for keyboard hit */</span> <span class="codeKeyword">private boolean</span> kbhit() { <span class="codeKeyword">try</span> { <span class="codeKeyword">return</span> (System.in.available() != 0); } <span class="codeKeyword">catch</span> (IOException ioe) { } <span class="codeKeyword">return false</span>; } <span class="codeKeyword">public void</span> execute() { <span class="codeComment">// Initialize OpenAL and clear the error bit.</span> <span class="codeKeyword">try</span>{ AL.create(); } <span class="codeKeyword">catch</span> (LWJGLException le) { le.printStackTrace(); <span class="codeKeyword">return</span>; } AL10.alGetError(); <span class="codeComment"> // Load the wav data.</span> <span class="codeKeyword">if</span>(loadALData() == AL10.AL_FALSE) { System.out.println("Error loading data."); <span class="codeKeyword">return</span>; } setListenerValues(); <span class="codeComment">// Begin the battle sample to play.</span> AL10.alSourcePlay(source.get(BATTLE)); <span class="codeComment">// Go through all the sources and check that they are playing. // Skip the first source because it is looping anyway (will always be playing).</span> <span class="codeKeyword">int</span> play; Random random = <span class="codeKeyword">new</span> Random(); <span class="codeKeyword">while</span> (!kbhit()) { <span class="codeKeyword">for</span> (<span class="codeKeyword">int</span> i=1; i<NUM_SOURCES; i++) { play = AL10.alGetSourcei(source.get(i), AL10.AL_SOURCE_STATE); <span class="codeKeyword">if</span> (play != AL10.AL_PLAYING) { <span class="codeKeyword">double</span> theta = (<span class="codeKeyword">double</span>) (random.nextInt() % 360) * 3.14 / 180.0; sourcePos.put(i*3+0, -(<span class="codeKeyword">float</span>) (Math.cos(theta))); sourcePos.put(i*3+1, -(<span class="codeKeyword">float</span>) (random.nextInt()%2)); sourcePos.put(i*3+2, -(<span class="codeKeyword">float</span>) (Math.sin(theta))); AL10.alSource(source.get(i), AL10.AL_POSITION, (FloatBuffer) sourcePos.position(i*3)); AL10.alSourcePlay(source.get(i)); } } killALData(); } } </pre> <p> Here is the interesting part of this tutorial. We go through each of the sources to make sure it's playing. If it is not then we set it to play but we select a new point in 3D space for it to play (just for kicks). And bang! We are done. As most of you have probably seen, you don't have to do anything special to play more than one source at a time. OpenAL will handle all the mixing features to get the sounds right for their respective distances and velocities. And when it comes right down to it, isn't that the beauty of OpenAL? You know that was a lot easier than I thought. I don't know why I waited so long to write it. Anyway, if anyone reading wants to see something specific in future tutorials (not necessarily pertaining to OpenAL, I have quite an extensive knowledge base) drop me a line at <a href="mailto:lig...@ho...">lig...@ho...</a> I plan to do tutorials on sharing buffers and the Doppler effect in some later tutorial unless there is request for something else.<br/><br/> Have fun with the code! </p> <p> Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson3.zip">here</a>. </p> <? require('_include/footer.php'); ?> --- NEW FILE: documentation_openal_05.php --- <? require('_include/header.php'); ?> <div style="margin: 0px 0px 10px 10px; width: 240px; float: right; border: 1px solid #000000;"> <table border="0" cellpadding="3" cellspacing="0"> <tr> <td width="100%" style="text-align: center; background-color: #cccccc; font-weight: bold; border-bottom: 1px solid #000000;" colspan="2">Other Articles in the Series</td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_01.php">Lesson 1: Single Static Source</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_02.php">Lesson 2: Looping and Fade-away</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_03.php">Lesson 3: Multiple Sources</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_04.php">Lesson 4: A Closer Look at ALC</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_05.php">Lesson 5: Sources Sharing Buffers</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_06.php">Lesson 6: Advanced Loading and Error Handles</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_07.php">Lesson 7: The Doppler Effect</a></td> </tr> </table> </div> <h1>Sources Sharing Buffers: Lesson 5</h1> <p> <i> Author: <a href="mailto:lig...@ho...">Jesse Maurais</a> | From: <a href="http://www.devmaster.net/articles.php?catID=6" target="_blank">devmaster.net</a><br/> Modified for LWJGL by: <a href="mailto:br...@ma...">Brian Matzon</a> </i> </p> <p> At this point in the OpenAL series I will show one method of having your buffers be shared among many sources. This is a very logical and natural step, and it is so easy that some of you may have already done this yourself. If you have you may just skip this tutorial in total and move on. But for those keeners who want to read all of the info I've got to give, you may find this interesting.<br/> Well, here we go. I've decided to only go over bits of the code that are significant, since most of the code has been repeated so far in the series. Check out the full source code in the download. </p> <pre class="code" style="clear: right;"> <span class="codeKeyword">import</span> java.io.IOException; <span class="codeKeyword">import</span> java.nio.FloatBuffer; <span class="codeKeyword">import</span> java.nio.IntBuffer; <span class="codeKeyword">import</span> org.lwjgl.BufferUtils; <span class="codeKeyword">import</span> org.lwjgl.LWJGLException; <span class="codeKeyword">import</span> org.lwjgl.openal.AL; <span class="codeKeyword">import</span> org.lwjgl.openal.AL10; <span class="codeKeyword">import</span> org.lwjgl.test.openal.WaveData; <span class="codeKeyword">public class</span> Lesson5 { <span class="codeComment">/** Index of thunder sound */</span> <span class="codeKeyword">public static final int</span> THUNDER = 0; <span class="codeComment">/** Index of waterdrop sound */</span> <span class="codeKeyword">public static final int</span> WATERDROP = 1; <span class="codeComment">/** Index of stream sound */</span> <span class="codeKeyword">public static final int</span> STREAM = 2; <span class="codeComment">/** Index of rain sound */</span> <span class="codeKeyword">public static final int</span> RAIN = 2; <span class="codeComment">/** Index of chimes sound */</span> <span class="codeKeyword">public static final int</span> CHIMES = 2; <span class="codeComment">/** Index of ocean sound */</span> <span class="codeKeyword">public static final int</span> OCEAN = 2; <span class="codeComment">/** Maximum data buffers we will need. */</span> <span class="codeKeyword">public static final int</span> NUM_BUFFERS = 6; <span class="codeComment"> /** Buffers hold sound data. */</span> IntBuffer buffer = BufferUtils.createIntBuffer(NUM_BUFFERS); <span class="codeComment"> /** Sources are points emitting sound. */</span> IntBuffer source = BufferUtils.createIntBuffer(128); </pre> <p> We will be using several wav files so we need quite a few buffers here. We will be using at most 128 sources (typically OpenAL will stop at 32-64 sources, but you shouldn't rely on more than 16!). We can just keep adding sources to the scene until OpenAL runs out of them. This is also the first tutorial where we will deal with sources as being a resource that will run out. And yes, they will run out; they are finite. </p> <pre class="code"> <span class="codeComment"> /** * boolean LoadALData() * * This function will load our sample data from the disk using the Alut * utility and send the data into OpenAL as a buffer. A source is then * also created to play that buffer. */</span> <span class="codeKeyword">int</span> loadALData() { <span class="codeComment">// Load wav data into a buffer.</span> AL10.alGenBuffers(buffer); <span class="codeKeyword">if</span>(AL10.alGetError() != AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_FALSE; WaveData waveFile = WaveData.create("thunder.wav"); AL10.alBufferData(buffer.get(THUNDER), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); waveFile = WaveData.create("waterdrop.wav"); AL10.alBufferData(buffer.get(WATERDROP), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); waveFile = WaveData.create("stream.wav"); AL10.alBufferData(buffer.get(STREAM), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); waveFile = WaveData.create("rain.wav"); AL10.alBufferData(buffer.get(RAIN), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); waveFile = WaveData.create("ocean.wav"); AL10.alBufferData(buffer.get(OCEAN), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); waveFile = WaveData.create("chimes.wav"); AL10.alBufferData(buffer.get(CHIMES), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); <span class="codeComment">// Do another error check and return.</span> <span class="codeKeyword">if</span> (AL10.alGetError() == AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_TRUE; <span class="codeKeyword">return</span> AL10.AL_FALSE; </pre> <p> We've totally removed the source generation from this function. That's because from now on we will be initializing the sources separately. </p> <pre class="code"> <span class="codeComment"> /** * void AddSource(ALint type) * * Will add a new water drop source to the audio scene. */</span> <span class="codeKeyword">private void</span> addSource(<span class="codeKeyword">int</span> type) { <span class="codeKeyword">int</span> position = source.position(); source.limit(position + 1); AL10.alGenSources(source); <span class="codeKeyword">if</span> (AL10.alGetError() != AL10.AL_NO_ERROR) { System.out.println("Error generating audio source."); System.exit(-1); } AL10.alSourcei(source.get(position), AL10.AL_BUFFER, buffer.get(type) ); AL10.alSourcef(source.get(position), AL10.AL_PITCH, 1.0f ); AL10.alSourcef(source.get(position), AL10.AL_GAIN, 1.0f ); AL10.alSource (source.get(position), AL10.AL_POSITION, sourcePos ); AL10.alSource (source.get(position), AL10.AL_VELOCITY, sourceVel ); AL10.alSourcei(source.get(position), AL10.AL_LOOPING, AL10.AL_TRUE ); AL10.alSourcePlay(source.get(position)); // next index source.position(position+1); } </pre> <p> Here's the function that will generate the sources for us. This function will generate a single source for any one of the loaded buffers we generated in the previous source. Given the buffer index 'type'. We do an error check to make sure we have a source to play (like I said, they are finite). If a source cannot be allocated then the program will exit. </p> <pre class="code"> <span class="codeComment">/** * void killALData() * * We have allocated memory for our buffers and sources which needs * to be returned to the system. This function frees that memory. */</span> <span class="codeKeyword">void</span> killALData() { <span class="codeComment">// set to 0, num_sources</span> <span class="codeKeyword">int</span> position = source.position(); source.position(0).limit(position); AL10.alDeleteSources(source); AL10.alDeleteBuffers(buffer); } </pre> <p> This function has been modified a bit to accommodate the number of actually created sources. </p> <pre class="code"> <span class="codeComment">// Loop.</span> <span class="codeKeyword">char</span> c = ' '; <span class="codeKeyword">while</span>(c != 'q') { <span class="codeKeyword">try</span> { c = (<span class="codeKeyword">char</span>) System.in.read(); } <span class="codeKeyword">catch</span> (IOException ioe) { c = 'q'; } <span class="codeKeyword">switch</span>(c) { <span class="codeKeyword">case</span> 'w': addSource(WATERDROP); <span class="codeKeyword">break</span>; <span class="codeKeyword">case</span> 't': addSource(THUNDER); <span class="codeKeyword">break</span>; <span class="codeKeyword">case</span> 's': addSource(STREAM); <span class="codeKeyword">break</span>; <span class="codeKeyword">case</span> 'r': addSource(RAIN); <span class="codeKeyword">break</span>; <span class="codeKeyword">case</span> 'o': addSource(OCEAN); <span class="codeKeyword">break</span>; <span class="codeKeyword">case</span> 'c': addSource(CHIMES); <span class="codeKeyword">break</span>; }; } killALData(); } } </pre> <p> Here is the programs inner loop taken straight out of our main. Basically it waits for some keyboard input and on certain key hits it will create a new source of a certain type and add it to the audio scene. Essentially what we have created here is something like one of those nature tapes that people listen to for relaxation. Ours is a little better since it allows the user to customize which sounds that they want in the background. Pretty neat eh? I've been listening to mine while I code. It's a Zen experience (I'm listening to it right now).<br/><br/> The program can be expanded for using more wav files, and have the added feature of placing the sources around the scene in arbitrary positions. You could even allow for sources to play with a given frequency rather than have them loop. However this would require GUI routines that go beyond the scope of the tutorial. A full featured "Weathering Engine" would be a nifty program to make though. ;) </p> <p> Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson5.zip">here</a>. </p> <? require('_include/footer.php'); ?> --- NEW FILE: documentation_openal_04.php --- <? require('_include/header.php'); ?> <div style="margin: 0px 0px 10px 10px; width: 240px; float: right; border: 1px solid #000000;"> <table border="0" cellpadding="3" cellspacing="0"> <tr> <td width="100%" style="text-align: center; background-color: #cccccc; font-weight: bold; border-bottom: 1px solid #000000;" colspan="2">Other Articles in the Series</td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_01.php">Lesson 1: Single Static Source</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_02.php">Lesson 2: Looping and Fade-away</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_03.php">Lesson 3: Multiple Sources</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_04.php">Lesson 4: A Closer Look at ALC</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_05.php">Lesson 5: Sources Sharing Buffers</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_06.php">Lesson 6: Advanced Loading and Error Handles</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_07.php">Lesson 7: The Doppler Effect</a></td> </tr> </table> </div> <h1>A Closer Look at ALC: Lesson 4</h1> <p> <i> Author: <a href="mailto:lig...@ho...">Jesse Maurais</a> | From: <a href="http://www.devmaster.net/articles.php?catID=6" target="_blank">devmaster.net</a><br/> Modified for LWJGL by: <a href="mailto:br...@ma...">Brian Matzon</a> </i> </p> <p> <i><b>Note:</b>This article originally deals with ALC Context management, and especially using multiple contexts. The LWJGL binding does <b>not</b> expose multiple contexts, nor do we have any plans to do so. It is an advanced feature, not used in games. This article has also been edited heavily to make sense in an LWJGL environment which doesn't expose ALC directly.</i> </p> <p> Up until now we have been letting <code>AL.create()</code> do all the real tricky stuff for us. For example handling the audio devices. It's really nice that the <code>AL.create()</code> method is there to provide this functionality, but any smart coder will want to know exactly what their doing. We may want to, at some point, use the verbose <code>AL.create(String deviceArguments, <span class="codeKeyword">int</span> contextFrequency, <span class="codeKeyword">int</span> contextRefresh, <span class="codeKeyword">boolean</span> contextSynchronized)</code> method. In this tutorial we will expose the Alc layer and take a look at how to handle the devices on our own.</p> </p> <p> When using either of the two create methods of <code>AL</code>, a default context and device is created for you. You cannot create multiple contexts nor can you access multiple devices. Thus a lot of the ALC methods are not available, since they simply don't make any sense. Methods that are available also no longer take a device or context parameter since they are managed internally. </p> <pre class="code" style="clear: right;"> <span class="codeComment">// Initialize OpenAL and clear the error bit.</span> <span class="codeKeyword">try</span>{ AL.create(); } <span class="codeKeyword">catch</span> (LWJGLException le) { le.printStackTrace(); <span class="codeKeyword">return</span>; } AL10.alGetError(); </pre> <p> Using the default create method is the simplest way to create a context and access a device. Default values are used, and once called OpenAL is initialized and ready to go. </p> <pre class="code"> <span class="codeComment">// Initialize OpenAL and clear the error bit.</span> <span class="codeKeyword">try</span>{ AL.create("DirectSound3D", 44100, 15, <span class="codeKeyword">false</span>); } <span class="codeKeyword">catch</span> (LWJGLException le) { le.printStackTrace(); <span class="codeKeyword">return</span>; } AL10.alGetError(); </pre> <p> Here we initialize OpenAL using arguments for ALC. The first argument tells ALC which device to access. Passing null is a perfectly valid argument. It forces the ALC to use a default device.<br/> The second argument tells ALC the frequency for mixing output buffer, in units of Hz. Third argument tells ALC how often it should update it's internal state and buffers. The final argument determines whether the ALC should run in synchronous mode. </p> <pre class="code"> <span class="codeKeyword">public static int</span> alcGetError(); <span class="codeKeyword">public static boolean</span> alcIsExtensionPresent(String extName); <span class="codeKeyword">public static int</span> alcGetEnumValue(String enumName); <span class="codeKeyword">public static </span>String alcGetString(<span class="codeKeyword">int</span> pname); <span class="codeKeyword">public static void</span> alcGetInteger(<span class="codeKeyword">int</span> pname, IntBuffer integerdata); </pre> <p> It may be pretty obvious to you what these do, but lets humour ourselves and have a closer look. First we have 'alcGetError' which is just like 'alGetError' but will return Alc errors. The next two functions are for querying Alc extensions. This was just the creators planning ahead, as there are no Alc extensions either. The last function, 'alcGetInteger', will return the Alc version when passed 'ALC_MAJOR_VERSION' or 'ALC_MINOR_VERSION'.<br/><br/> The function 'alcGetString' is pretty cool. It can take any of the following three parameters to 'token':<br/><br/> * ALC_DEFAULT_DEVICE_SPECIFIER<br/> * ALC_DEVICE_SPECIFIER<br/> * ALC_EXTENSIONS<br/><br/> The first will return the device string which your OpenAL implementation will prefer you to use. In current OpenAL this should be "DirectSound3D", like we used above. The second token will return a list of specifiers, but in current OpenAL will only return "DirectSound" (without the "3D" for some reason). The last will return a list of Alc extensions, of which none exist yet.<br/><br/> Well that's most of Alc for you. I hope it gave you a better understanding of how OpenAL interacts with the operation system. </p> <p> Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson4.zip">here</a>. </p> <? require('_include/footer.php'); ?> --- NEW FILE: changelog.php --- <? require('_include/header.php'); function displayChangelog($version) { echo "<p>\n"; echo " <a name=\"".$version."\"><b>LWJGL ".$version."</b></a> <span class=\"newsdate\"><a href=\"#top\">Back to top</a></span>\n"; echo "</p>\n"; echo "<pre>"; @readfile('changelogs/'.$version.'-changelog.txt'); echo "</pre>"; } ?> <h1><a name="top">Changelog</a></h1> <p> The following is a list of changes of LWJGL per release. </p> <ul> <li><a href="http://www.lwjgl.org/changelogs/full-changelog.txt" target="_blank">Full changelog</a></li> <li><a href="#0.93">LWJGL 0.93</a></li> <li><a href="#0.92">LWJGL 0.92</a></li> <li><a href="#0.90">LWJGL 0.90</a></li> <li><a href="#0.89">LWJGL 0.89</a></li> <li><a href="#0.80">LWJGL 0.80</a></li> <li><a href="#0.70">LWJGL 0.70</a></li> <li><a href="#0.60">LWJGL 0.60</a></li> <li><a href="#0.50">LWJGL 0.50</a></li> <li><a href="#0.40">LWJGL 0.40</a></li> <li><a href="#0.30">LWJGL 0.30</a></li> <li><a href="#0.20">LWJGL 0.20</a></li> <li><a href="#0.10">LWJGL 0.10</a></li> </ul> <? displayChangelog('0.93'); displayChangelog('0.92'); displayChangelog('0.90'); displayChangelog('0.89'); displayChangelog('0.80'); displayChangelog('0.70'); displayChangelog('0.60'); displayChangelog('0.50'); displayChangelog('0.40'); displayChangelog('0.30'); displayChangelog('0.20'); displayChangelog('0.10'); require('_include/footer.php'); ?> --- NEW FILE: links.php --- <? require('_include/header.php'); ?> <h1>Links</h1> <p> The following list of links are sites that either relate to our effort, or we just think are cool: </p> <ul> <li> <a href="http://www.javagaming.org/" target="_blank">http://www.javagaming.org/</a><br/> Site related to Java gaming.<br/><br/> </li> <li> <a href="http://www.puppygames.net/" target="_blank">http://www.puppygames.net/</a><br/> First commercial game using LWJGL!<br/><br/> </li> <li> <a href="http://www.tribaltrouble.com/" target="_blank">http://www.tribaltrouble.com/</a><br/> Awesome new commercial game using LWJGL.<br/><br/> </li> <li> <a href=" http://sourceforge.net/projects/spgl/" target="_blank"> http://sourceforge.net/projects/spgl/</a><br/> Game library building on top of LWJGL.<br/><br/> </li> <li> <a href="http://www.mojomonkeycoding.com/" target="_blank">http://www.mojomonkeycoding.com/</a><br/> jME (or jMonkeyEngine) is an attempt at a fully functional game engine using the Java programming language.<br/><br/> </li> <li> <a href="http://www.hardcode.de/jxinput/" target="_blank">http://www.hardcode.de/jxinput/</a><br/> More feature complete input support for java.<br/><br/> </li> </ul> <? require('_include/footer.php'); ?> --- NEW FILE: documentation_openal_02.php --- <? require('_include/header.php'); ?> <div style="margin: 0px 0px 10px 10px; width: 240px; float: right; border: 1px solid #000000;"> <table border="0" cellpadding="3" cellspacing="0"> <tr> <td width="100%" style="text-align: center; background-color: #cccccc; font-weight: bold; border-bottom: 1px solid #000000;" colspan="2">Other Articles in the Series</td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_01.php">Lesson 1: Single Static Source</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_02.php">Lesson 2: Looping and Fade-away</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_03.php">Lesson 3: Multiple Sources</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_04.php">Lesson 4: A Closer Look at ALC</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_05.php">Lesson 5: Sources Sharing Buffers</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_06.php">Lesson 6: Advanced Loading and Error Handles</a></td> </tr> <tr> <td valign="top">·</td> <td width="100%" style="text-align: left;"><a href="documentation_openal_07.php">Lesson 7: The Doppler Effect</a></td> </tr> </table> </div> <h1>Looping and Fade-away: Lesson 2</h1> <p> <i> Author: <a href="mailto:lig...@ho...">Jesse Maurais</a> | From: <a href="http://www.devmaster.net/articles.php?catID=6" target="_blank">devmaster.net</a><br/> Modified for LWJGL by: <a href="mailto:br...@ma...">Brian Matzon</a> </i> </p> <p> Hope you found the last tutorial of some use. I know I did. This will be a real quick and easy tutorial. It won't get too much more complicated at this point. </p> <pre class="code" style="clear: right;"> <span class="codeKeyword">import</span> java.io.IOException; <span class="codeKeyword">import</span> java.nio.FloatBuffer; <span class="codeKeyword">import</span> java.nio.IntBuffer; <span class="codeKeyword">import</span> org.lwjgl.BufferUtils; <span class="codeKeyword">import</span> org.lwjgl.LWJGLException; <span class="codeKeyword">import</span> org.lwjgl.openal.AL; <span class="codeKeyword">import</span> org.lwjgl.openal.AL10; <span class="codeKeyword">import</span> org.lwjgl.test.openal.WaveData; <span class="codeKeyword">public class</span> Lesson2 { <span class="codeComment"> /** Buffers hold sound data. */</span> IntBuffer buffer = BufferUtils.createIntBuffer(1); <span class="codeComment"> /** Sources are points emitting sound. */</span> IntBuffer source = BufferUtils.createIntBuffer(1); <span class="codeComment"> /** Position of the source sound. */</span> FloatBuffer sourcePos = BufferUtils.createFloatBuffer(3).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, 0.0f }); <span class="codeComment"> /** Velocity of the source sound. */</span> FloatBuffer sourceVel = BufferUtils.createFloatBuffer(3).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, 0.1f }); <span class="codeComment"> /** Position of the listener. */</span> FloatBuffer listenerPos = BufferUtils.createFloatBuffer(3).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, 0.0f }); <span class="codeComment"> /** Velocity of the listener. */</span> FloatBuffer listenerVel = BufferUtils.createFloatBuffer(3).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, 0.0f }); <span class="codeComment"> /** Orientation of the listener. (first 3 elements are "at", second 3 are "up") */</span> FloatBuffer listenerOri = BufferUtils.createFloatBuffer(6).put(<span class="codeKeyword">new</span> float[] { 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f }); </pre> <p> There is only one change in the code since the last tutorial in this first section. It is that we altered the sources velocity. It's 'z' field is now 0.1. </p> <pre class="code"> <span class="codeComment"> /** * boolean LoadALData() * * This function will load our sample data from the disk using the Alut * utility and send the data into OpenAL as a buffer. A source is then * also created to play that buffer. */</span> <span class="codeKeyword">int</span> loadALData() { <span class="codeComment"> // Load wav data into a buffer.</span> AL10.alGenBuffers(buffer); <span class="codeKeyword">if</span>(AL10.alGetError() != AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_FALSE; WaveData waveFile = WaveData.create("Footsteps.wav"); AL10.alBufferData(buffer.get(0), waveFile.format, waveFile.data, waveFile.samplerate); waveFile.dispose(); <span class="codeComment">// Bind the buffer with the source.</span> AL10.alGenSources(source); <span class="codeKeyword">if</span> (AL10.alGetError() != AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_FALSE; AL10.alSourcei(source.get(0), AL10.AL_BUFFER, buffer.get(0) ); AL10.alSourcef(source.get(0), AL10.AL_PITCH, 1.0f ); AL10.alSourcef(source.get(0), AL10.AL_GAIN, 1.0f ); AL10.alSource (source.get(0), AL10.AL_POSITION, sourcePos ); AL10.alSource (source.get(0), AL10.AL_VELOCITY, sourceVel ); AL10.alSourcei(source.get(0), AL10.AL_LOOPING, AL10.AL_TRUE ); <span class="codeComment">// Do another error check and return.</span> <span class="codeKeyword">if</span> (AL10.alGetError() == AL10.AL_NO_ERROR) <span class="codeKeyword">return</span> AL10.AL_TRUE; <span class="codeKeyword">return</span> AL10.AL_FALSE; </pre> <p> Two changes in this section. First we are loading the file "Footsteps.wav". We are also explicitly setting the sources 'AL_LOOPING' value to 'AL_TRUE'. What this means is that when the source is prompted to play it will continue to play until stopped. It will play over again after the sound clip has ended. </p> <pre class="code"> <span class="codeComment"> /** * void setListenerValues() * * We already defined certain values for the Listener, but we need * to tell OpenAL to use that data. This function does just that. */</span> <span class="codeKeyword">void</span> setListenerValues() { AL10.alListener(AL10.AL_POSITION, listenerPos); AL10.alListener(AL10.AL_VELOCITY, listenerVel); AL10.alListener(AL10.AL_ORIENTATION, listenerOri); } <span class="codeComment"> /** * void killALData() * * We have allocated memory for our buffers and sources which needs * to be returned to the system. This function frees that memory. */</span> <span class="codeKeyword">void</span> killALData() { AL10.alDeleteSources(source); AL10.alDeleteBuffers(buffer); } </pre> <p> Nothing has changed here. </p> <pre class="code"> <span class="codeKeyword">public static void</span> main(String[] args) { <span class="codeKeyword">new</span> Lesson2().execute(); } <span class="codeComment"> /** * Check for keyboard hit */</span> <span class="codeKeyword">private boolean</span> kbhit() { <span class="codeKeyword">try</span> { <span class="codeKeyword">return</span> (System.in.available() != 0); } <span class="codeKeyword">catch</span> (IOException ioe) { } <span class="codeKeyword">return false</span>; } <span class="codeKeyword">public void</span> execute() { <span class="codeComment">// Initialize OpenAL and clear the error bit.</span> <span class="codeKeyword">try</span>{ AL.create(); } <span class="codeKeyword">catch</span> (LWJGLException le) { le.printStackTrace(); <span class="codeKeyword">return</span>; } AL10.alGetError(); <span class="codeComment"> // Load the wav data.</span> <span class="codeKeyword">if</span>(loadALData() == AL10.AL_FALSE) { System.out.println("Error loading data."); <span class="codeKeyword">return</span>; } setListenerValues(); <span class="codeComment">// Loop.</span> <span class="codeKeyword">long</span> time = Sys.getTime(); <span class="codeKeyword">long</span> elapse = 0; <span class="codeKeyword">while</span> (!kbhit()) { elapse += Sys.getTime() - time; time += elapse; <span class="codeKeyword">if</span> (elapse > 5000) { elapse = 0; sourcePos.put(0, sourcePos.get(0) + sourceVel.get(0)); sourcePos.put(1, sourcePos.get(1) + sourceVel.get(1)); sourcePos.put(2, sourcePos.get(2) + sourceVel.get(2)); AL10.alSource(source.get(0), AL10.AL_POSITION, sourcePos); } } killALData(); } } </pre> <p> The only thing that has changed in this code is the loop. Instead of playing and stopping the audio sample it will slowly get quieter as the sources position grows more distant. We do this by slowly incrementing the position by it's velocity over time. The time is sampled by checking the system clock which gives us a tick count. It shouldn't be necessary to change this, but if the audio clip fades too fast you might want to change 5000 to some higher number. Pressing <code>return</code> key will end the loop. </p> <p> Download source code and resources for this lesson <a href="tutorials/openal/devmaster/lesson2.zip">here</a>. </p> <? require('_include/footer.php'); ?> --- NEW FILE: documentation.php --- <? require('_include/header.php'); ?> <h1>Documentation</h1> <p> Here you will find documentation for LWJGL. You are encouraged to submit tutorials for fame and glory! </p> <ul> <li> <a href="http://www.lwjgl.org/javadoc" target="_blank">LWJGL javadoc</a><br/><br/> </li> <li> <a href="http://lwjgl.org/wiki/tiki-index.php" target="_blank">LWJGL Wiki</a><br/><br/> </li> <li> <a href="documentation_openal_01.php">Using OpenAL</a><br/><br/> </li> </ul> <? require('_include/footer.php'); ?> --- NEW FILE: style.css --- body { margin: 0px; padding: 0px; background: url(_gfx/background.png); background-color: #cccccc; text-align: left; font: 12px/16px Verdana, Arial, Helvetica; } td { font: 12px/16px Verdana, Arial, Helvetica; } a:link {color: #ff9900; text-decoration: underline;} a:active {color: #ff9900; text-decoration: underline;} a:visited {color: #ff9900; text-decoration: underline;} a:hover {color: #cc6600; text-decoration: none;} div.menu a:link {color: #000000; text-decoration: none;} div.menu a:active {color: #000000; text-decoration: none;} div.menu a:visited {color: #000000; text-decoration: none;} div.menu a:hover {color: #ff9900; text-decoration: underline;} div.menu a.activeItem:link {color: #ff9900; text-decoration: none;} div.menu a.activeItem:active {color: #ff9900; text-decoration: none;} div.menu a.activeItem:visited {color: #ff9900; text-decoration: none;} div.menu a.activeItem:hover {color: #cc6600; text-decoration: underline;} h1 { color: #ff9900; font: bold 14px/16px Verdana, Arial, Helvetica; margin: 0px 0px 6px 0px; } h2 { font: bold 14px/16px Verdana, Arial, Helvetica; margin: 0px 0px 6px 0px; } span.newsdate { font: 11px/16px Verdana, Arial, Helvetica; font-style: italic; } div.mainFrame { background: url(_gfx/borderLeft.png) left repeat-y; margin: 20px 20px 20px 20px; padding: 0px; background-color: #ffffff; } div.contentFrame { clear: both; background: url(_gfx/borderRight.png) right repeat-y; padding: 0px 0px 0px 0px; } div.header { margin: 0px 12px 0px 2px; background: url(_gfx/mesh.png) top right no-repeat; height: 220px; } div.header img { margin-left: 50px; } div.content { padding-right: 40px; text-align: justify; margin-left: 160px; } div.content p { margin: 0px 0px 12px 10px; } div.content pre { margin: 0px 0px 12px 10px; } div.content b { font: bold 14px/16px Verdana, Arial, Helvetica; } div.menu { float: left; background: url(_gfx/seperator.png) top right no-repeat; padding-left: 15px; margin-right: 15px; width: 145px; /* box model hack for IE5 */ voice-family: "\"}\""; voice-family:inherit; width: 130px; } /* be nice to opera 5 and some IE versions*/ html->menu { width: 130px; } div.menu p { margin: 0px 0px 12px 10px; } div.borderTop { background: url(_gfx/borderTop.png) repeat-x; height: 30px; } div.borderTop span.left { background: url(_gfx/cornerTL.png) left top no-repeat; float: left; width: 30px; height: 30px; } div.borderTop span.right { background: url(_gfx/cornerTR.png) right top no-repeat; float: right; width: 40px; height: 30px; } div.borderBottom { background: url(_gfx/borderBottom.png) repeat-x; height: 40px; } div.borderBottom span.left { background: url(_gfx/cornerBL.png) left bottom no-repeat; float: left; width: 40px; height: 40px; } div.borderBottom span.right { font: 11px/16px Verdana, Arial, Helvetica; color: #999999; background: url(_gfx/cornerBR.png) right bottom no-repeat; float: right; padding-right: 40px; height: 40px; text-align: right; } div.clear { clear: both; font-size: 1px; line-height: 0px; } pre.code { border: 1px solid #000000; padding: 10px; } .codeKeyword {font-family: Courier New; color: #0000FF; font-size: 12px;} .codeComment {font-family: Courier New; color: #008000; font-size: 12px;} --- NEW FILE: demos.php --- <? require('_include/header.php'); ?> <h1><a name="top">Demos</a></h1> <p> Below you find a list of webstartable demos of LWJGL, all from the org.lwjgl.test.* package<br/><br/> <b>Space Invaders</b><br/><br/> This is the Space Invaders originally by Kevin Glass (<a href="http://www.cokeandcode.com/info/tut2d-4.html" target="_blank">http://www.cokeandcode.com/info/tut2d-4.html</a>). </p> <pre> Game [<a href="jnlp/lwjgl-demo.php/examples.spaceinvaders.Game">launch</a> | <a href="jnlp/source.php?path=examples/spaceinvaders/Game.java" target="_blank">source</a>] </pre> <p> <b>Input</b> </p> <pre> ControllerCreationTest [<a href="jnlp/lwjgl-demo.php/test.input.ControllerCreationTest">launch</a> | <a href="jnlp/source.php?path=test/input/ControllerCreationTest.java" target="_blank">source</a>] ControllerFieldTest [<a href="jnlp/lwjgl-demo.php/test.input.ControllerFieldTest">launch</a> | <a href="jnlp/source.php?path=test/input/ControllerFieldTest.java" target="_blank">source</a>] ControllerTest [<a href="jnlp/lwjgl-demo.php/test.input.ControllerTest">launch</a> | <a href="jnlp/source.php?path=test/input/ControllerTest.java" target="_blank">source</a>] HWCursorTest [<a href="jnlp/lwjgl-demo.php/test.input.HWCursorTest">launch</a> | <a href="jnlp/source.php?path=test/input/HWCursorTest.java" target="_blank">source</a>] KeyboardTest [<a href="jnlp/lwjgl-demo.php/test.input.KeyboardTest">launch</a> | <a href="jnlp/source.php?path=test/input/KeyboardTest.java" target="_blank">source</a>] MouseCreationTest [<a href="jnlp/lwjgl-demo.php/test.input.MouseCreationTest">launch</a> | <a href="jnlp/source.php?path=test/input/MouseCreationTest.java" target="_blank">source</a>] MouseTest [<a href="jnlp/lwjgl-demo.php/test.input.MouseTest">launch</a> | <a href="jnlp/source.php?path=test/input/MouseTest.java" target="_blank">source</a>] </pre> <p> <b>OpenAL</b> </p> <pre> ALCTest [<a href="jnlp/lwjgl-demo.php/test.openal.ALCTest">launch</a> | <a href="jnlp/source.php?path=test/openal/ALCTest.java" target="_blank">source</a>] EAXTest [<a href="jnlp/lwjgl-demo.php/test.openal.EAXTest">launch</a> | <a href="jnlp/source.php?path=test/openal/EAXTest.java" target="_blank">source</a>] MovingSoundTest [<a href="jnlp/lwjgl-demo.php/test.openal.MovingSoundTest">launch</a> | <a href="jnlp/source.php?path=test/openal/MovingSoundTest.java" target="_blank">source</a>] OpenALCreationTest [<a href="jnlp/lwjgl-demo.php/test.openal.OpenALCreationTest">launch</a> | <a href="jnlp/source.php?path=test/openal/OpenALCreationTest.java" target="_blank">source</a>] PlayTest [<a href="jnlp/lwjgl-demo.php/test.openal.PlayTest">launch</a> | <a href="jnlp/source.php?path=test/openal/PlayTest.java" target="_blank">source</a>] PlayTestMemory [<a href="jnlp/lwjgl-demo.php/test.openal.PlayTestMemory">launch</a> | <a href="jnlp/source.php?path=test/openal/PlayTestMemory.java" target="_blank">source</a>] PositionTest [<a href="jnlp/lwjgl-demo.php/test.openal.PositionTest">launch</a> | <a href="jnlp/source.php?path=test/openal/PositionTest.java" target="_blank">source</a>] SourceLimitTest [<a href="jnlp/lwjgl-demo.php/test.openal.SourceLimitTest">launch</a> | <a href="jnlp/source.php?path=test/openal/SourceLimitTest.java" target="_blank">source</a>] StressTest [<a href="jnlp/lwjgl-demo.php/test.openal.StressTest">launch</a> | <a href="jnlp/source.php?path=test/openal/StressTest.java" target="_blank">source</a>] </pre> <p> <b>OpenGL</b> </p> <pre> FullScreenWindowedTest [<a href="jnlp/lwjgl-demo.php/test.opengl.FullScreenWindowedTest">launch</a> | <a href="jnlp/source.php?path=test/opengl/FullScreenWindowedTest.java" target="_blank">source</a>] Game [<a href="jnlp/lwjgl-demo.php/test.opengl.Game">launch</a> | <a href="jnlp/source.php?path=test/opengl/Game.java" target="_blank">source</a>] PbufferTest [<a href="jnlp/lwjgl-demo.php/test.opengl.PbufferTest">launch</a> | <a href="jnlp/source.php?path=test/opengl/PbufferTest.java" target="_blank">source</a>] VBOIndexTest [<a href="jnlp/lwjgl-demo.php/test.opengl.VBOIndexTest">launch</a> | <a href="jnlp/source.php?path=test/opengl/VBOIndexTest.java" target="_blank">source</a>] VBOTest [<a href="jnlp/lwjgl-demo.php/test.opengl.VBOTest">launch</a> | <a href="jnlp/source.php?path=test/opengl/VBOTest.java" target="_blank">source</a>] GLGears [<a href="jnlp/lwjgl-demo.php/test.opengl.Gears">launch</a> | <a href="jnlp/source.php?path=test/opengl/Gears.java" target="_blank">source</a>] </pre> <p> <b>FMOD</b> </p> <pre> NetTest [<a href="jnlp/lwjgl-demo.php/test.fmod3.NetTest">launch</a> | <a href="jnlp/source.php?path=test/fmod3/NetTest.java" target="_blank">source</a>] StreamPlayerMemory [<a href="jnlp/lwjgl-demo.php/test.fmod3.StreamPlayerMemory">launch</a> | <a href="jnlp/source.php?path=test/fmod3/StreamPlayerMemory.java" target="_blank">source</a>] </pre> <p> <b>org.lwjgl</b> </p> <pre> SysTest [<a href="jnlp/lwjgl-demo.php/test.SysTest">launch</a> | <a href="jnlp/source.php?path=test/SysTest.java" target="_blank">source</a>] DisplayTest [<a href="jnlp/lwjgl-demo.php/test.DisplayTest">launch</a> | <a href="jnlp/source.php?path=test/DisplayTest.java" target="_blank">source</a>] WindowCreationTest [<a href="jnlp/lwjgl-demo.php/test.WindowCreationTest">launch</a> | <a href="jnlp/source.php?path=test/WindowCreationTest.java" target="_blank">source</a>] </pre> <? require('_include/footer.php'); ?> --- NEW FILE: about.php --- <? require('_include/header.php'); ?> <h1>About</h1> <p> <i>Taken from a <a href="http://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi?board=LWJGL;action=display;num=1067072465;start=31#31" target="_blank">post by Caspian</a> on Javagaming.org</i><br/><br/> In response to everything here I'd like to state our goals with LWJGL: </p> <ul> <li>Speed</li> <li>Simplicity</li> <li>Ubiquity</li> <li>Smallness</li> <li>Security</li> <li>Robustness</li> <li>Minimalism</li> </ul> <p> and this will help explain how we got to where we are today and more importantly where we're going and where we're not going. </p> <p> <b>Speed</b><br/> The whole point of LWJGL was to bring the speed of Java rendering into the 21st century. This is why we have: </p> <ul> <li>Thrown out methods designed for efficient C programming that make no sense at all in java, such as glColor3fv.</li> <li>Made the library throw an exception when hardware acceleration is not available on Windows. No point in running at 5fps is there?</li> </ul> <p> <b>Ubquity</b><br/> Our library is designed to work on devices as small as phones right the way up to multiprocessor rendering servers. Just because there aren't any phones or consoles yet with fast enough JVMs and 3d acceleration is neither here nor there - there will be, one day. We're carefully tailoring the library so that when it happens we'll have OpenGL ES support in there just like that. This means that: </p> <ul> <li>We had to have a very small footprint or it'll never catch on in the J2ME space at all. That's why the binary distribution is under half a meg, and that takes care of 3d sound, graphics, and IO.</li> <li>Even under desktop environments having a 1-2mb download just to call a few 3D functions is daft.</li> <li>We've worked to a lowest common denominator principle rather than attempting to design for all possibilities, but we've made sure that 99% of required uses are covered. That's why we've only got one window, and why we don't guarantee that windowed mode is even supported (it's officially a debug mode and hence we don't even supply some very basic windowy abilities that you'd get in AWT) and why we don't allow multiple thread rendering contexts.</li> </ul> <p> <b>Simplicity</b><br/> LWJGL needed to be simple for it to be used by a wide range of developers. We wanted relative newbies to be able to get on with it, and professionals to be able to use it professionally, maybe typically coming from a C++ background. We had to choose a paradigm that actually fits with OpenGL, and one that fits with our target platforms which ranges from PDA to desktop level. This is why: </p> <ul> <li>We aren't catering for single-buffered drawing</li> <li>We don't require that an instance of GL is passed around all over the place but we do not prevent this style of coding. See below for why.</li> <li>We removed a lot of stuff that 99% of games programmers need to know nothing about</li> <li>We have decided that consistency is better than complexity. Rather than allowing multiple ways to call the same methods and bloating the library we've just said, "Right, no arrays. They're slower anyway. Get used to buffers, as this is what buffers are meant to be used for."</li> </ul> <p> <b>Smallness</b><br/> See ubiquity above. We had to be small. </p> <ul> <li>Small == simple. The less ways there are to do something, the easier it is to learn the only way that works or is allowed.</li> <li>Small == our code is less buggy. Wouldn't you rather be hunting for bugs in your own code, not ours?</li> <li>Small == downloadable. No version nightmares. LWJGL is small enough to download with every application that uses it.</li> <li>Small == J2ME.</li> </ul> <p> <b>Security</b><br/> We realised a few months ago that no-one was going to take us seriously if we couldn't guarantee the security of the LWJGL native libraries. This is why we: </p> <ul> <li>No longer use pointers but exclusively use buffers instead</li> <li>Are gradually adding further checks to buffer positions and limits to ensure that the values are within allowed ranges to prevent buffer attacks</li> </ul> <p> <b>Robustness</b><br/> Similarly to security we have now realised that a reliable system is far more useful than a fast system. When we actually had a proper application to benchmark finally we had some real data. Many of our original design decisions were based on microbenchmarks - well, you have to start somewhere! But with a real application to benchmark we now know we can throw out asserts and replace them with a proper if (...) check and a thrown exception. We know also that we can move all that GL error checking out of native code and into Java code and we will no longer need a separate DLL for debug mode.<br/><br/> As for runtime exceptions, they have their place. There's not a reasonably well defined argument as to when you should use a runtime exception and when you should use a checked exception. When I made OpenGLException a checked exception all it did was end up littering my code with try {} catch {} sections - except that if you've got an OpenGLException there is very little sensible you can do to rectify it because it should never have occurred in the first place. That's why it's a runtime exception. You should simply not write code than can throw it because it is generally not recoverable nicely. However for robustness (and security) we are required to ... [truncated message content] |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:57:30
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/tutorials/openal/devmaster In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26825/devmaster Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_gfx/tutorials/openal/devmaster added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:57:17
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/tutorials/openal In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26725/openal Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_gfx/tutorials/openal added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:56:26
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/tutorials In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26652/tutorials Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_gfx/tutorials added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:56:13
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/projects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26630/projects Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_gfx/projects added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:55:59
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx/installation In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26577/installation Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_gfx/installation added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:55:27
|
Update of /cvsroot/java-game-lib/LWJGL/www/_gfx In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26464/_gfx Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_gfx added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:54:51
|
Update of /cvsroot/java-game-lib/LWJGL/www/_include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26351/_include Log Message: Directory /cvsroot/java-game-lib/LWJGL/www/_include added to the repository |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:52:40
|
Update of /cvsroot/java-game-lib/LWJGL/www/images/tutorials/openal/devmaster In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25899/images/tutorials/openal/devmaster Removed Files: compress_sin_wave.jpg doppler_effect.jpg sin_wave.jpg sound_waves.jpg Log Message: removing old files --- sin_wave.jpg DELETED --- --- sound_waves.jpg DELETED --- --- doppler_effect.jpg DELETED --- --- compress_sin_wave.jpg DELETED --- |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:52:40
|
Update of /cvsroot/java-game-lib/LWJGL/www/tutorials/openal/devmaster In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25899/tutorials/openal/devmaster Removed Files: lesson1.php lesson1.zip lesson2.php lesson2.zip lesson3.php lesson3.zip lesson4.php lesson5.php lesson5.zip lesson6.php lesson7.php Log Message: removing old files --- lesson5.zip DELETED --- --- lesson3.zip DELETED --- --- lesson1.php DELETED --- --- lesson4.php DELETED --- --- lesson6.php DELETED --- --- lesson7.php DELETED --- --- lesson2.zip DELETED --- --- lesson2.php DELETED --- --- lesson3.php DELETED --- --- lesson5.php DELETED --- --- lesson1.zip DELETED --- |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:52:33
|
Update of /cvsroot/java-game-lib/LWJGL/www/include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25899/include Removed Files: default.php faq.php news.php projects.php Log Message: removing old files --- projects.php DELETED --- --- default.php DELETED --- --- news.php DELETED --- --- faq.php DELETED --- |
Update of /cvsroot/java-game-lib/LWJGL/www/images/projects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25899/images/projects Removed Files: alienflux_1.jpg alienflux_2.jpg alienflux_3.jpg alienflux_small_1.jpg alienflux_small_2.jpg alienflux_small_3.jpg extorris_1.jpg extorris_2.jpg extorris_3.jpg extorris_small_1.jpg extorris_small_2.jpg extorris_small_3.jpg marathon_1.jpg marathon_2.jpg marathon_3.jpg marathon_small_1.jpg marathon_small_2.jpg marathon_small_3.jpg starship2d_1.jpg starship2d_2.jpg starship2d_3.jpg starship2d_small_1.jpg starship2d_small_2.jpg starship2d_small_3.jpg tribaltrouble_1.jpg tribaltrouble_2.jpg tribaltrouble_3.jpg tribaltrouble_small_1.jpg tribaltrouble_small_2.jpg tribaltrouble_small_3.jpg vermins_1.jpg vermins_2.jpg vermins_small_1.jpg vermins_small_2.jpg Log Message: removing old files --- vermins_small_1.jpg DELETED --- --- starship2d_2.jpg DELETED --- --- vermins_1.jpg DELETED --- --- alienflux_1.jpg DELETED --- --- alienflux_3.jpg DELETED --- --- marathon_2.jpg DELETED --- --- marathon_small_1.jpg DELETED --- --- extorris_2.jpg DELETED --- --- extorris_small_1.jpg DELETED --- --- starship2d_small_2.jpg DELETED --- --- vermins_small_2.jpg DELETED --- --- extorris_1.jpg DELETED --- --- starship2d_small_3.jpg DELETED --- --- starship2d_1.jpg DELETED --- --- extorris_3.jpg DELETED --- --- alienflux_small_1.jpg DELETED --- --- alienflux_2.jpg DELETED --- --- extorris_small_2.jpg DELETED --- --- tribaltrouble_1.jpg DELETED --- --- marathon_small_2.jpg DELETED --- --- tribaltrouble_small_1.jpg DELETED --- --- tribaltrouble_small_2.jpg DELETED --- --- alienflux_small_2.jpg DELETED --- --- extorris_small_3.jpg DELETED --- --- marathon_small_3.jpg DELETED --- --- marathon_3.jpg DELETED --- --- starship2d_small_1.jpg DELETED --- --- tribaltrouble_2.jpg DELETED --- --- starship2d_3.jpg DELETED --- --- marathon_1.jpg DELETED --- --- alienflux_small_3.jpg DELETED --- --- tribaltrouble_3.jpg DELETED --- --- tribaltrouble_small_3.jpg DELETED --- --- vermins_2.jpg DELETED --- |
|
From: Brian M. <ma...@us...> - 2004-11-27 15:52:29
|
Update of /cvsroot/java-game-lib/LWJGL/www/images/installation In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25899/images/installation Removed Files: eclipse-1.png eclipse-2.png eclipse-3.png eclipse-4.png jcreator-1.jpg jcreator-2.jpg jcreator-3.jpg netbeans-1.png netbeans-2.png netbeans-3.png Log Message: removing old files --- eclipse-4.png DELETED --- --- eclipse-3.png DELETED --- --- jcreator-1.jpg DELETED --- --- jcreator-3.jpg DELETED --- --- jcreator-2.jpg DELETED --- --- eclipse-1.png DELETED --- --- eclipse-2.png DELETED --- --- netbeans-1.png DELETED --- --- netbeans-2.png DELETED --- --- netbeans-3.png DELETED --- |