diff --git a/.gitignore b/.gitignore
index 3516599..80948a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
bin/*
.project
-.classpath
\ No newline at end of file
+.classpath
+*.jar
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..9bcf999
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,3 @@
+language: java
+jdk:
+ - oraclejdk8
diff --git a/README.md b/README.md
index 20693c9..f293cb9 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,8 @@
# First-Game-Lighting
+Compile status: ![Status](https://travis-ci.org/mrdev023/First-Game-Lighting.svg?branch=master)
+
Ce projet est seulement a projet utiliser pour apprendre le forward rendering pour ensuite l'integrer dans mon moteur de jeu qui
sera conçus avec ces derniere technologie pour ensuite faire des jeux avec celui-ci.
+
+![Image](https://pbs.twimg.com/media/Cc3DuwnWIAII5Zw.jpg:large)
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..9ae77ff
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libs/OpenAL.dll b/libs/OpenAL.dll
new file mode 100644
index 0000000..f29c3ce
Binary files /dev/null and b/libs/OpenAL.dll differ
diff --git a/libs/OpenAL32.dll b/libs/OpenAL32.dll
new file mode 100644
index 0000000..31d639d
Binary files /dev/null and b/libs/OpenAL32.dll differ
diff --git a/libs/glfw.dll b/libs/glfw.dll
new file mode 100644
index 0000000..f8c3dc7
Binary files /dev/null and b/libs/glfw.dll differ
diff --git a/libs/glfw32.dll b/libs/glfw32.dll
new file mode 100644
index 0000000..3291dce
Binary files /dev/null and b/libs/glfw32.dll differ
diff --git a/libs/jemalloc.dll b/libs/jemalloc.dll
new file mode 100644
index 0000000..c71efc1
Binary files /dev/null and b/libs/jemalloc.dll differ
diff --git a/libs/jemalloc32.dll b/libs/jemalloc32.dll
new file mode 100644
index 0000000..6bea0b3
Binary files /dev/null and b/libs/jemalloc32.dll differ
diff --git a/libs/libglfw.dylib b/libs/libglfw.dylib
new file mode 100644
index 0000000..905c1bd
Binary files /dev/null and b/libs/libglfw.dylib differ
diff --git a/libs/libglfw.so b/libs/libglfw.so
new file mode 100644
index 0000000..e97463b
Binary files /dev/null and b/libs/libglfw.so differ
diff --git a/libs/libjemalloc.dylib b/libs/libjemalloc.dylib
new file mode 100644
index 0000000..1d7cc79
Binary files /dev/null and b/libs/libjemalloc.dylib differ
diff --git a/libs/libjemalloc.so b/libs/libjemalloc.so
new file mode 100644
index 0000000..dc95c65
Binary files /dev/null and b/libs/libjemalloc.so differ
diff --git a/libs/liblwjgl.dylib b/libs/liblwjgl.dylib
new file mode 100644
index 0000000..aeda823
Binary files /dev/null and b/libs/liblwjgl.dylib differ
diff --git a/libs/liblwjgl.so b/libs/liblwjgl.so
new file mode 100644
index 0000000..229b3c9
Binary files /dev/null and b/libs/liblwjgl.so differ
diff --git a/libs/libopenal.dylib b/libs/libopenal.dylib
new file mode 100644
index 0000000..7f0047b
Binary files /dev/null and b/libs/libopenal.dylib differ
diff --git a/libs/libopenal.so b/libs/libopenal.so
new file mode 100644
index 0000000..0c8e888
Binary files /dev/null and b/libs/libopenal.so differ
diff --git a/libs/lwjgl.dll b/libs/lwjgl.dll
new file mode 100644
index 0000000..8f385e5
Binary files /dev/null and b/libs/lwjgl.dll differ
diff --git a/libs/lwjgl32.dll b/libs/lwjgl32.dll
new file mode 100644
index 0000000..6177778
Binary files /dev/null and b/libs/lwjgl32.dll differ
diff --git a/src/fr/technicalgames/Main.java b/src/fr/technicalgames/Main.java
index 91db18e..6b729db 100644
--- a/src/fr/technicalgames/Main.java
+++ b/src/fr/technicalgames/Main.java
@@ -16,35 +16,35 @@ import fr.technicalgames.math.*;
import fr.technicalgames.render.*;
public class Main {
-
+
//Valeur de la fenetre
public static final int WIDTH = 800,HEIGHT = 600;
public static final String TITLE = "Test Shader OpenGL";
-
+
//Variable pour la gestion de la fenetre
public static long windowID = 0;
public static float mousePositionX = 0,mousePositionY = 0,dMouseX = 0,dMouseY = 0;
public static GLFWErrorCallback errorCallback;
-
+
//variable du moteur du jeu
public static float delta = 0;
public static Game game;
public static long previous = System.currentTimeMillis(),previousInfo = System.currentTimeMillis(),previousTicks = System.currentTimeMillis();
public static int FPS = 0,TICKS = 0;
-
+
public static void main(String[] args) throws Exception {
//Creation de la fenetre
//------------------------------------------------------------------------------------
errorCallback = new GLFWErrorCallback() {
public void invoke(int error, long description) {
- System.err.println("ID : " + error + " | Description :" + description);
+ System.err.println("ID : " + error + " | Description :" + description);
}
};
// glfwSetErrorCallback(errorCallback);
-
- if(glfwInit() != GL11.GL_TRUE)throw new Exception("GLFW not init");
+
+ if(glfwInit())throw new Exception("GLFW not init");
glfwDefaultWindowHints();
- glfwWindowHint(GLFW_VISIBLE, GL11.GL_FALSE);
+ glfwWindowHint(GLFW_VISIBLE, GL11.GL_FALSE);
glfwWindowHint(GLFW_RESIZABLE, GL11.GL_FALSE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
@@ -59,24 +59,24 @@ public class Main {
System.out.println("OpenGL Version :" + glGetString(GL_VERSION));
System.out.println("GLSL Shader Version :" + glGetString(GL20.GL_SHADING_LANGUAGE_VERSION));
//------------------------------------------------------------------------------------
-
+
//Creation du device audio
//------------------------------------------------------------------------------------
Audio.create();
//------------------------------------------------------------------------------------
-
+
//initialisation
//------------------------------------------------------------------------------------
Input.init();
game = new MainGame();
-
+
Camera.rot = new Vector3f(-3.0f,-338.0f,0.0f);
Camera.pos = new Vector3f(1.5242399f,0.0f,-13.456063f);
Camera.transform();
//------------------------------------------------------------------------------------
-
- while(glfwWindowShouldClose(windowID) == GL11.GL_FALSE){
-
+
+ while(glfwWindowShouldClose(windowID)){
+
if(System.currentTimeMillis() - previousTicks >= 1000/60){//Update TICKS
glfwPollEvents();
Input.update();
@@ -96,7 +96,7 @@ public class Main {
glfwSwapBuffers(windowID);
FPS++;
}
-
+
if(System.currentTimeMillis() - previousInfo >= 1000){
glfwSetWindowTitle(windowID, TITLE + " | FPS:" + FPS + " TICKS:" + TICKS);
FPS = 0;
@@ -104,10 +104,10 @@ public class Main {
previousInfo = System.currentTimeMillis();
}
}
-
+
Audio.destroy();
glfwDestroyWindow(windowID);
glfwTerminate();
}
-
+
}
diff --git a/src/fr/technicalgames/audio/Audio.java b/src/fr/technicalgames/audio/Audio.java
index 31e95ce..6b38928 100644
--- a/src/fr/technicalgames/audio/Audio.java
+++ b/src/fr/technicalgames/audio/Audio.java
@@ -1,9 +1,8 @@
package fr.technicalgames.audio;
+import static org.lwjgl.openal.AL.createCapabilities;
import static org.lwjgl.openal.AL10.*;
import static org.lwjgl.openal.ALC10.*;
-import static org.lwjgl.openal.ALC11.*;
-import static org.lwjgl.openal.ALUtil.*;
import static org.lwjgl.stb.STBVorbis.*;
import static org.lwjgl.system.MemoryUtil.*;
@@ -19,323 +18,305 @@ import org.lwjgl.openal.*;
import org.lwjgl.stb.STBVorbisInfo;
-public abstract class Audio {
-
- //Variables global
- //------------------------------------------------------
- public static ALDevice device;
- public static ALCCapabilities caps;
- public static ALContext context;
- public static final int INITIAL_STATE = 4113,PAUSED_STATE = 4115,STOPPED_STATE = 4116,PLAYING_STATE = 4114;
- //------------------------------------------------------
-
- //Variable de l'objet audio ou du son a lire
- //------------------------------------------------------
- private int buffer,source;
- private String fileName;
- private String format;
- //------------------------------------------------------
+public class Audio {
- //Fonction global
- //------------------------------------------------------
- public static void create(){
- device = ALDevice.create(null);
- if ( device == null )
- throw new IllegalStateException("Failed to open the default device.");
- caps = device.getCapabilities();
- System.out.println("---------------------------- Create Audio Device -------------------------------------");
- System.out.println("OpenALC10: " + caps.OpenALC10);
- System.out.println("OpenALC11: " + caps.OpenALC11);
- System.out.println("caps.ALC_EXT_EFX = " + caps.ALC_EXT_EFX);
-
- String defaultDeviceSpecifier = alcGetString(0L, ALC_DEFAULT_DEVICE_SPECIFIER);
- System.out.println("Default device: " + defaultDeviceSpecifier);
+ //Variables global
+ //------------------------------------------------------
+ public static long device;
+ public static ALCCapabilities caps;
+ public static long context;
+ public static final int INITIAL_STATE = 4113,PAUSED_STATE = 4115,STOPPED_STATE = 4116,PLAYING_STATE = 4114;
+ //------------------------------------------------------
- context = ALContext.create(device);
+ //Variable de l'objet audio ou du son a lire
+ //------------------------------------------------------
+ private int buffer,source;
+ private String fileName;
+ private String format;
+ //------------------------------------------------------
- System.out.println("ALC_FREQUENCY: " + alcGetInteger(device.address(), ALC_FREQUENCY) + "Hz");
- System.out.println("ALC_REFRESH: " + alcGetInteger(device.address(), ALC_REFRESH) + "Hz");
- System.out.println("ALC_SYNC: " + (alcGetInteger(device.address(), ALC_SYNC) == ALC_TRUE));
- System.out.println("ALC_MONO_SOURCES: " + alcGetInteger(device.address(), ALC_MONO_SOURCES));
- System.out.println("ALC_STEREO_SOURCES: " + alcGetInteger(device.address(), ALC_STEREO_SOURCES));
- System.out.println("---------------------------------------------------------------------------------------");
- }
-
- public static void destroy(){
- context.destroy();
- device.destroy();
- }
- //------------------------------------------------------
-
- //Fonction de l'objet audio ou du son a lire
- //------------------------------------------------------
-
- public Audio(String fileName) throws Exception{
- this.fileName = fileName;
- setSound();
- }
-
- private void setSound() throws Exception{
- if(fileName.endsWith(".ogg")){
- loadOGGFormat();
- format = "OGG";
- }else if(fileName.endsWith(".wav")){
- loadWavFormat();
- format = "WAV";
- }else{
- throw new Exception("Format not supported !");
- }
+ //Fonction global
+ //------------------------------------------------------
+ public static void create(){
+ device = alcOpenDevice((ByteBuffer)null);
+ ALCCapabilities deviceCaps = ALC.createCapabilities(device);
+
+ context = alcCreateContext(device, (IntBuffer)null);
+ alcMakeContextCurrent(context);
+ createCapabilities(deviceCaps);
+ }
+
+ public static void destroy(){
+ alcCloseDevice(device);
+ alcDestroyContext(context);
+ }
+ //------------------------------------------------------
+
+ //Fonction de l'objet audio ou du son a lire
+ //------------------------------------------------------
+
+ public Audio(String fileName) throws Exception{
+ this.fileName = fileName;
+ setSound();
+ }
+
+ private void setSound() throws Exception{
+ if(fileName.endsWith(".ogg")){
+ loadOGGFormat();
+ format = "OGG";
+ }else if(fileName.endsWith(".wav")){
+ loadWavFormat();
+ format = "WAV";
+ }else{
+ throw new Exception("Format not supported !");
+ }
alSourcei(source, AL_BUFFER, buffer);
- checkALError();
int size = alGetBufferi(buffer,AL_SIZE);
- int bits = alGetBufferi(buffer, AL_BITS);
- int channels = alGetBufferi(buffer, AL_CHANNELS);
- int freq = alGetBufferi(buffer, AL_FREQUENCY);
+ int bits = alGetBufferi(buffer, AL_BITS);
+ int channels = alGetBufferi(buffer, AL_CHANNELS);
+ int freq = alGetBufferi(buffer, AL_FREQUENCY);
System.out.println(fileName + " loaded !" + " | TIME : " + (size/channels/(bits/8)/freq) + "s | BITS : " + bits + " | CHANNELS : " + channels + " | FREQUENCE : " + freq + " FORMAT : " + format);
- }
-
- public void loadWavFormat() throws Exception{
- AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(fileName)));
- AudioFormat audioformat = ais.getFormat();
+ }
- // get channels
- int channels = 0;
- if (audioformat.getChannels() == 1) {
- if (audioformat.getSampleSizeInBits() == 8) {
- channels = AL10.AL_FORMAT_MONO8;
- } else if (audioformat.getSampleSizeInBits() == 16) {
- channels = AL10.AL_FORMAT_MONO16;
- } else {
- assert false : "Illegal sample size";
- }
- } else if (audioformat.getChannels() == 2) {
- if (audioformat.getSampleSizeInBits() == 8) {
- channels = AL10.AL_FORMAT_STEREO8;
- } else if (audioformat.getSampleSizeInBits() == 16) {
- channels = AL10.AL_FORMAT_STEREO16;
- } else {
- assert false : "Illegal sample size";
- }
- } else {
- assert false : "Only mono or stereo is supported";
- }
-
- int available = ais.available();
- if(available <= 0) {
- available = ais.getFormat().getChannels() * (int) ais.getFrameLength() * ais.getFormat().getSampleSizeInBits() / 8;
- }
- byte[] buf = new byte[ais.available()];
- int read = 0, total = 0;
- while ((read = ais.read(buf, total, buf.length - total)) != -1
- && total < buf.length) {
- total += read;
- }
- byte[] audio_bytes = buf;
- boolean two_bytes_data = audioformat.getSampleSizeInBits() == 16;
- ByteOrder order = audioformat.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
- ByteBuffer dest = ByteBuffer.allocateDirect(audio_bytes.length);
- dest.order(ByteOrder.nativeOrder());
- ByteBuffer src = ByteBuffer.wrap(audio_bytes);
- src.order(order);
- if (two_bytes_data) {
- ShortBuffer dest_short = dest.asShortBuffer();
- ShortBuffer src_short = src.asShortBuffer();
- while (src_short.hasRemaining())
- dest_short.put(src_short.get());
- } else {
- while (src.hasRemaining())
- dest.put(src.get());
- }
- dest.rewind();
-
- this.buffer = alGenBuffers();
- this.source = alGenSources();
+ public void loadWavFormat() throws Exception{
+ AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(fileName)));
+ AudioFormat audioformat = ais.getFormat();
+
+ // get channels
+ int channels = 0;
+ if (audioformat.getChannels() == 1) {
+ if (audioformat.getSampleSizeInBits() == 8) {
+ channels = AL10.AL_FORMAT_MONO8;
+ } else if (audioformat.getSampleSizeInBits() == 16) {
+ channels = AL10.AL_FORMAT_MONO16;
+ } else {
+ assert false : "Illegal sample size";
+ }
+ } else if (audioformat.getChannels() == 2) {
+ if (audioformat.getSampleSizeInBits() == 8) {
+ channels = AL10.AL_FORMAT_STEREO8;
+ } else if (audioformat.getSampleSizeInBits() == 16) {
+ channels = AL10.AL_FORMAT_STEREO16;
+ } else {
+ assert false : "Illegal sample size";
+ }
+ } else {
+ assert false : "Only mono or stereo is supported";
+ }
+
+ int available = ais.available();
+ if(available <= 0) {
+ available = ais.getFormat().getChannels() * (int) ais.getFrameLength() * ais.getFormat().getSampleSizeInBits() / 8;
+ }
+ byte[] buf = new byte[ais.available()];
+ int read = 0, total = 0;
+ while ((read = ais.read(buf, total, buf.length - total)) != -1
+ && total < buf.length) {
+ total += read;
+ }
+ byte[] audio_bytes = buf;
+ boolean two_bytes_data = audioformat.getSampleSizeInBits() == 16;
+ ByteOrder order = audioformat.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+ ByteBuffer dest = ByteBuffer.allocateDirect(audio_bytes.length);
+ dest.order(ByteOrder.nativeOrder());
+ ByteBuffer src = ByteBuffer.wrap(audio_bytes);
+ src.order(order);
+ if (two_bytes_data) {
+ ShortBuffer dest_short = dest.asShortBuffer();
+ ShortBuffer src_short = src.asShortBuffer();
+ while (src_short.hasRemaining())
+ dest_short.put(src_short.get());
+ } else {
+ while (src.hasRemaining())
+ dest.put(src.get());
+ }
+ dest.rewind();
+
+ this.buffer = alGenBuffers();
+ this.source = alGenSources();
alBufferData(this.buffer, channels, dest, (int)audioformat.getSampleRate());
dest.clear();
- }
-
- public void loadOGGFormat(){
- STBVorbisInfo info = STBVorbisInfo.malloc();
- ByteBuffer buff = BufferUtils.createByteBuffer(0);
- //lecture du fichier
- //----------------------------------------------------------------------------------------------------------------
- try {
- File file = new File(fileName);
- if ( file.isFile() ) {
- FileInputStream fis = new FileInputStream(file);
- FileChannel fc = fis.getChannel();
- buff = BufferUtils.createByteBuffer((int)fc.size() + 1);
-
- while ( fc.read(buff) != -1 ) ;
-
- fis.close();
- fc.close();
- } else {
- System.err.println("File not found !");
- return;
- }
+ }
- buff.flip();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- //----------------------------------------------------------------------------------------------------------------
+ public void loadOGGFormat(){
+ STBVorbisInfo info = STBVorbisInfo.malloc();
+ ByteBuffer buff = BufferUtils.createByteBuffer(0);
+ //lecture du fichier
+ //----------------------------------------------------------------------------------------------------------------
+ try {
+ File file = new File(fileName);
+ if ( file.isFile() ) {
+ FileInputStream fis = new FileInputStream(file);
+ FileChannel fc = fis.getChannel();
+ buff = BufferUtils.createByteBuffer((int)fc.size() + 1);
- IntBuffer error = BufferUtils.createIntBuffer(1);
- long decoder = stb_vorbis_open_memory(buff, error, null);
- if ( decoder == NULL )
- throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0));
+ while ( fc.read(buff) != -1 ) ;
- stb_vorbis_get_info(decoder, info);
+ fis.close();
+ fc.close();
+ } else {
+ System.err.println("File not found !");
+ return;
+ }
- int channels = info.channels();
+ buff.flip();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //----------------------------------------------------------------------------------------------------------------
- stb_vorbis_seek_start(decoder);
- int lengthSamples = stb_vorbis_stream_length_in_samples(decoder);
+ IntBuffer error = BufferUtils.createIntBuffer(1);
+ long decoder = stb_vorbis_open_memory(buff, error, null);
+ if ( decoder == NULL )
+ throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0));
- ByteBuffer pcm = BufferUtils.createByteBuffer(lengthSamples * 2 * channels);
+ stb_vorbis_get_info(decoder, info);
- stb_vorbis_get_samples_short_interleaved(decoder, channels, pcm, lengthSamples);
- stb_vorbis_close(decoder);
-
- buffer = alGenBuffers();
- checkALError();
-
- source = alGenSources();
- checkALError();
-
- if(channels == 1)alBufferData(buffer, AL_FORMAT_MONO16, pcm, info.sample_rate());
- else alBufferData(buffer, AL_FORMAT_STEREO16, pcm, info.sample_rate());
- checkALError();
- }
-
- public void playSound(){
- if(source == 0 || buffer == 0) return;
- alSourcePlay(source);
- }
-
- public int getPosition(){
- return alGetSourcei(source, AL_POSITION);
- }
-
- public int getDurationInSeconds(){
- if(source == 0 || buffer == 0) return 0;
- int size = alGetBufferi(buffer,AL_SIZE);
- int bits = alGetBufferi(buffer, AL_BITS);
- int channels = alGetBufferi(buffer, AL_CHANNELS);
- int freq = alGetBufferi(buffer, AL_FREQUENCY);
- return size/channels/(bits/8)/freq;
- }
-
- public int getStateSound(){
- if(source == 0 || buffer == 0) return 0;
- return alGetSourcei(source, AL_SOURCE_STATE);
- }
-
- public boolean isStopped(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == STOPPED_STATE)return true;
- else return false;
- }
-
- public boolean isPaused(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == PAUSED_STATE)return true;
- else return false;
- }
-
- public boolean isPlaying(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == PLAYING_STATE)return true;
- else return false;
- }
-
- public boolean isInitial(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == INITIAL_STATE)return true;
- else return false;
- }
-
- public void stopSound(){
- if(source == 0 || buffer == 0) return;
- alSourceStop(source);
- }
+ int channels = info.channels();
- public void pauseSound(){
- if(source == 0 || buffer == 0) return;
- alSourcePause(source);
- }
-
- public void rewindSound(){
- if(source == 0 || buffer == 0) return;
- alSourceRewind(source);
- }
-
- public void setGain(float gain){
- if(source == 0 || buffer == 0) return;
- if(gain > 1.0f)gain = 1.0f;
- if(gain < 0.0f)gain = 0.0f;
- alSourcef(source, AL_GAIN, gain);
- }
-
- public void setPitch(float pitch){
- if(source == 0 || buffer == 0) return;
- if(pitch < 0.0f)pitch = 0.0f;
- alSourcef(source, AL_PITCH, pitch);
- }
-
-
- public float getGain(){
- if(source == 0 || buffer == 0) return 0;
- return alGetSourcef(source, AL_GAIN);
- }
-
- public float getPitch(){
- if(source == 0 || buffer == 0) return 0;
- return alGetSourcef(source, AL_PITCH);
- }
-
- public void setLooping(boolean looping){
- if(source == 0 || buffer == 0) return;
- if(looping){
- alSourcef(source, AL_LOOPING, AL_TRUE);
- }else{
- alSourcef(source, AL_LOOPING, AL_FALSE);
- }
- }
-
- public void destroySound(){
- alDeleteSources(source);
- alDeleteBuffers(buffer);
- source = 0;
- buffer = 0;
- }
-
- public String getFileName() {
- return fileName;
- }
+ stb_vorbis_seek_start(decoder);
+ int lengthSamples = stb_vorbis_stream_length_in_samples(decoder);
- public void setFileName(String fileName) throws Exception {
- this.fileName = fileName;
- destroySound();
- setSound();
- }
+ ShortBuffer pcm = BufferUtils.createShortBuffer(lengthSamples * channels);
- public int getBuffer() {
- return buffer;
- }
+ stb_vorbis_get_samples_short_interleaved(decoder, channels, pcm);
+ stb_vorbis_close(decoder);
- public void setBuffer(int buffer) {
- this.buffer = buffer;
- }
+ buffer = alGenBuffers();
- public int getSource() {
- return source;
- }
+ source = alGenSources();
+
+ if(channels == 1)alBufferData(buffer, AL_FORMAT_MONO16, pcm, info.sample_rate());
+ else alBufferData(buffer, AL_FORMAT_STEREO16, pcm, info.sample_rate());
+ }
+
+ public void playSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourcePlay(source);
+ }
+
+ public int getPosition(){
+ return alGetSourcei(source, AL_POSITION);
+ }
+
+ public int getDurationInSeconds(){
+ if(source == 0 || buffer == 0) return 0;
+ int size = alGetBufferi(buffer,AL_SIZE);
+ int bits = alGetBufferi(buffer, AL_BITS);
+ int channels = alGetBufferi(buffer, AL_CHANNELS);
+ int freq = alGetBufferi(buffer, AL_FREQUENCY);
+ return size/channels/(bits/8)/freq;
+ }
+
+ public int getStateSound(){
+ if(source == 0 || buffer == 0) return 0;
+ return alGetSourcei(source, AL_SOURCE_STATE);
+ }
+
+ public boolean isStopped(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == STOPPED_STATE)return true;
+ else return false;
+ }
+
+ public boolean isPaused(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == PAUSED_STATE)return true;
+ else return false;
+ }
+
+ public boolean isPlaying(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == PLAYING_STATE)return true;
+ else return false;
+ }
+
+ public boolean isInitial(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == INITIAL_STATE)return true;
+ else return false;
+ }
+
+ public void stopSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourceStop(source);
+ }
+
+ public void pauseSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourcePause(source);
+ }
+
+ public void rewindSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourceRewind(source);
+ }
+
+ public void setGain(float gain){
+ if(source == 0 || buffer == 0) return;
+ if(gain > 1.0f)gain = 1.0f;
+ if(gain < 0.0f)gain = 0.0f;
+ alSourcef(source, AL_GAIN, gain);
+ }
+
+ public void setPitch(float pitch){
+ if(source == 0 || buffer == 0) return;
+ if(pitch < 0.0f)pitch = 0.0f;
+ alSourcef(source, AL_PITCH, pitch);
+ }
+
+
+ public float getGain(){
+ if(source == 0 || buffer == 0) return 0;
+ return alGetSourcef(source, AL_GAIN);
+ }
+
+ public float getPitch(){
+ if(source == 0 || buffer == 0) return 0;
+ return alGetSourcef(source, AL_PITCH);
+ }
+
+ public void setLooping(boolean looping){
+ if(source == 0 || buffer == 0) return;
+ if(looping){
+ alSourcef(source, AL_LOOPING, AL_TRUE);
+ }else{
+ alSourcef(source, AL_LOOPING, AL_FALSE);
+ }
+ }
+
+ public void destroySound(){
+ alDeleteSources(source);
+ alDeleteBuffers(buffer);
+ source = 0;
+ buffer = 0;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) throws Exception {
+ this.fileName = fileName;
+ destroySound();
+ setSound();
+ }
+
+ public int getBuffer() {
+ return buffer;
+ }
+
+ public void setBuffer(int buffer) {
+ this.buffer = buffer;
+ }
+
+ public int getSource() {
+ return source;
+ }
+
+ public void setSource(int source) {
+ this.source = source;
+ }
+ //------------------------------------------------------
- public void setSource(int source) {
- this.source = source;
- }
- //------------------------------------------------------
-
}
diff --git a/src/fr/technicalgames/input/Input.java b/src/fr/technicalgames/input/Input.java
index 79fa83b..91d5a5e 100644
--- a/src/fr/technicalgames/input/Input.java
+++ b/src/fr/technicalgames/input/Input.java
@@ -12,22 +12,22 @@ import fr.technicalgames.*;
import fr.technicalgames.math.*;
public class Input{
-
+
public static GLFWScrollCallback scroll;
public static GLFWCursorPosCallback mousePos;
-
+
private static Vector2f mousePosition = new Vector2f();
private static Vector2f dMouse = new Vector2f();
private static Vector2f previousDMouse = new Vector2f();
-
+
public static final int NONE = 0,PRESSED = 1,RELEASED = 2,REPEATED = 3,UP = 4,DOWN = 5,
NBRE_KEY = 0x15D,NBRE_BUTTON = 10,
MOUSE_OFFSET = NBRE_KEY + 1,MOUSE_WHEEL_OFFSET = MOUSE_OFFSET + 1;
-
+
private static HashMap state = new HashMap();
-
+
private static double ywheel = 0;
-
+
public static void init(){
glfwSetScrollCallback(Main.windowID, scroll = new GLFWScrollCallback() {
public void invoke(long window, double xoffset, double yoffset) {
@@ -47,7 +47,7 @@ public class Input{
}
state.put(MOUSE_WHEEL_OFFSET, NONE);
}
-
+
public static void update(){
for(Entry set : state.entrySet()){
int i = set.getKey();
@@ -91,63 +91,63 @@ public class Input{
previousDMouse = dMouse;
}
}
-
+
public static void destroy(){
- mousePos.release();
- scroll.release();
+ mousePos.free();
+ scroll.free();
}
-
+
public static void scroll(long window, double xoffset, double yoffset) {
ywheel = yoffset;
}
-
+
public static void mousepos(long window, double xpos, double ypos) {
dMouse.x = (float) (xpos - mousePosition.x);
dMouse.y = (float) (ypos - mousePosition.y);
mousePosition.x = (float) xpos;
mousePosition.y = (float) ypos;
}
-
+
public static boolean isButtonDown(int button){
return state.get(button + MOUSE_OFFSET) == PRESSED;
}
-
+
public static boolean isButtonUp(int button){
return state.get(button + MOUSE_OFFSET) == RELEASED;
}
-
+
public static boolean isButton(int button){
return state.get(button + MOUSE_OFFSET) == PRESSED || state.get(button + MOUSE_OFFSET) == REPEATED;
}
-
+
public static int isButtonState(int button){
return state.get(button + MOUSE_OFFSET);
}
-
+
public static boolean isKeyDown(int key){
return state.get(key) == PRESSED;
}
-
+
public static boolean isKeyUp(int key){
return state.get(key) == RELEASED;
}
-
+
public static boolean isKey(int key){
return state.get(key) == PRESSED || state.get(key) == REPEATED;
}
-
+
public static int isKeyState(int key){
return state.get(key);
}
-
+
public static int isMouseWheelState(){
return state.get(MOUSE_WHEEL_OFFSET);
}
-
+
public static boolean isMouseWheelUp(){
return state.get(MOUSE_WHEEL_OFFSET) == UP;
}
-
+
public static boolean isMouseWheelDown(){
return state.get(MOUSE_WHEEL_OFFSET) == DOWN;
}
@@ -239,7 +239,7 @@ public class Input{
public static int getMouseWheelOffset() {
return MOUSE_WHEEL_OFFSET;
}
-
-
-
+
+
+
}
diff --git a/src/fr/technicalgames/render/Camera.java b/src/fr/technicalgames/render/Camera.java
index 732f81a..40250dd 100644
--- a/src/fr/technicalgames/render/Camera.java
+++ b/src/fr/technicalgames/render/Camera.java
@@ -18,10 +18,10 @@ public class Camera {
public static float speed = 1.0f;
-
+
public static Vector3f rot = new Vector3f();
public static Vector3f pos = new Vector3f();
-
+
public static void update(){
speed = SPEED * Main.delta;
if(Input.isKey(GLFW_KEY_LEFT_CONTROL))speed *= 2.0f;
@@ -51,11 +51,11 @@ public class Camera {
if(Input.isKey(GLFW.GLFW_KEY_SPACE)){
pos.y += speed;
}
- if(Input.isKeyDown(GLFW_KEY_ESCAPE))glfwSetWindowShouldClose(Main.windowID, GL11.GL_TRUE);
+ if(Input.isKeyDown(GLFW_KEY_ESCAPE))glfwSetWindowShouldClose(Main.windowID, true);
if(Input.isButtonDown(0))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
if(Input.isButtonDown(1))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
}
-
+
public static void transform(){
matrix.loadIdentity();
matrix.rotate(new Quaternion(new Vector3f(1,0,0),rot.x));
@@ -63,5 +63,5 @@ public class Camera {
matrix.rotate(new Quaternion(new Vector3f(0,0,1),rot.z));
matrix.tranlate(-pos.x, -pos.y, -pos.z);
}
-
+
}