Merge remote-tracking branch 'upstream/master' into issue295
Conflicts: common.gradle
This commit is contained in:
commit
b84bd0d120
14
.gitignore
vendored
14
.gitignore
vendored
@ -5,8 +5,9 @@
|
|||||||
/dist/
|
/dist/
|
||||||
/build/
|
/build/
|
||||||
/netbeans/
|
/netbeans/
|
||||||
|
/sdk/jdks/local/
|
||||||
/jme3-core/build/
|
/jme3-core/build/
|
||||||
/jme3-core/src/main/java/com/jme3/system/JmeVersion.java
|
/jme3-core/src/main/resources/com/jme3/system/version.properties
|
||||||
/jme3-plugins/build/
|
/jme3-plugins/build/
|
||||||
/jme3-desktop/build/
|
/jme3-desktop/build/
|
||||||
/jme3-android-native/build/
|
/jme3-android-native/build/
|
||||||
@ -81,6 +82,7 @@
|
|||||||
/sdk/jme3-vehicle-creator/build/
|
/sdk/jme3-vehicle-creator/build/
|
||||||
/sdk/jme3-welcome-screen/build/
|
/sdk/jme3-welcome-screen/build/
|
||||||
/sdk/jme3-glsl-support/build/
|
/sdk/jme3-glsl-support/build/
|
||||||
|
/sdk/jme3-dark-laf/build/
|
||||||
/sdk/nbproject/private/
|
/sdk/nbproject/private/
|
||||||
/sdk/jme3-scenecomposer/nbproject/private/
|
/sdk/jme3-scenecomposer/nbproject/private/
|
||||||
/sdk/jme3-core/nbproject/private/
|
/sdk/jme3-core/nbproject/private/
|
||||||
@ -134,3 +136,13 @@
|
|||||||
!/jme3-bullet-native/libs/native/osx/x86_64/libbulletjme.dylib
|
!/jme3-bullet-native/libs/native/osx/x86_64/libbulletjme.dylib
|
||||||
!/jme3-bullet-native/libs/native/linux/x86/libbulletjme.so
|
!/jme3-bullet-native/libs/native/linux/x86/libbulletjme.so
|
||||||
!/jme3-bullet-native/libs/native/linux/x86_64/libbulletjme.so
|
!/jme3-bullet-native/libs/native/linux/x86_64/libbulletjme.so
|
||||||
|
/.nb-gradle/
|
||||||
|
/sdk/ant-jme/nbproject/private/
|
||||||
|
/sdk/nbi/stub/ext/engine/nbproject/private/
|
||||||
|
/sdk/nbi/stub/ext/components/products/jdk/nbproject/private/
|
||||||
|
/sdk/nbi/stub/ext/components/products/blender/nbproject/private/
|
||||||
|
/sdk/nbi/stub/ext/components/products/helloworld/nbproject/private/
|
||||||
|
/sdk/BasicGameTemplate/nbproject/private/
|
||||||
|
/sdk/nbi/stub/ext/components/products/jdk/build/
|
||||||
|
/sdk/nbi/stub/ext/components/products/jdk/dist/
|
||||||
|
/sdk/jme3-dark-laf/nbproject/private/
|
||||||
|
20
.travis.yml
20
.travis.yml
@ -8,9 +8,9 @@ cache:
|
|||||||
- gradle-cache
|
- gradle-cache
|
||||||
- netbeans
|
- netbeans
|
||||||
|
|
||||||
branches:
|
# branches:
|
||||||
only:
|
# only:
|
||||||
- master
|
# - master
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
slack:
|
slack:
|
||||||
@ -25,16 +25,26 @@ install:
|
|||||||
script:
|
script:
|
||||||
- ./gradlew check
|
- ./gradlew check
|
||||||
- ./gradlew createZipDistribution
|
- ./gradlew createZipDistribution
|
||||||
|
- "[ $TRAVIS_BRANCH == 'master' ] && [ $TRAVIS_PULL_REQUEST == 'false' ] && ./gradlew uploadArchives || :"
|
||||||
|
|
||||||
|
before_deploy:
|
||||||
|
- export RELEASE_DIST=$(ls build/distributions/*.zip)
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
provider: releases
|
provider: releases
|
||||||
api_key:
|
api_key:
|
||||||
secure: "KbFiMt0a8FxUKvCJUYwikLYaqqGMn1p6k4OsXnGqwptQZEUIayabNLHeaD2kTNT3e6AY1ETwQLff/lB2LttmIo4g5NWW63g1K3A/HwgnhJwETengiProZ/Udl+ugPeDL/+ar43HUhFq4knBnzFKnEcHAThTPVqH/RMDvZf1UUYI="
|
secure: PuEsJd6juXBH29ByITW3ntSAyrwWs0IeFvXJ5Y2YlhojhSMtTwkoWeB6YmDJWP4fhzbajk4TQ1HlOX2IxJXSW/8ShOEIUlGXz9fHiST0dkSM+iRAUgC5enCLW5ITPTiem7eY9ZhS9miIam7ngce9jHNMh75PTzZrEJtezoALT9w=
|
||||||
file: build/distributions/jME3.1.0_snapshot-github_2015-06-20.zip
|
file_glob: true
|
||||||
|
file: "${RELEASE_DIST}"
|
||||||
skip_cleanup: true
|
skip_cleanup: true
|
||||||
on:
|
on:
|
||||||
|
repo: jMonkeyEngine/jmonkeyengine
|
||||||
tags: true
|
tags: true
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- git fetch --unshallow
|
||||||
|
- "[ $TRAVIS_PULL_REQUEST == 'false' ] && openssl aes-256-cbc -K $encrypted_a1949b55824a_key -iv $encrypted_a1949b55824a_iv -in private/www-updater.key.enc -out private/www-updater.key -d || :"
|
||||||
|
|
||||||
# before_install:
|
# before_install:
|
||||||
# required libs for android build tools
|
# required libs for android build tools
|
||||||
# sudo apt-get update
|
# sudo apt-get update
|
||||||
|
32
build.gradle
32
build.gradle
@ -10,6 +10,8 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'base'
|
apply plugin: 'base'
|
||||||
|
apply from: file('version.gradle')
|
||||||
|
apply from: file('upload.gradle')
|
||||||
|
|
||||||
// This is applied to all sub projects
|
// This is applied to all sub projects
|
||||||
subprojects {
|
subprojects {
|
||||||
@ -59,8 +61,7 @@ task libDist(dependsOn: subprojects.build) << {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task createZipDistribution(type:Zip,dependsOn:["dist","libDist"], description:"Package the nightly zip distribution"){
|
task createZipDistribution(type:Zip,dependsOn:["dist","libDist"], description:"Package the nightly zip distribution"){
|
||||||
archiveName "jME"+jmeVersion+"_"+jmeVersionTag+"_"+new Date().format("yyyy-MM-dd")+".zip"
|
archiveName "jME" + jmeFullVersion + ".zip"
|
||||||
|
|
||||||
into("/") {
|
into("/") {
|
||||||
from {"./dist"}
|
from {"./dist"}
|
||||||
}
|
}
|
||||||
@ -114,7 +115,12 @@ task wrapper(type: Wrapper, description: 'Creates and deploys the Gradle wrapper
|
|||||||
gradleVersion = '2.2.1'
|
gradleVersion = '2.2.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
String findNDK() {
|
ext {
|
||||||
|
ndkCommandPath = ""
|
||||||
|
ndkExists = false
|
||||||
|
}
|
||||||
|
|
||||||
|
task configureAndroidNDK {
|
||||||
def ndkBuildFile = "ndk-build"
|
def ndkBuildFile = "ndk-build"
|
||||||
// if windows, use ndk-build.cmd instead
|
// if windows, use ndk-build.cmd instead
|
||||||
if (System.properties['os.name'].toLowerCase().contains('windows')) {
|
if (System.properties['os.name'].toLowerCase().contains('windows')) {
|
||||||
@ -127,27 +133,13 @@ String findNDK() {
|
|||||||
if (System.env.ANDROID_NDK != null) {
|
if (System.env.ANDROID_NDK != null) {
|
||||||
ndkBuildPath = System.env.ANDROID_NDK + File.separator + ndkBuildFile
|
ndkBuildPath = System.env.ANDROID_NDK + File.separator + ndkBuildFile
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new File(ndkBuildPath).exists()) {
|
if (new File(ndkBuildPath).exists()) {
|
||||||
return ndkBuildPath
|
ndkExists = true
|
||||||
} else {
|
ndkCommandPath = ndkBuildPath
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean checkNdkExists(String ndkCommandPath) {
|
|
||||||
// String ndkCommandPath = findNDK()
|
|
||||||
if (ndkCommandPath != null && new File(ndkCommandPath).exists()) {
|
|
||||||
return true
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ext {
|
|
||||||
ndkCommandPath = findNDK()
|
|
||||||
ndkExists = checkNdkExists(ndkCommandPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
//class IncrementalReverseTask extends DefaultTask {
|
//class IncrementalReverseTask extends DefaultTask {
|
||||||
// @InputDirectory
|
// @InputDirectory
|
||||||
// def File inputDir
|
// def File inputDir
|
||||||
|
@ -4,10 +4,9 @@
|
|||||||
|
|
||||||
apply plugin: 'java'
|
apply plugin: 'java'
|
||||||
apply plugin: 'maven'
|
apply plugin: 'maven'
|
||||||
apply plugin: 'maven-publish'
|
|
||||||
|
|
||||||
group = 'com.jme3'
|
group = 'com.jme3'
|
||||||
version = jmeVersion + '-' + jmeVersionTag
|
version = jmePomVersion
|
||||||
|
|
||||||
sourceCompatibility = '1.6'
|
sourceCompatibility = '1.6'
|
||||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||||
@ -19,11 +18,23 @@ repositories {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
deployerJars
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Adding dependencies here will add the dependencies to each subproject.
|
// Adding dependencies here will add the dependencies to each subproject.
|
||||||
testCompile group: 'junit', name: 'junit', version: '4.12'
|
testCompile group: 'junit', name: 'junit', version: '4.12'
|
||||||
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.0.28-beta'
|
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.0.28-beta'
|
||||||
testCompile group: 'org.easytesting', name: 'fest-assert-core', version: '2.0M10'
|
testCompile group: 'org.easytesting', name: 'fest-assert-core', version: '2.0M10'
|
||||||
|
deployerJars "org.apache.maven.wagon:wagon-ssh:2.9"
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
manifest {
|
||||||
|
attributes 'Implementation-Title': 'jMonkeyEngine',
|
||||||
|
'Implementation-Version': jmeFullVersion
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
javadoc {
|
javadoc {
|
||||||
@ -58,16 +69,18 @@ artifacts {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
uploadArchives {
|
||||||
publications {
|
repositories.mavenDeployer {
|
||||||
maven(MavenPublication) {
|
configuration = configurations.deployerJars
|
||||||
from components.java
|
|
||||||
artifact sourcesJar
|
|
||||||
artifact javadocJar
|
|
||||||
|
|
||||||
pom.withXml {
|
// disable this otherwise it will fill up the server with stale jars
|
||||||
asNode().children().last() + {
|
uniqueVersion = false
|
||||||
resolveStrategy = Closure.DELEGATE_FIRST
|
|
||||||
|
repository(url: "scp://updates.jmonkeyengine.org/var/www/updates/maven") {
|
||||||
|
authentication(userName: "www-updater", privateKey: "private/www-updater.key")
|
||||||
|
}
|
||||||
|
|
||||||
|
pom.project {
|
||||||
name POM_NAME
|
name POM_NAME
|
||||||
description POM_DESCRIPTION
|
description POM_DESCRIPTION
|
||||||
url POM_URL
|
url POM_URL
|
||||||
@ -85,14 +98,6 @@ publishing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
maven {
|
|
||||||
url "${rootProject.buildDir}/repo" // change to point to your repo, e.g. http://my.org/repo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
task createFolders(description: 'Creates the source folders if they do not exist.') doLast {
|
task createFolders(description: 'Creates the source folders if they do not exist.') doLast {
|
||||||
|
@ -3,7 +3,9 @@ jmeVersion = 3.1.0
|
|||||||
# Version used for application and settings folder, no spaces!
|
# Version used for application and settings folder, no spaces!
|
||||||
jmeMainVersion = 3.1
|
jmeMainVersion = 3.1
|
||||||
# Version addition pre-alpha-svn, Stable, Beta
|
# Version addition pre-alpha-svn, Stable, Beta
|
||||||
jmeVersionTag = snapshot-github
|
jmeVersionTag = SNAPSHOT
|
||||||
|
# Increment this each time jmeVersionTag changes but jmeVersion stays the same
|
||||||
|
jmeVersionTagID = 0
|
||||||
|
|
||||||
# specify if JavaDoc should be built
|
# specify if JavaDoc should be built
|
||||||
buildJavaDoc = true
|
buildJavaDoc = true
|
||||||
|
@ -145,7 +145,7 @@ public class Ipo {
|
|||||||
|
|
||||||
float[] times = new float[framesAmount + 1];
|
float[] times = new float[framesAmount + 1];
|
||||||
Vector3f[] translations = new Vector3f[framesAmount + 1];
|
Vector3f[] translations = new Vector3f[framesAmount + 1];
|
||||||
float[] translation = new float[] { localTranslation.x, localTranslation.y, localTranslation.z };
|
float[] translation = new float[3];
|
||||||
Quaternion[] rotations = new Quaternion[framesAmount + 1];
|
Quaternion[] rotations = new Quaternion[framesAmount + 1];
|
||||||
float[] quaternionRotation = new float[] { localRotation.getX(), localRotation.getY(), localRotation.getZ(), localRotation.getW(), };
|
float[] quaternionRotation = new float[] { localRotation.getX(), localRotation.getY(), localRotation.getZ(), localRotation.getW(), };
|
||||||
float[] eulerRotation = localRotation.toAngles(null);
|
float[] eulerRotation = localRotation.toAngles(null);
|
||||||
@ -165,6 +165,8 @@ public class Ipo {
|
|||||||
|
|
||||||
// calculating track data
|
// calculating track data
|
||||||
for (int frame = startFrame; frame <= stopFrame; ++frame) {
|
for (int frame = startFrame; frame <= stopFrame; ++frame) {
|
||||||
|
boolean translationSet = false;
|
||||||
|
translation[0] = translation[1] = translation[2] = 0;
|
||||||
int index = frame - startFrame;
|
int index = frame - startFrame;
|
||||||
times[index] = index * timeBetweenFrames;// start + (frame - 1) * timeBetweenFrames;
|
times[index] = index * timeBetweenFrames;// start + (frame - 1) * timeBetweenFrames;
|
||||||
for (int j = 0; j < bezierCurves.length; ++j) {
|
for (int j = 0; j < bezierCurves.length; ++j) {
|
||||||
@ -173,15 +175,18 @@ public class Ipo {
|
|||||||
// LOCATION
|
// LOCATION
|
||||||
case AC_LOC_X:
|
case AC_LOC_X:
|
||||||
translation[0] = (float) value;
|
translation[0] = (float) value;
|
||||||
|
translationSet = true;
|
||||||
break;
|
break;
|
||||||
case AC_LOC_Y:
|
case AC_LOC_Y:
|
||||||
if (swapAxes && value != 0) {
|
if (swapAxes && value != 0) {
|
||||||
value = -value;
|
value = -value;
|
||||||
}
|
}
|
||||||
translation[yIndex] = (float) value;
|
translation[yIndex] = (float) value;
|
||||||
|
translationSet = true;
|
||||||
break;
|
break;
|
||||||
case AC_LOC_Z:
|
case AC_LOC_Z:
|
||||||
translation[zIndex] = (float) value;
|
translation[zIndex] = (float) value;
|
||||||
|
translationSet = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// EULER ROTATION
|
// EULER ROTATION
|
||||||
@ -235,7 +240,11 @@ public class Ipo {
|
|||||||
LOGGER.log(Level.WARNING, "Unknown ipo curve type: {0}.", bezierCurves[j].getType());
|
LOGGER.log(Level.WARNING, "Unknown ipo curve type: {0}.", bezierCurves[j].getType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(translationSet) {
|
||||||
translations[index] = localRotation.multLocal(new Vector3f(translation[0], translation[1], translation[2]));
|
translations[index] = localRotation.multLocal(new Vector3f(translation[0], translation[1], translation[2]));
|
||||||
|
} else {
|
||||||
|
translations[index] = new Vector3f();
|
||||||
|
}
|
||||||
|
|
||||||
if(boneContext != null) {
|
if(boneContext != null) {
|
||||||
if(boneContext.getBone().getParent() == null && boneContext.is(BoneContext.NO_LOCAL_LOCATION)) {
|
if(boneContext.getBone().getParent() == null && boneContext.is(BoneContext.NO_LOCAL_LOCATION)) {
|
||||||
|
@ -811,37 +811,70 @@ extern "C" {
|
|||||||
/*
|
/*
|
||||||
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
* Method: getAngularFactor
|
* Method: getAngularFactor
|
||||||
* Signature: (J)F
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_getAngularFactor
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_getAngularFactor
|
||||||
(JNIEnv *env, jobject object, jlong bodyId) {
|
(JNIEnv *env, jobject object, jlong bodyId, jobject factor) {
|
||||||
btRigidBody* body = reinterpret_cast<btRigidBody*>(bodyId);
|
|
||||||
if (body == NULL) {
|
|
||||||
jclass newExc = env->FindClass("java/lang/NullPointerException");
|
|
||||||
env->ThrowNew(newExc, "The native object does not exist.");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return body->getAngularFactor().getX();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
|
||||||
* Method: setAngularFactor
|
|
||||||
* Signature: (JF)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_setAngularFactor
|
|
||||||
(JNIEnv *env, jobject object, jlong bodyId, jfloat value) {
|
|
||||||
btRigidBody* body = reinterpret_cast<btRigidBody*>(bodyId);
|
btRigidBody* body = reinterpret_cast<btRigidBody*>(bodyId);
|
||||||
if (body == NULL) {
|
if (body == NULL) {
|
||||||
jclass newExc = env->FindClass("java/lang/NullPointerException");
|
jclass newExc = env->FindClass("java/lang/NullPointerException");
|
||||||
env->ThrowNew(newExc, "The native object does not exist.");
|
env->ThrowNew(newExc, "The native object does not exist.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
btVector3 vec1 = btVector3();
|
jmeBulletUtil::convert(env, &body->getAngularFactor(), factor);
|
||||||
vec1.setX(value);
|
}
|
||||||
vec1.setY(value);
|
|
||||||
vec1.setZ(value);
|
|
||||||
body->setAngularFactor(vec1);
|
/*
|
||||||
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
|
* Method: setAngularFactor
|
||||||
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_setAngularFactor
|
||||||
|
(JNIEnv *env, jobject object, jlong bodyId, jobject factor) {
|
||||||
|
btRigidBody* body = reinterpret_cast<btRigidBody*>(bodyId);
|
||||||
|
if (body == NULL) {
|
||||||
|
jclass newExc = env->FindClass("java/lang/NullPointerException");
|
||||||
|
env->ThrowNew(newExc, "The native object does not exist.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
btVector3 vec = btVector3();
|
||||||
|
jmeBulletUtil::convert(env, factor, &vec);
|
||||||
|
body->setAngularFactor(vec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
|
* Method: getLinearFactor
|
||||||
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_getLinearFactor
|
||||||
|
(JNIEnv *env, jobject object, jlong bodyId, jobject factor) {
|
||||||
|
btRigidBody* body = reinterpret_cast<btRigidBody*>(bodyId);
|
||||||
|
if (body == NULL) {
|
||||||
|
jclass newExc = env->FindClass("java/lang/NullPointerException");
|
||||||
|
env->ThrowNew(newExc, "The native object does not exist.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
jmeBulletUtil::convert(env, &body->getLinearFactor(), factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
|
* Method: setLinearFactor
|
||||||
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_setLinearFactor
|
||||||
|
(JNIEnv *env, jobject object, jlong bodyId, jobject factor) {
|
||||||
|
btRigidBody* body = reinterpret_cast<btRigidBody*>(bodyId);
|
||||||
|
if (body == NULL) {
|
||||||
|
jclass newExc = env->FindClass("java/lang/NullPointerException");
|
||||||
|
env->ThrowNew(newExc, "The native object does not exist.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
btVector3 vec = btVector3();
|
||||||
|
jmeBulletUtil::convert(env, factor, &vec);
|
||||||
|
body->setLinearFactor(vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -396,18 +396,35 @@ JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_getAngula
|
|||||||
/*
|
/*
|
||||||
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
* Method: getAngularFactor
|
* Method: getAngularFactor
|
||||||
* Signature: (J)F
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_getAngularFactor
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_getAngularFactor
|
||||||
(JNIEnv *, jobject, jlong);
|
(JNIEnv *, jobject, jlong, jobject);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
* Method: setAngularFactor
|
* Method: setAngularFactor
|
||||||
* Signature: (JF)V
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_setAngularFactor
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_setAngularFactor
|
||||||
(JNIEnv *, jobject, jlong, jfloat);
|
(JNIEnv *, jobject, jlong, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
|
* Method: getLinearFactor
|
||||||
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_getLinearFactor
|
||||||
|
(JNIEnv *, jobject, jlong, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: com_jme3_bullet_objects_PhysicsRigidBody
|
||||||
|
* Method: setLinearFactor
|
||||||
|
* Signature: (JLcom/jme3/math/Vector3f;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_objects_PhysicsRigidBody_setLinearFactor
|
||||||
|
(JNIEnv *, jobject, jlong, jobject);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -93,8 +93,10 @@ public class CapsuleCollisionShape extends CollisionShape{
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setScale(Vector3f scale) {
|
public void setScale(Vector3f scale) {
|
||||||
|
if (!scale.equals(Vector3f.UNIT_XYZ)) {
|
||||||
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "CapsuleCollisionShape cannot be scaled");
|
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "CapsuleCollisionShape cannot be scaled");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void write(JmeExporter ex) throws IOException {
|
public void write(JmeExporter ex) throws IOException {
|
||||||
super.write(ex);
|
super.write(ex);
|
||||||
|
@ -627,16 +627,44 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
|
|||||||
private native float getAngularSleepingThreshold(long objectId);
|
private native float getAngularSleepingThreshold(long objectId);
|
||||||
|
|
||||||
public float getAngularFactor() {
|
public float getAngularFactor() {
|
||||||
return getAngularFactor(objectId);
|
return getAngularFactor(null).getX();
|
||||||
}
|
}
|
||||||
|
|
||||||
private native float getAngularFactor(long objectId);
|
public Vector3f getAngularFactor(Vector3f store) {
|
||||||
|
// doing like this prevent from breaking the API
|
||||||
|
if (store == null) {
|
||||||
|
store = new Vector3f();
|
||||||
|
}
|
||||||
|
getAngularFactor(objectId, store);
|
||||||
|
return store;
|
||||||
|
}
|
||||||
|
|
||||||
|
private native void getAngularFactor(long objectId, Vector3f vec);
|
||||||
|
|
||||||
public void setAngularFactor(float factor) {
|
public void setAngularFactor(float factor) {
|
||||||
|
setAngularFactor(objectId, new Vector3f(factor, factor, factor));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAngularFactor(Vector3f factor) {
|
||||||
setAngularFactor(objectId, factor);
|
setAngularFactor(objectId, factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private native void setAngularFactor(long objectId, float factor);
|
private native void setAngularFactor(long objectId, Vector3f factor);
|
||||||
|
|
||||||
|
public Vector3f getLinearFactor() {
|
||||||
|
Vector3f vec = new Vector3f();
|
||||||
|
getLinearFactor(objectId, vec);
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
private native void getLinearFactor(long objectId, Vector3f vec);
|
||||||
|
|
||||||
|
public void setLinearFactor(Vector3f factor) {
|
||||||
|
setLinearFactor(objectId, factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private native void setLinearFactor(long objectId, Vector3f factor);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* do not use manually, joints are added automatically
|
* do not use manually, joints are added automatically
|
||||||
@ -673,7 +701,13 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
|
|||||||
capsule.write(getGravity(), "gravity", Vector3f.ZERO);
|
capsule.write(getGravity(), "gravity", Vector3f.ZERO);
|
||||||
capsule.write(getFriction(), "friction", 0.5f);
|
capsule.write(getFriction(), "friction", 0.5f);
|
||||||
capsule.write(getRestitution(), "restitution", 0);
|
capsule.write(getRestitution(), "restitution", 0);
|
||||||
|
Vector3f angularFactor = getAngularFactor(null);
|
||||||
|
if (angularFactor.x == angularFactor.y && angularFactor.y == angularFactor.z) {
|
||||||
capsule.write(getAngularFactor(), "angularFactor", 1);
|
capsule.write(getAngularFactor(), "angularFactor", 1);
|
||||||
|
} else {
|
||||||
|
capsule.write(getAngularFactor(null), "angularFactor", Vector3f.UNIT_XYZ);
|
||||||
|
capsule.write(getLinearFactor(), "linearFactor", Vector3f.UNIT_XYZ);
|
||||||
|
}
|
||||||
capsule.write(kinematic, "kinematic", false);
|
capsule.write(kinematic, "kinematic", false);
|
||||||
|
|
||||||
capsule.write(getLinearDamping(), "linearDamping", 0);
|
capsule.write(getLinearDamping(), "linearDamping", 0);
|
||||||
@ -703,7 +737,13 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
|
|||||||
setKinematic(capsule.readBoolean("kinematic", false));
|
setKinematic(capsule.readBoolean("kinematic", false));
|
||||||
|
|
||||||
setRestitution(capsule.readFloat("restitution", 0));
|
setRestitution(capsule.readFloat("restitution", 0));
|
||||||
|
Vector3f angularFactor = (Vector3f) capsule.readSavable("angularFactor", Vector3f.NAN.clone());
|
||||||
|
if(angularFactor == Vector3f.NAN) {
|
||||||
setAngularFactor(capsule.readFloat("angularFactor", 1));
|
setAngularFactor(capsule.readFloat("angularFactor", 1));
|
||||||
|
} else {
|
||||||
|
setAngularFactor(angularFactor);
|
||||||
|
setLinearFactor((Vector3f) capsule.readSavable("linearFactor", Vector3f.UNIT_XYZ.clone()));
|
||||||
|
}
|
||||||
setDamping(capsule.readFloat("linearDamping", 0), capsule.readFloat("angularDamping", 0));
|
setDamping(capsule.readFloat("linearDamping", 0), capsule.readFloat("angularDamping", 0));
|
||||||
setSleepingThresholds(capsule.readFloat("linearSleepingThreshold", 0.8f), capsule.readFloat("angularSleepingThreshold", 1.0f));
|
setSleepingThresholds(capsule.readFloat("linearSleepingThreshold", 0.8f), capsule.readFloat("angularSleepingThreshold", 1.0f));
|
||||||
setCcdMotionThreshold(capsule.readFloat("ccdMotionThreshold", 0));
|
setCcdMotionThreshold(capsule.readFloat("ccdMotionThreshold", 0));
|
||||||
|
@ -17,55 +17,23 @@ sourceSets {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buildscript {
|
task updateVersionPropertiesFile << {
|
||||||
repositories {
|
def verfile = file('src/main/resources/com/jme3/system/version.properties')
|
||||||
mavenCentral()
|
verfile.text = "# THIS IS AN AUTO-GENERATED FILE..\n" +
|
||||||
}
|
"# DO NOT MODIFY!\n" +
|
||||||
dependencies {
|
"build.date=${jmeBuildDate}\n" +
|
||||||
classpath 'org.ajoberstar:gradle-git:1.0.0-rc.1'
|
"git.revision=${jmeRevision}\n" +
|
||||||
}
|
"git.branch=${jmeBranchName}\n" +
|
||||||
|
"git.hash=${jmeGitHash}\n" +
|
||||||
|
"git.hash.short=${jmeShortGitHash}\n" +
|
||||||
|
"git.tag=${jmeGitTag}\n" +
|
||||||
|
"name.full=jMonkeyEngine ${jmeFullVersion}\n" +
|
||||||
|
"version.full=${jmeFullVersion}\n" +
|
||||||
|
"version.number=${jmeVersion}\n" +
|
||||||
|
"version.tag=${jmeVersionTag}"
|
||||||
}
|
}
|
||||||
|
|
||||||
import java.text.SimpleDateFormat
|
compileJava.dependsOn(updateVersionPropertiesFile)
|
||||||
import org.ajoberstar.grgit.*
|
|
||||||
|
|
||||||
task updateVersion << {
|
|
||||||
|
|
||||||
def verfile = file('src/main/java/com/jme3/system/JmeVersion.java')
|
|
||||||
def jmeGitHash
|
|
||||||
def jmeShortGitHash
|
|
||||||
def jmeBuildDate
|
|
||||||
def jmeBranchName
|
|
||||||
|
|
||||||
try {
|
|
||||||
def grgit = Grgit.open(project.file('.').parent)
|
|
||||||
jmeGitHash = grgit.head().id
|
|
||||||
jmeShortGitHash = grgit.head().abbreviatedId
|
|
||||||
jmeBuildDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
|
|
||||||
jmeBranchName = grgit.branch.current.name
|
|
||||||
} catch (ex) {
|
|
||||||
// Failed to get repo info
|
|
||||||
logger.warn("Failed to get repository info: " + ex.message + ". " + \
|
|
||||||
"Only partial build info will be generated.")
|
|
||||||
|
|
||||||
jmeGitHash = ""
|
|
||||||
jmeShortGitHash = ""
|
|
||||||
jmeBuildDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
|
|
||||||
jmeBranchName = "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
verfile.text = "\npackage com.jme3.system;\n\n" +
|
|
||||||
"/**\n * THIS IS AN AUTO-GENERATED FILE..\n * DO NOT MODIFY!\n */\n" +
|
|
||||||
"public class JmeVersion {\n" +
|
|
||||||
" public static final String BUILD_DATE = \"${jmeBuildDate}\";\n" +
|
|
||||||
" public static final String BRANCH_NAME = \"${jmeBranchName}\";\n" +
|
|
||||||
" public static final String GIT_HASH = \"${jmeGitHash}\";\n" +
|
|
||||||
" public static final String GIT_SHORT_HASH = \"${jmeShortGitHash}\";\n" +
|
|
||||||
" public static final String FULL_NAME = \"jMonkeyEngine ${jmeVersion} (${jmeVersionTag})\";\n" +
|
|
||||||
"}\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
compileJava.dependsOn(updateVersion)
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
}
|
}
|
||||||
|
@ -553,7 +553,6 @@ public final class Bone implements Savable {
|
|||||||
Vector3f translate = modelPos.add(rotate.mult(scale.mult(modelBindInversePos, tmp2), tmp2), tmp2);
|
Vector3f translate = modelPos.add(rotate.mult(scale.mult(modelBindInversePos, tmp2), tmp2), tmp2);
|
||||||
|
|
||||||
// Populating the matrix
|
// Populating the matrix
|
||||||
outTransform.loadIdentity();
|
|
||||||
outTransform.setTransform(translate, scale, rotate.toRotationMatrix(tmp4));
|
outTransform.setTransform(translate, scale, rotate.toRotationMatrix(tmp4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -702,8 +702,10 @@ public class Cinematic extends AbstractCinematicEvent implements AppState {
|
|||||||
dispose();
|
dispose();
|
||||||
cinematicEvents.clear();
|
cinematicEvents.clear();
|
||||||
timeLine.clear();
|
timeLine.clear();
|
||||||
|
if (eventsData != null) {
|
||||||
eventsData.clear();
|
eventsData.clear();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* used internally to cleanup the cinematic. Called when the clear() method
|
* used internally to cleanup the cinematic. Called when the clear() method
|
||||||
|
@ -43,7 +43,7 @@ import com.jme3.export.JmeImporter;
|
|||||||
import com.jme3.export.OutputCapsule;
|
import com.jme3.export.OutputCapsule;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@ -431,15 +431,17 @@ public class AnimationEvent extends AbstractCinematicEvent {
|
|||||||
@Override
|
@Override
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
|
if (cinematic != null) {
|
||||||
Object o = cinematic.getEventData(MODEL_CHANNELS, model);
|
Object o = cinematic.getEventData(MODEL_CHANNELS, model);
|
||||||
if (o != null) {
|
if (o != null) {
|
||||||
ArrayList<AnimChannel> list = (ArrayList<AnimChannel>) o;
|
Collection<AnimChannel> values = ((HashMap<Integer, AnimChannel>) o).values();
|
||||||
list.remove(channel);
|
while (values.remove(channel));
|
||||||
if (list.isEmpty()) {
|
if (values.isEmpty()) {
|
||||||
cinematic.removeEventData(MODEL_CHANNELS, model);
|
cinematic.removeEventData(MODEL_CHANNELS, model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cinematic = null;
|
cinematic = null;
|
||||||
channel = null;
|
channel = null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,7 @@ import com.jme3.math.Vector3f;
|
|||||||
import com.jme3.scene.CollisionData;
|
import com.jme3.scene.CollisionData;
|
||||||
import com.jme3.scene.Mesh;
|
import com.jme3.scene.Mesh;
|
||||||
import com.jme3.scene.Mesh.Mode;
|
import com.jme3.scene.Mesh.Mode;
|
||||||
|
import com.jme3.scene.VertexBuffer;
|
||||||
import com.jme3.scene.VertexBuffer.Type;
|
import com.jme3.scene.VertexBuffer.Type;
|
||||||
import com.jme3.scene.mesh.IndexBuffer;
|
import com.jme3.scene.mesh.IndexBuffer;
|
||||||
import com.jme3.scene.mesh.VirtualIndexBuffer;
|
import com.jme3.scene.mesh.VirtualIndexBuffer;
|
||||||
@ -114,8 +115,13 @@ public class BIHTree implements CollisionData {
|
|||||||
|
|
||||||
bihSwapTmp = new float[9];
|
bihSwapTmp = new float[9];
|
||||||
|
|
||||||
FloatBuffer vb = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
|
VertexBuffer vBuffer = mesh.getBuffer(Type.Position);
|
||||||
|
if(vBuffer == null){
|
||||||
|
throw new IllegalArgumentException("A mesh should at least contain a Position buffer");
|
||||||
|
}
|
||||||
IndexBuffer ib = mesh.getIndexBuffer();
|
IndexBuffer ib = mesh.getIndexBuffer();
|
||||||
|
FloatBuffer vb = (FloatBuffer) vBuffer.getData();
|
||||||
|
|
||||||
if (ib == null) {
|
if (ib == null) {
|
||||||
ib = new VirtualIndexBuffer(mesh.getVertexCount(), mesh.getMode());
|
ib = new VirtualIndexBuffer(mesh.getVertexCount(), mesh.getMode());
|
||||||
} else if (mesh.getMode() != Mode.Triangles) {
|
} else if (mesh.getMode() != Mode.Triangles) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2012, 2015 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -32,6 +32,7 @@
|
|||||||
package com.jme3.light;
|
package com.jme3.light;
|
||||||
|
|
||||||
import com.jme3.bounding.BoundingBox;
|
import com.jme3.bounding.BoundingBox;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.renderer.Camera;
|
import com.jme3.renderer.Camera;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
@ -49,6 +50,13 @@ import com.jme3.util.TempVars;
|
|||||||
*/
|
*/
|
||||||
public class AmbientLight extends Light {
|
public class AmbientLight extends Light {
|
||||||
|
|
||||||
|
public AmbientLight() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public AmbientLight(ColorRGBA color) {
|
||||||
|
super(color);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean intersectsBox(BoundingBox box, TempVars vars) {
|
public boolean intersectsBox(BoundingBox box, TempVars vars) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2012, 2015 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -36,6 +36,7 @@ import com.jme3.export.InputCapsule;
|
|||||||
import com.jme3.export.JmeExporter;
|
import com.jme3.export.JmeExporter;
|
||||||
import com.jme3.export.JmeImporter;
|
import com.jme3.export.JmeImporter;
|
||||||
import com.jme3.export.OutputCapsule;
|
import com.jme3.export.OutputCapsule;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.renderer.Camera;
|
import com.jme3.renderer.Camera;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
@ -53,6 +54,30 @@ public class DirectionalLight extends Light {
|
|||||||
|
|
||||||
protected Vector3f direction = new Vector3f(0f, -1f, 0f);
|
protected Vector3f direction = new Vector3f(0f, -1f, 0f);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a DirectionalLight
|
||||||
|
*/
|
||||||
|
public DirectionalLight() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a DirectionalLight with the given direction
|
||||||
|
* @param direction the light's direction
|
||||||
|
*/
|
||||||
|
public DirectionalLight(Vector3f direction) {
|
||||||
|
setDirection(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a DirectionalLight with the given direction and the given color
|
||||||
|
* @param direction the light's direction
|
||||||
|
* @param color the light's color
|
||||||
|
*/
|
||||||
|
public DirectionalLight(Vector3f direction, ColorRGBA color) {
|
||||||
|
super(color);
|
||||||
|
setDirection(direction);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void computeLastDistance(Spatial owner) {
|
public void computeLastDistance(Spatial owner) {
|
||||||
lastDistance = 0; // directional lights are always closest to their owner
|
lastDistance = 0; // directional lights are always closest to their owner
|
||||||
@ -77,7 +102,7 @@ public class DirectionalLight extends Light {
|
|||||||
*
|
*
|
||||||
* @param dir the direction of the light.
|
* @param dir the direction of the light.
|
||||||
*/
|
*/
|
||||||
public void setDirection(Vector3f dir){
|
public final void setDirection(Vector3f dir){
|
||||||
direction.set(dir);
|
direction.set(dir);
|
||||||
if (!direction.isUnitVector()) {
|
if (!direction.isUnitVector()) {
|
||||||
direction.normalizeLocal();
|
direction.normalizeLocal();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2012, 2015 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -94,7 +94,7 @@ public abstract class Light implements Savable, Cloneable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ColorRGBA color = new ColorRGBA(1f,1f,1f,1f);
|
protected ColorRGBA color = new ColorRGBA(ColorRGBA.White);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used in LightList for caching the distance
|
* Used in LightList for caching the distance
|
||||||
@ -115,6 +115,13 @@ public abstract class Light implements Savable, Cloneable {
|
|||||||
boolean frustumCheckNeeded = true;
|
boolean frustumCheckNeeded = true;
|
||||||
boolean intersectsFrustum = false;
|
boolean intersectsFrustum = false;
|
||||||
|
|
||||||
|
protected Light() {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Light(ColorRGBA color) {
|
||||||
|
setColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the color of the light.
|
* Returns the color of the light.
|
||||||
*
|
*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2012, 2015 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -32,14 +32,13 @@
|
|||||||
package com.jme3.light;
|
package com.jme3.light;
|
||||||
|
|
||||||
import com.jme3.bounding.BoundingBox;
|
import com.jme3.bounding.BoundingBox;
|
||||||
import com.jme3.bounding.BoundingSphere;
|
|
||||||
import com.jme3.bounding.BoundingVolume;
|
import com.jme3.bounding.BoundingVolume;
|
||||||
import com.jme3.export.InputCapsule;
|
import com.jme3.export.InputCapsule;
|
||||||
import com.jme3.export.JmeExporter;
|
import com.jme3.export.JmeExporter;
|
||||||
import com.jme3.export.JmeImporter;
|
import com.jme3.export.JmeImporter;
|
||||||
import com.jme3.export.OutputCapsule;
|
import com.jme3.export.OutputCapsule;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.FastMath;
|
import com.jme3.math.FastMath;
|
||||||
import com.jme3.math.Plane;
|
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.renderer.Camera;
|
import com.jme3.renderer.Camera;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
@ -62,6 +61,52 @@ public class PointLight extends Light {
|
|||||||
protected float radius = 0;
|
protected float radius = 0;
|
||||||
protected float invRadius = 0;
|
protected float invRadius = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a PointLight
|
||||||
|
*/
|
||||||
|
public PointLight() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a PointLight at the given position
|
||||||
|
* @param position the position in world space
|
||||||
|
*/
|
||||||
|
public PointLight(Vector3f position) {
|
||||||
|
setPosition(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a PointLight at the given position and with the given color
|
||||||
|
* @param position the position in world space
|
||||||
|
* @param color the light color
|
||||||
|
*/
|
||||||
|
public PointLight(Vector3f position, ColorRGBA color) {
|
||||||
|
super(color);
|
||||||
|
setPosition(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a PointLight at the given position, with the given color and the
|
||||||
|
* given radius
|
||||||
|
* @param position the position in world space
|
||||||
|
* @param color the light color
|
||||||
|
* @param radius the light radius
|
||||||
|
*/
|
||||||
|
public PointLight(Vector3f position, ColorRGBA color, float radius) {
|
||||||
|
this(position, color);
|
||||||
|
setRadius(radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a PointLight at the given position, with the given radius
|
||||||
|
* @param position the position in world space
|
||||||
|
* @param radius the light radius
|
||||||
|
*/
|
||||||
|
public PointLight(Vector3f position, float radius) {
|
||||||
|
this(position);
|
||||||
|
setRadius(radius);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void computeLastDistance(Spatial owner) {
|
public void computeLastDistance(Spatial owner) {
|
||||||
if (owner.getWorldBound() != null) {
|
if (owner.getWorldBound() != null) {
|
||||||
@ -88,7 +133,7 @@ public class PointLight extends Light {
|
|||||||
*
|
*
|
||||||
* @param position the world space position of the light.
|
* @param position the world space position of the light.
|
||||||
*/
|
*/
|
||||||
public void setPosition(Vector3f position) {
|
public final void setPosition(Vector3f position) {
|
||||||
this.position.set(position);
|
this.position.set(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,13 +160,13 @@ public class PointLight extends Light {
|
|||||||
*
|
*
|
||||||
* @throws IllegalArgumentException If radius is negative
|
* @throws IllegalArgumentException If radius is negative
|
||||||
*/
|
*/
|
||||||
public void setRadius(float radius) {
|
public final void setRadius(float radius) {
|
||||||
if (radius < 0) {
|
if (radius < 0) {
|
||||||
throw new IllegalArgumentException("Light radius cannot be negative");
|
throw new IllegalArgumentException("Light radius cannot be negative");
|
||||||
}
|
}
|
||||||
this.radius = radius;
|
this.radius = radius;
|
||||||
if (radius != 0) {
|
if (radius != 0f) {
|
||||||
this.invRadius = 1 / radius;
|
this.invRadius = 1f / radius;
|
||||||
} else {
|
} else {
|
||||||
this.invRadius = 0;
|
this.invRadius = 0;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
* Copyright (c) 2009-2012, 2015 jMonkeyEngine
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -34,6 +34,7 @@ package com.jme3.light;
|
|||||||
import com.jme3.bounding.BoundingBox;
|
import com.jme3.bounding.BoundingBox;
|
||||||
import com.jme3.bounding.BoundingVolume;
|
import com.jme3.bounding.BoundingVolume;
|
||||||
import com.jme3.export.*;
|
import com.jme3.export.*;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.FastMath;
|
import com.jme3.math.FastMath;
|
||||||
import com.jme3.math.Plane;
|
import com.jme3.math.Plane;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
@ -44,36 +45,121 @@ import java.io.IOException;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a spot light.
|
* Represents a spot light.
|
||||||
* A spot light emmit a cone of light from a position and in a direction.
|
* A spot light emits a cone of light from a position and in a direction.
|
||||||
* It can be used to fake torch lights or car's lights.
|
* It can be used to fake torch lights or cars' lights.
|
||||||
* <p>
|
* <p>
|
||||||
* In addition to a position and a direction, spot lights also have a range which
|
* In addition to a position and a direction, spot lights also have a range which
|
||||||
* can be used to attenuate the influence of the light depending on the
|
* can be used to attenuate the influence of the light depending on the
|
||||||
* distance between the light and the effected object.
|
* distance between the light and the affected object.
|
||||||
* Also the angle of the cone can be tweaked by changing the spot inner angle and the spot outer angle.
|
* Also the angle of the cone can be tweaked by changing the spot inner angle and the spot outer angle.
|
||||||
* the spot inner angle determin the cone of light where light has full influence.
|
* the spot inner angle determines the cone of light where light has full influence.
|
||||||
* the spot outer angle determin the cone global cone of light of the spot light.
|
* the spot outer angle determines the cone global cone of light of the spot light.
|
||||||
* the light intensity slowly decrease between the inner cone and the outer cone.
|
* the light intensity slowly decreases between the inner cone and the outer cone.
|
||||||
* @author Nehon
|
* @author Nehon
|
||||||
*/
|
*/
|
||||||
public class SpotLight extends Light {
|
public class SpotLight extends Light {
|
||||||
|
|
||||||
protected Vector3f position = new Vector3f();
|
protected Vector3f position = new Vector3f();
|
||||||
protected Vector3f direction = new Vector3f(0,-1,0);
|
protected Vector3f direction = new Vector3f(0, -1, 0);
|
||||||
protected float spotInnerAngle = FastMath.QUARTER_PI / 8;
|
protected float spotInnerAngle = FastMath.QUARTER_PI / 8;
|
||||||
protected float spotOuterAngle = FastMath.QUARTER_PI / 6;
|
protected float spotOuterAngle = FastMath.QUARTER_PI / 6;
|
||||||
protected float spotRange = 100;
|
protected float spotRange = 100;
|
||||||
protected float invSpotRange = 1f / 100;
|
protected float invSpotRange = 1f / 100;
|
||||||
protected float packedAngleCos=0;
|
protected float packedAngleCos = 0;
|
||||||
|
|
||||||
protected float outerAngleCosSqr, outerAngleSinSqr;
|
protected float outerAngleCosSqr, outerAngleSinSqr;
|
||||||
protected float outerAngleSinRcp, outerAngleSin, outerAngleCos;
|
protected float outerAngleSinRcp, outerAngleSin, outerAngleCos;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a SpotLight.
|
||||||
|
*/
|
||||||
public SpotLight() {
|
public SpotLight() {
|
||||||
super();
|
super();
|
||||||
computeAngleParameters();
|
computeAngleParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a SpotLight at the given position and with the given direction.
|
||||||
|
* @param position the position in world space.
|
||||||
|
* @param direction the direction of the light.
|
||||||
|
*/
|
||||||
|
public SpotLight(Vector3f position, Vector3f direction) {
|
||||||
|
this();
|
||||||
|
setPosition(position);
|
||||||
|
setDirection(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a SpotLight at the given position, with the given direction, and the
|
||||||
|
* given range.
|
||||||
|
* @param position the position in world space.
|
||||||
|
* @param direction the direction of the light.
|
||||||
|
* @param range the spot light range
|
||||||
|
*/
|
||||||
|
public SpotLight(Vector3f position, Vector3f direction, float range) {
|
||||||
|
this();
|
||||||
|
setPosition(position);
|
||||||
|
setDirection(direction);
|
||||||
|
this.spotRange = range;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a SpotLight at the given position, with the given direction and
|
||||||
|
* the given color.
|
||||||
|
* @param position the position in world space.
|
||||||
|
* @param direction the direction of the light.
|
||||||
|
* @param color the light's color.
|
||||||
|
*/
|
||||||
|
public SpotLight(Vector3f position, Vector3f direction, ColorRGBA color) {
|
||||||
|
super(color);
|
||||||
|
computeAngleParameters();
|
||||||
|
setPosition(position);
|
||||||
|
setDirection(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a SpotLight at the given position, with the given direction,
|
||||||
|
* the given range and the given color.
|
||||||
|
* @param position the position in world space.
|
||||||
|
* @param direction the direction of the light.
|
||||||
|
* @param range the spot light range
|
||||||
|
* @param color the light's color.
|
||||||
|
*/
|
||||||
|
public SpotLight(Vector3f position, Vector3f direction, float range, ColorRGBA color) {
|
||||||
|
super(color);
|
||||||
|
computeAngleParameters();
|
||||||
|
setPosition(position);
|
||||||
|
setDirection(direction);
|
||||||
|
this.spotRange = range;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a SpotLight at the given position, with the given direction,
|
||||||
|
* the given color and the given inner and outer angles
|
||||||
|
* (controls the falloff of the light)
|
||||||
|
*
|
||||||
|
* @param position the position in world space.
|
||||||
|
* @param direction the direction of the light.
|
||||||
|
* @param range the spot light range
|
||||||
|
* @param color the light's color.
|
||||||
|
* @param innerAngle the inner angle of the spot light.
|
||||||
|
* @param outerAngle the outer angle of the spot light.
|
||||||
|
*
|
||||||
|
* @see SpotLight#setSpotInnerAngle(float)
|
||||||
|
* @see SpotLight#setSpotOuterAngle(float)
|
||||||
|
*/
|
||||||
|
public SpotLight(Vector3f position, Vector3f direction, float range, ColorRGBA color, float innerAngle, float outerAngle) {
|
||||||
|
super(color);
|
||||||
|
this.spotInnerAngle = innerAngle;
|
||||||
|
this.spotOuterAngle = outerAngle;
|
||||||
|
computeAngleParameters();
|
||||||
|
setPosition(position);
|
||||||
|
setDirection(direction);
|
||||||
|
this.spotRange = range;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void computeAngleParameters() {
|
private void computeAngleParameters() {
|
||||||
float innerCos = FastMath.cos(spotInnerAngle);
|
float innerCos = FastMath.cos(spotInnerAngle);
|
||||||
outerAngleCos = FastMath.cos(spotOuterAngle);
|
outerAngleCos = FastMath.cos(spotOuterAngle);
|
||||||
@ -189,7 +275,7 @@ public class SpotLight extends Light {
|
|||||||
return direction;
|
return direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDirection(Vector3f direction) {
|
public final void setDirection(Vector3f direction) {
|
||||||
this.direction.set(direction);
|
this.direction.set(direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,7 +283,7 @@ public class SpotLight extends Light {
|
|||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPosition(Vector3f position) {
|
public final void setPosition(Vector3f position) {
|
||||||
this.position.set(position);
|
this.position.set(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,53 +154,34 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void fromFrame(Vector3f location, Vector3f direction, Vector3f up, Vector3f left) {
|
public void fromFrame(Vector3f location, Vector3f direction, Vector3f up, Vector3f left) {
|
||||||
loadIdentity();
|
|
||||||
|
|
||||||
TempVars vars = TempVars.get();
|
TempVars vars = TempVars.get();
|
||||||
|
try {
|
||||||
|
Vector3f fwdVector = vars.vect1.set(direction);
|
||||||
|
Vector3f leftVector = vars.vect2.set(fwdVector).crossLocal(up);
|
||||||
|
Vector3f upVector = vars.vect3.set(leftVector).crossLocal(fwdVector);
|
||||||
|
|
||||||
Vector3f f = vars.vect1.set(direction);
|
m00 = leftVector.x;
|
||||||
Vector3f s = vars.vect2.set(f).crossLocal(up);
|
m01 = leftVector.y;
|
||||||
Vector3f u = vars.vect3.set(s).crossLocal(f);
|
m02 = leftVector.z;
|
||||||
// s.normalizeLocal();
|
m03 = -leftVector.dot(location);
|
||||||
// u.normalizeLocal();
|
|
||||||
|
|
||||||
m00 = s.x;
|
m10 = upVector.x;
|
||||||
m01 = s.y;
|
m11 = upVector.y;
|
||||||
m02 = s.z;
|
m12 = upVector.z;
|
||||||
|
m13 = -upVector.dot(location);
|
||||||
|
|
||||||
m10 = u.x;
|
m20 = -fwdVector.x;
|
||||||
m11 = u.y;
|
m21 = -fwdVector.y;
|
||||||
m12 = u.z;
|
m22 = -fwdVector.z;
|
||||||
|
m23 = fwdVector.dot(location);
|
||||||
m20 = -f.x;
|
|
||||||
m21 = -f.y;
|
|
||||||
m22 = -f.z;
|
|
||||||
|
|
||||||
// m00 = -left.x;
|
|
||||||
// m10 = -left.y;
|
|
||||||
// m20 = -left.z;
|
|
||||||
//
|
|
||||||
// m01 = up.x;
|
|
||||||
// m11 = up.y;
|
|
||||||
// m21 = up.z;
|
|
||||||
//
|
|
||||||
// m02 = -direction.x;
|
|
||||||
// m12 = -direction.y;
|
|
||||||
// m22 = -direction.z;
|
|
||||||
//
|
|
||||||
|
|
||||||
Matrix4f transMatrix = vars.tempMat4;
|
|
||||||
transMatrix.loadIdentity();
|
|
||||||
transMatrix.m03 = -location.x;
|
|
||||||
transMatrix.m13 = -location.y;
|
|
||||||
transMatrix.m23 = -location.z;
|
|
||||||
this.multLocal(transMatrix);
|
|
||||||
|
|
||||||
|
m30 = 0f;
|
||||||
|
m31 = 0f;
|
||||||
|
m32 = 0f;
|
||||||
|
m33 = 1f;
|
||||||
|
} finally {
|
||||||
vars.release();
|
vars.release();
|
||||||
|
}
|
||||||
// transMatrix.multLocal(this);
|
|
||||||
|
|
||||||
// set(transMatrix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,7 +49,7 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
|
|
||||||
private Quaternion rot = new Quaternion();
|
private Quaternion rot = new Quaternion();
|
||||||
private Vector3f translation = new Vector3f();
|
private Vector3f translation = new Vector3f();
|
||||||
private Vector3f scale = new Vector3f(1,1,1);
|
private Vector3f scale = new Vector3f(1, 1, 1);
|
||||||
|
|
||||||
public Transform(Vector3f translation, Quaternion rot){
|
public Transform(Vector3f translation, Quaternion rot){
|
||||||
this.translation.set(translation);
|
this.translation.set(translation);
|
||||||
@ -283,9 +283,32 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
* Loads the identity. Equal to translation=0,0,0 scale=1,1,1 rot=0,0,0,1.
|
* Loads the identity. Equal to translation=0,0,0 scale=1,1,1 rot=0,0,0,1.
|
||||||
*/
|
*/
|
||||||
public void loadIdentity() {
|
public void loadIdentity() {
|
||||||
translation.set(0,0,0);
|
translation.set(0, 0, 0);
|
||||||
scale.set(1,1,1);
|
scale.set(1, 1, 1);
|
||||||
rot.set(0,0,0,1);
|
rot.set(0, 0, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = 7;
|
||||||
|
hash = 89 * hash + rot.hashCode();
|
||||||
|
hash = 89 * hash + translation.hashCode();
|
||||||
|
hash = 89 * hash + scale.hashCode();
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getClass() != obj.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final Transform other = (Transform) obj;
|
||||||
|
return this.translation.equals(other.translation)
|
||||||
|
&& this.scale.equals(other.scale)
|
||||||
|
&& this.rot.equals(other.rot);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -307,22 +330,21 @@ public final class Transform implements Savable, Cloneable, java.io.Serializable
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void write(JmeExporter e) throws IOException {
|
public void write(JmeExporter e) throws IOException {
|
||||||
OutputCapsule capsule = e.getCapsule(this);
|
OutputCapsule capsule = e.getCapsule(this);
|
||||||
capsule.write(rot, "rot", new Quaternion());
|
capsule.write(rot, "rot", Quaternion.IDENTITY);
|
||||||
capsule.write(translation, "translation", Vector3f.ZERO);
|
capsule.write(translation, "translation", Vector3f.ZERO);
|
||||||
capsule.write(scale, "scale", Vector3f.UNIT_XYZ);
|
capsule.write(scale, "scale", Vector3f.UNIT_XYZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void read(JmeImporter e) throws IOException {
|
public void read(JmeImporter e) throws IOException {
|
||||||
InputCapsule capsule = e.getCapsule(this);
|
InputCapsule capsule = e.getCapsule(this);
|
||||||
|
|
||||||
rot = (Quaternion)capsule.readSavable("rot", new Quaternion());
|
rot.set((Quaternion)capsule.readSavable("rot", Quaternion.IDENTITY));
|
||||||
translation = (Vector3f)capsule.readSavable("translation", null);
|
translation.set((Vector3f)capsule.readSavable("translation", Vector3f.ZERO));
|
||||||
if( translation == null ) {
|
scale.set((Vector3f)capsule.readSavable("scale", Vector3f.UNIT_XYZ));
|
||||||
translation = new Vector3f();
|
|
||||||
}
|
|
||||||
scale = (Vector3f)capsule.readSavable("scale", Vector3f.UNIT_XYZ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -300,7 +300,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
|||||||
public void postFrame(FrameBuffer out) {
|
public void postFrame(FrameBuffer out) {
|
||||||
|
|
||||||
FrameBuffer sceneBuffer = renderFrameBuffer;
|
FrameBuffer sceneBuffer = renderFrameBuffer;
|
||||||
if (renderFrameBufferMS != null && !renderer.getCaps().contains(Caps.OpenGL31)) {
|
if (renderFrameBufferMS != null && !renderer.getCaps().contains(Caps.OpenGL32)) {
|
||||||
renderer.copyFrameBuffer(renderFrameBufferMS, renderFrameBuffer, true);
|
renderer.copyFrameBuffer(renderFrameBufferMS, renderFrameBuffer, true);
|
||||||
} else if (renderFrameBufferMS != null) {
|
} else if (renderFrameBufferMS != null) {
|
||||||
sceneBuffer = renderFrameBufferMS;
|
sceneBuffer = renderFrameBufferMS;
|
||||||
@ -443,7 +443,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
|||||||
//antialiasing on filters only supported in opengl 3 due to depth read problem
|
//antialiasing on filters only supported in opengl 3 due to depth read problem
|
||||||
if (numSamples > 1 && caps.contains(Caps.FrameBufferMultisample)) {
|
if (numSamples > 1 && caps.contains(Caps.FrameBufferMultisample)) {
|
||||||
renderFrameBufferMS = new FrameBuffer(width, height, numSamples);
|
renderFrameBufferMS = new FrameBuffer(width, height, numSamples);
|
||||||
if (caps.contains(Caps.OpenGL31)) {
|
if (caps.contains(Caps.OpenGL32)) {
|
||||||
Texture2D msColor = new Texture2D(width, height, numSamples, fbFormat);
|
Texture2D msColor = new Texture2D(width, height, numSamples, fbFormat);
|
||||||
Texture2D msDepth = new Texture2D(width, height, numSamples, Format.Depth);
|
Texture2D msDepth = new Texture2D(width, height, numSamples, Format.Depth);
|
||||||
renderFrameBufferMS.setDepthTexture(msDepth);
|
renderFrameBufferMS.setDepthTexture(msDepth);
|
||||||
@ -456,7 +456,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numSamples <= 1 || !caps.contains(Caps.OpenGL31)) {
|
if (numSamples <= 1 || !caps.contains(Caps.OpenGL32)) {
|
||||||
renderFrameBuffer = new FrameBuffer(width, height, 1);
|
renderFrameBuffer = new FrameBuffer(width, height, 1);
|
||||||
renderFrameBuffer.setDepthBuffer(Format.Depth);
|
renderFrameBuffer.setDepthBuffer(Format.Depth);
|
||||||
filterTexture = new Texture2D(width, height, fbFormat);
|
filterTexture = new Texture2D(width, height, fbFormat);
|
||||||
|
@ -161,6 +161,7 @@ public interface GL {
|
|||||||
public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
|
public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
|
||||||
public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
|
public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
|
||||||
public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
|
public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
|
||||||
|
public static final int GL_TEXTURE_BASE_LEVEL = 0x813C;
|
||||||
public static final int GL_TEXTURE_MAG_FILTER = 0x2800;
|
public static final int GL_TEXTURE_MAG_FILTER = 0x2800;
|
||||||
public static final int GL_TEXTURE_MAX_LEVEL = 0x813D;
|
public static final int GL_TEXTURE_MAX_LEVEL = 0x813D;
|
||||||
public static final int GL_TEXTURE_MIN_FILTER = 0x2801;
|
public static final int GL_TEXTURE_MIN_FILTER = 0x2801;
|
||||||
|
@ -376,7 +376,9 @@ public class GLRenderer implements Renderer {
|
|||||||
caps.add(Caps.TextureFilterAnisotropic);
|
caps.add(Caps.TextureFilterAnisotropic);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasExtension("GL_EXT_framebuffer_object") || gl3 != null) {
|
if (hasExtension("GL_EXT_framebuffer_object")
|
||||||
|
|| gl3 != null
|
||||||
|
|| caps.contains(Caps.OpenGLES20)) {
|
||||||
caps.add(Caps.FrameBuffer);
|
caps.add(Caps.FrameBuffer);
|
||||||
|
|
||||||
limits.put(Limits.RenderBufferSize, getInteger(GLFbo.GL_MAX_RENDERBUFFER_SIZE_EXT));
|
limits.put(Limits.RenderBufferSize, getInteger(GLFbo.GL_MAX_RENDERBUFFER_SIZE_EXT));
|
||||||
@ -401,7 +403,7 @@ public class GLRenderer implements Renderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasExtension("GL_ARB_draw_buffers")) {
|
if (hasExtension("GL_ARB_draw_buffers") || gl3 != null) {
|
||||||
limits.put(Limits.FrameBufferMrtAttachments, getInteger(GLExt.GL_MAX_DRAW_BUFFERS_ARB));
|
limits.put(Limits.FrameBufferMrtAttachments, getInteger(GLExt.GL_MAX_DRAW_BUFFERS_ARB));
|
||||||
if (limits.get(Limits.FrameBufferMrtAttachments) > 1) {
|
if (limits.get(Limits.FrameBufferMrtAttachments) > 1) {
|
||||||
caps.add(Caps.FrameBufferMRT);
|
caps.add(Caps.FrameBufferMRT);
|
||||||
@ -1064,6 +1066,9 @@ public class GLRenderer implements Renderer {
|
|||||||
stringBuf.append("\n");
|
stringBuf.append("\n");
|
||||||
} else {
|
} else {
|
||||||
if (gles2) {
|
if (gles2) {
|
||||||
|
// request GLSL ES (1.00) when compiling under GLES2.
|
||||||
|
stringBuf.append("#version 100\n");
|
||||||
|
|
||||||
if (source.getType() == ShaderType.Fragment) {
|
if (source.getType() == ShaderType.Fragment) {
|
||||||
// GLES2 requires precision qualifier.
|
// GLES2 requires precision qualifier.
|
||||||
stringBuf.append("precision mediump float;\n");
|
stringBuf.append("precision mediump float;\n");
|
||||||
@ -1080,6 +1085,7 @@ public class GLRenderer implements Renderer {
|
|||||||
if (linearizeSrgbImages) {
|
if (linearizeSrgbImages) {
|
||||||
stringBuf.append("#define SRGB 1\n");
|
stringBuf.append("#define SRGB 1\n");
|
||||||
}
|
}
|
||||||
|
stringBuf.append("#define ").append(source.getType().name().toUpperCase()).append("_SHADER 1\n");
|
||||||
|
|
||||||
stringBuf.append(source.getDefines());
|
stringBuf.append(source.getDefines());
|
||||||
stringBuf.append(source.getSource());
|
stringBuf.append(source.getSource());
|
||||||
|
@ -90,6 +90,8 @@ final class TextureUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public GLImageFormat getImageFormatWithError(Format fmt, boolean isSrgb) {
|
public GLImageFormat getImageFormatWithError(Format fmt, boolean isSrgb) {
|
||||||
|
//if the passed format is one kind of depth there isno point in getting the srgb format;
|
||||||
|
isSrgb = isSrgb && fmt != Format.Depth && fmt != Format.Depth16 && fmt != Format.Depth24 && fmt != Format.Depth24Stencil8 && fmt != Format.Depth32 && fmt != Format.Depth32F;
|
||||||
GLImageFormat glFmt = getImageFormat(fmt, isSrgb);
|
GLImageFormat glFmt = getImageFormat(fmt, isSrgb);
|
||||||
if (glFmt == null && isSrgb) {
|
if (glFmt == null && isSrgb) {
|
||||||
glFmt = getImageFormat(fmt, false);
|
glFmt = getImageFormat(fmt, false);
|
||||||
|
@ -444,6 +444,7 @@ public class BatchNode extends GeometryGroupNode {
|
|||||||
int maxWeights = -1;
|
int maxWeights = -1;
|
||||||
|
|
||||||
Mesh.Mode mode = null;
|
Mesh.Mode mode = null;
|
||||||
|
float lineWidth = 1f;
|
||||||
for (Geometry geom : geometries) {
|
for (Geometry geom : geometries) {
|
||||||
totalVerts += geom.getVertexCount();
|
totalVerts += geom.getVertexCount();
|
||||||
totalTris += geom.getTriangleCount();
|
totalTris += geom.getTriangleCount();
|
||||||
@ -452,6 +453,7 @@ public class BatchNode extends GeometryGroupNode {
|
|||||||
maxVertCount = geom.getVertexCount();
|
maxVertCount = geom.getVertexCount();
|
||||||
}
|
}
|
||||||
Mesh.Mode listMode;
|
Mesh.Mode listMode;
|
||||||
|
float listLineWidth = 1f;
|
||||||
int components;
|
int components;
|
||||||
switch (geom.getMesh().getMode()) {
|
switch (geom.getMesh().getMode()) {
|
||||||
case Points:
|
case Points:
|
||||||
@ -462,6 +464,7 @@ public class BatchNode extends GeometryGroupNode {
|
|||||||
case LineStrip:
|
case LineStrip:
|
||||||
case Lines:
|
case Lines:
|
||||||
listMode = Mesh.Mode.Lines;
|
listMode = Mesh.Mode.Lines;
|
||||||
|
listLineWidth = geom.getMesh().getLineWidth();
|
||||||
components = 2;
|
components = 2;
|
||||||
break;
|
break;
|
||||||
case TriangleFan:
|
case TriangleFan:
|
||||||
@ -493,11 +496,19 @@ public class BatchNode extends GeometryGroupNode {
|
|||||||
+ " primitive types: " + mode + " != " + listMode);
|
+ " primitive types: " + mode + " != " + listMode);
|
||||||
}
|
}
|
||||||
mode = listMode;
|
mode = listMode;
|
||||||
|
if (mode == Mesh.Mode.Lines) {
|
||||||
|
if (lineWidth != 1f && listLineWidth != lineWidth) {
|
||||||
|
throw new UnsupportedOperationException("When using Mesh Line mode, cannot combine meshes with different line width "
|
||||||
|
+ lineWidth + " != " + listLineWidth);
|
||||||
|
}
|
||||||
|
lineWidth = listLineWidth;
|
||||||
|
}
|
||||||
compsForBuf[VertexBuffer.Type.Index.ordinal()] = components;
|
compsForBuf[VertexBuffer.Type.Index.ordinal()] = components;
|
||||||
}
|
}
|
||||||
|
|
||||||
outMesh.setMaxNumWeights(maxWeights);
|
outMesh.setMaxNumWeights(maxWeights);
|
||||||
outMesh.setMode(mode);
|
outMesh.setMode(mode);
|
||||||
|
outMesh.setLineWidth(lineWidth);
|
||||||
if (totalVerts >= 65536) {
|
if (totalVerts >= 65536) {
|
||||||
// make sure we create an UnsignedInt buffer so
|
// make sure we create an UnsignedInt buffer so
|
||||||
// we can fit all of the meshes
|
// we can fit all of the meshes
|
||||||
|
@ -54,6 +54,8 @@ import java.util.prefs.Preferences;
|
|||||||
*/
|
*/
|
||||||
public final class AppSettings extends HashMap<String, Object> {
|
public final class AppSettings extends HashMap<String, Object> {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private static final AppSettings defaults = new AppSettings(false);
|
private static final AppSettings defaults = new AppSettings(false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
66
jme3-core/src/main/java/com/jme3/system/JmeVersion.java
Normal file
66
jme3-core/src/main/java/com/jme3/system/JmeVersion.java
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2015 jMonkeyEngine
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package com.jme3.system;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pulls in version info from the version.properties file.
|
||||||
|
*
|
||||||
|
* @author Kirill Vainer
|
||||||
|
*/
|
||||||
|
public class JmeVersion {
|
||||||
|
|
||||||
|
private static final Logger logger = Logger.getLogger(JmeVersion.class.getName());
|
||||||
|
private static final Properties props = new Properties();
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
props.load(JmeVersion.class.getResourceAsStream("version.properties"));
|
||||||
|
} catch (IOException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to read version info!", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String BUILD_DATE = props.getProperty("build.date", "1900-01-01");
|
||||||
|
public static final String BRANCH_NAME = props.getProperty("git.branch", "unknown");
|
||||||
|
public static final String GIT_HASH = props.getProperty("git.hash", "");
|
||||||
|
public static final String GIT_SHORT_HASH = props.getProperty("git.hash.short", "");
|
||||||
|
public static final String GIT_TAG = props.getProperty("git.tag", "");
|
||||||
|
public static final String VERSION_NUMBER = props.getProperty("version.number", "");
|
||||||
|
public static final String VERSION_TAG = props.getProperty("version.tag", "");
|
||||||
|
public static final String VERSION_FULL = props.getProperty("version.full", "");
|
||||||
|
public static final String FULL_NAME = props.getProperty("name.full", "jMonkeyEngine (unknown version)");
|
||||||
|
}
|
@ -36,6 +36,7 @@ import com.jme3.math.Quaternion;
|
|||||||
import com.jme3.math.Vector2f;
|
import com.jme3.math.Vector2f;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.math.Vector4f;
|
import com.jme3.math.Vector4f;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.lang.ref.PhantomReference;
|
import java.lang.ref.PhantomReference;
|
||||||
import java.lang.ref.Reference;
|
import java.lang.ref.Reference;
|
||||||
import java.lang.ref.ReferenceQueue;
|
import java.lang.ref.ReferenceQueue;
|
||||||
@ -1010,11 +1011,15 @@ public final class BufferUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ByteBuffer createByteBuffer(String data) {
|
public static ByteBuffer createByteBuffer(String data) {
|
||||||
byte[] bytes = data.getBytes();
|
try {
|
||||||
|
byte[] bytes = data.getBytes("UTF-8");
|
||||||
ByteBuffer bb = createByteBuffer(bytes.length);
|
ByteBuffer bb = createByteBuffer(bytes.length);
|
||||||
bb.put(bytes);
|
bb.put(bytes);
|
||||||
bb.flip();
|
bb.flip();
|
||||||
return bb;
|
return bb;
|
||||||
|
} catch (UnsupportedEncodingException ex) {
|
||||||
|
throw new UnsupportedOperationException(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,7 +42,6 @@ import java.io.*;
|
|||||||
public class LittleEndien extends InputStream implements DataInput {
|
public class LittleEndien extends InputStream implements DataInput {
|
||||||
|
|
||||||
protected BufferedInputStream in;
|
protected BufferedInputStream in;
|
||||||
protected BufferedReader inRead;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new LittleEndien reader from the given input stream. The
|
* Creates a new LittleEndien reader from the given input stream. The
|
||||||
@ -51,7 +50,6 @@ public class LittleEndien extends InputStream implements DataInput {
|
|||||||
*/
|
*/
|
||||||
public LittleEndien(InputStream in) {
|
public LittleEndien(InputStream in) {
|
||||||
this.in = new BufferedInputStream(in);
|
this.in = new BufferedInputStream(in);
|
||||||
inRead = new BufferedReader(new InputStreamReader(in));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int read() throws IOException {
|
public int read() throws IOException {
|
||||||
@ -141,7 +139,7 @@ public class LittleEndien extends InputStream implements DataInput {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String readLine() throws IOException {
|
public String readLine() throws IOException {
|
||||||
return inRead.readLine();
|
throw new IOException("Unsupported operation");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String readUTF() throws IOException {
|
public String readUTF() throws IOException {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
Exception This material definition is deprecated. Please use Unshaded.j3md instead.
|
||||||
MaterialDef Colored Textured {
|
MaterialDef Colored Textured {
|
||||||
|
|
||||||
MaterialParameters {
|
MaterialParameters {
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#import "Common/ShaderLib/GLSLCompat.glsllib"
|
||||||
|
|
||||||
#if defined(HAS_GLOWMAP) || defined(HAS_COLORMAP) || (defined(HAS_LIGHTMAP) && !defined(SEPARATE_TEXCOORD))
|
#if defined(HAS_GLOWMAP) || defined(HAS_COLORMAP) || (defined(HAS_LIGHTMAP) && !defined(SEPARATE_TEXCOORD))
|
||||||
#define NEED_TEXCOORD1
|
#define NEED_TEXCOORD1
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,8 +54,8 @@ MaterialDef Unshaded {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Technique {
|
Technique {
|
||||||
VertexShader GLSL100: Common/MatDefs/Misc/Unshaded.vert
|
VertexShader GLSL150: Common/MatDefs/Misc/Unshaded.vert
|
||||||
FragmentShader GLSL100: Common/MatDefs/Misc/Unshaded.frag
|
FragmentShader GLSL150: Common/MatDefs/Misc/Unshaded.frag
|
||||||
|
|
||||||
WorldParameters {
|
WorldParameters {
|
||||||
WorldViewProjectionMatrix
|
WorldViewProjectionMatrix
|
||||||
@ -76,6 +76,25 @@ MaterialDef Unshaded {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Technique {
|
Technique {
|
||||||
|
VertexShader GLSL100: Common/MatDefs/Misc/Unshaded.vert
|
||||||
|
FragmentShader GLSL100: Common/MatDefs/Misc/Unshaded.frag
|
||||||
|
|
||||||
|
WorldParameters {
|
||||||
|
WorldViewProjectionMatrix
|
||||||
|
ViewProjectionMatrix
|
||||||
|
ViewMatrix
|
||||||
|
}
|
||||||
|
|
||||||
|
Defines {
|
||||||
|
INSTANCING : UseInstancing
|
||||||
|
SEPARATE_TEXCOORD : SeparateTexCoord
|
||||||
|
HAS_COLORMAP : ColorMap
|
||||||
|
HAS_LIGHTMAP : LightMap
|
||||||
|
HAS_VERTEXCOLOR : VertexColor
|
||||||
|
HAS_COLOR : Color
|
||||||
|
NUM_BONES : NumberOfBones
|
||||||
|
DISCARD_ALPHA : AlphaDiscardThreshold
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Technique PreNormalPass {
|
Technique PreNormalPass {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#import "Common/ShaderLib/GLSLCompat.glsllib"
|
||||||
#import "Common/ShaderLib/Skinning.glsllib"
|
#import "Common/ShaderLib/Skinning.glsllib"
|
||||||
#import "Common/ShaderLib/Instancing.glsllib"
|
#import "Common/ShaderLib/Instancing.glsllib"
|
||||||
|
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
#if _VERSION_ >= 150
|
|
||||||
out vec4 outFragColor;
|
|
||||||
# define texture1D texture
|
|
||||||
# define texture2D texture
|
|
||||||
# define texture3D texture
|
|
||||||
# define texture2DLod texture
|
|
||||||
# if defined VERTEX_SHADER
|
|
||||||
# define varying out
|
|
||||||
# define attribute in
|
|
||||||
# elif defined FRAGMENT_SHADER
|
|
||||||
# define varying in
|
|
||||||
# define gl_FragColor outFragColor
|
|
||||||
# endif
|
|
||||||
#endif
|
|
@ -0,0 +1,34 @@
|
|||||||
|
#if defined _GL_ES_
|
||||||
|
# define hfloat highp float
|
||||||
|
# define hvec2 highp vec2
|
||||||
|
# define hvec3 highp vec3
|
||||||
|
# define hvec4 highp vec4
|
||||||
|
# define lfloat lowp float
|
||||||
|
# define lvec2 lowp vec2
|
||||||
|
# define lvec3 lowp vec3
|
||||||
|
# define lvec4 lowp vec4
|
||||||
|
#else
|
||||||
|
# define hfloat float
|
||||||
|
# define hvec2 vec2
|
||||||
|
# define hvec3 vec3
|
||||||
|
# define hvec4 vec4
|
||||||
|
# define lfloat float
|
||||||
|
# define lvec2 vec2
|
||||||
|
# define lvec3 vec3
|
||||||
|
# define lvec4 vec4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __VERSION__ >= 130
|
||||||
|
out vec4 outFragColor;
|
||||||
|
# define texture1D texture
|
||||||
|
# define texture2D texture
|
||||||
|
# define texture3D texture
|
||||||
|
# define texture2DLod texture
|
||||||
|
# if defined VERTEX_SHADER
|
||||||
|
# define varying out
|
||||||
|
# define attribute in
|
||||||
|
# elif defined FRAGMENT_SHADER
|
||||||
|
# define varying in
|
||||||
|
# define gl_FragColor outFragColor
|
||||||
|
# endif
|
||||||
|
#endif
|
@ -0,0 +1,11 @@
|
|||||||
|
# THIS IS AN AUTO-GENERATED FILE..
|
||||||
|
# DO NOT MODIFY!
|
||||||
|
build.date=1900-01-01
|
||||||
|
git.revision=0
|
||||||
|
git.branch=unknown
|
||||||
|
git.hash=
|
||||||
|
git.hash.short=
|
||||||
|
git.tag=
|
||||||
|
name.full=jMonkeyEngine 3.1.0-UNKNOWN
|
||||||
|
version.number=3.1.0
|
||||||
|
version.tag=SNAPSHOT
|
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2015 jMonkeyEngine
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package com.jme3.cinematic;
|
||||||
|
|
||||||
|
import com.jme3.animation.AnimControl;
|
||||||
|
import com.jme3.animation.Animation;
|
||||||
|
import com.jme3.cinematic.events.AnimationEvent;
|
||||||
|
import com.jme3.scene.Node;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author davidB
|
||||||
|
*/
|
||||||
|
public class CinematicTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No NPE or any exception when clear() a new Cinematic
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void clearEmpty() {
|
||||||
|
Cinematic sut = new Cinematic();
|
||||||
|
sut.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No ClassCastException when clear() a Cinematic with AnimationEvent
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void clearAnimationEvent() {
|
||||||
|
Cinematic sut = new Cinematic();
|
||||||
|
Node model = new Node("model");
|
||||||
|
AnimControl ac = new AnimControl();
|
||||||
|
ac.addAnim(new Animation("animName", 1.0f));
|
||||||
|
model.addControl(ac);
|
||||||
|
sut.enqueueCinematicEvent(new AnimationEvent(model, "animName"));
|
||||||
|
sut.initialize(null, null);
|
||||||
|
sut.clear();
|
||||||
|
}
|
||||||
|
}
|
@ -21,7 +21,7 @@ dependencies {
|
|||||||
// compile project(':jme3-bullet-native')
|
// compile project(':jme3-bullet-native')
|
||||||
compile project(':jme3-jbullet')
|
compile project(':jme3-jbullet')
|
||||||
compile project(':jme3-jogg')
|
compile project(':jme3-jogg')
|
||||||
// compile project(':jme3-jogl')
|
compile project(':jme3-jogl')
|
||||||
compile project(':jme3-lwjgl')
|
compile project(':jme3-lwjgl')
|
||||||
compile project(':jme3-networking')
|
compile project(':jme3-networking')
|
||||||
compile project(':jme3-niftygui')
|
compile project(':jme3-niftygui')
|
||||||
@ -51,7 +51,9 @@ jar.doFirst{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
task dist (dependsOn: ['build', ':jme3-jogl:jar', ':jme3-bullet:jar', ':jme3-android:jar']) << {
|
task dist (dependsOn: ['build', ':jme3-jogl:jar', ':jme3-bullet:jar', ':jme3-android:jar', \
|
||||||
|
':jme3-android-native:jar', ':jme3-bullet-native-android:jar', \
|
||||||
|
':jme3-bullet-native:jar']) << {
|
||||||
// Copy all dependencies to ../dist/lib, remove versions from jar files
|
// Copy all dependencies to ../dist/lib, remove versions from jar files
|
||||||
configurations.compile.resolvedConfiguration.resolvedArtifacts.each { artifact ->
|
configurations.compile.resolvedConfiguration.resolvedArtifacts.each { artifact ->
|
||||||
copy {
|
copy {
|
||||||
@ -97,23 +99,23 @@ task dist (dependsOn: ['build', ':jme3-jogl:jar', ':jme3-bullet:jar', ':jme3-and
|
|||||||
copy {
|
copy {
|
||||||
from project(':jme3-bullet-native').jar.archivePath
|
from project(':jme3-bullet-native').jar.archivePath
|
||||||
into '../dist/opt/native-bullet'
|
into '../dist/opt/native-bullet'
|
||||||
rename {"jme3-bullet-natives.jar"}
|
rename {project(':jme3-bullet-native').name+".jar"}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy android packages, remove version
|
// Copy android packages, remove version
|
||||||
copy {
|
copy {
|
||||||
from project(':jme3-android').jar.archivePath
|
from project(':jme3-android').jar.archivePath
|
||||||
into '../dist/opt/android'
|
into '../dist/opt/android'
|
||||||
rename { project(':jme3-android').name + ".jar" }
|
rename {project(':jme3-android').name+".jar"}
|
||||||
}
|
}
|
||||||
copy {
|
copy {
|
||||||
from project(':jme3-android-native').jar.archivePath
|
from project(':jme3-android-native').jar.archivePath
|
||||||
into '../dist/opt/android'
|
into '../dist/opt/android'
|
||||||
rename { project(':jme3-android-native').name + ".jar" }
|
rename {project(':jme3-android-native').name+".jar"}
|
||||||
}
|
}
|
||||||
copy {
|
copy {
|
||||||
from project(':jme3-bullet-native-android').jar.archivePath
|
from project(':jme3-bullet-native-android').jar.archivePath
|
||||||
into '../dist/opt/native-bullet'
|
into '../dist/opt/native-bullet'
|
||||||
rename {"jme3-bullet-native-android.jar"}
|
rename {project(':jme3-bullet-native-android').name+".jar"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
594
jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglGL.java
Normal file
594
jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglGL.java
Normal file
@ -0,0 +1,594 @@
|
|||||||
|
package com.jme3.renderer.jogl;
|
||||||
|
|
||||||
|
import com.jme3.renderer.RendererException;
|
||||||
|
import com.jme3.renderer.opengl.GL;
|
||||||
|
import com.jme3.renderer.opengl.GL2;
|
||||||
|
import com.jme3.renderer.opengl.GL3;
|
||||||
|
|
||||||
|
import java.nio.Buffer;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
import java.nio.FloatBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
|
import com.jme3.renderer.opengl.GL4;
|
||||||
|
import com.jogamp.opengl.GLContext;
|
||||||
|
|
||||||
|
public class JoglGL implements GL, GL2, GL3, GL4 {
|
||||||
|
|
||||||
|
private static int getLimitBytes(ByteBuffer buffer) {
|
||||||
|
checkLimit(buffer);
|
||||||
|
return buffer.limit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getLimitBytes(ShortBuffer buffer) {
|
||||||
|
checkLimit(buffer);
|
||||||
|
return buffer.limit() * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getLimitBytes(FloatBuffer buffer) {
|
||||||
|
checkLimit(buffer);
|
||||||
|
return buffer.limit() * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getLimitCount(Buffer buffer, int elementSize) {
|
||||||
|
checkLimit(buffer);
|
||||||
|
return buffer.limit() / elementSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkLimit(Buffer buffer) {
|
||||||
|
if (buffer == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (buffer.limit() == 0) {
|
||||||
|
throw new RendererException("Attempting to upload empty buffer (limit = 0), that's an error");
|
||||||
|
}
|
||||||
|
if (buffer.remaining() == 0) {
|
||||||
|
throw new RendererException("Attempting to upload empty buffer (remaining = 0), that's an error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resetStats() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glActiveTexture(int param1) {
|
||||||
|
GLContext.getCurrentGL().glActiveTexture(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glAlphaFunc(int param1, float param2) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES1().glAlphaFunc(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glAttachShader(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glAttachShader(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBindBuffer(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().glBindBuffer(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBindTexture(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().glBindTexture(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBlendFunc(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().glBlendFunc(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferData(int param1, long param2, int param3) {
|
||||||
|
GLContext.getCurrentGL().glBufferData(param1, param2, null, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferData(int param1, FloatBuffer param2, int param3) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().glBufferData(param1, getLimitBytes(param2), param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferData(int param1, ShortBuffer param2, int param3) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().glBufferData(param1, getLimitBytes(param2), param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferData(int param1, ByteBuffer param2, int param3) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().glBufferData(param1, getLimitBytes(param2), param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferSubData(int param1, long param2, FloatBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().glBufferSubData(param1, param2, getLimitBytes(param3), param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferSubData(int param1, long param2, ShortBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().glBufferSubData(param1, param2, getLimitBytes(param3), param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferSubData(int param1, long param2, ByteBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().glBufferSubData(param1, param2, getLimitBytes(param3), param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glClear(int param1) {
|
||||||
|
GLContext.getCurrentGL().glClear(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glClearColor(float param1, float param2, float param3, float param4) {
|
||||||
|
GLContext.getCurrentGL().glClearColor(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glColorMask(boolean param1, boolean param2, boolean param3, boolean param4) {
|
||||||
|
GLContext.getCurrentGL().glColorMask(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glCompileShader(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glCompileShader(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glCompressedTexImage2D(int param1, int param2, int param3, int param4, int param5, int param6, ByteBuffer param7) {
|
||||||
|
checkLimit(param7);
|
||||||
|
GLContext.getCurrentGL().glCompressedTexImage2D(param1, param2, param3, param4, param5, param6, getLimitBytes(param7), param7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glCompressedTexImage3D(int param1, int param2, int param3, int param4, int param5, int param6, int param7, ByteBuffer param8) {
|
||||||
|
checkLimit(param8);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glCompressedTexImage3D(param1, param2, param3, param4, param5, param6, param7, getLimitBytes(param8), param8);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glCompressedTexSubImage2D(int param1, int param2, int param3, int param4, int param5, int param6, int param7, ByteBuffer param8) {
|
||||||
|
checkLimit(param8);
|
||||||
|
GLContext.getCurrentGL().glCompressedTexSubImage2D(param1, param2, param3, param4, param5, param6, param7, getLimitBytes(param8), param8);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glCompressedTexSubImage3D(int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9, ByteBuffer param10) {
|
||||||
|
checkLimit(param10);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glCompressedTexSubImage3D(param1, param2, param3, param4, param5, param6, param7, param8, param9, getLimitBytes(param10), param10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int glCreateProgram() {
|
||||||
|
return GLContext.getCurrentGL().getGL2ES2().glCreateProgram();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int glCreateShader(int param1) {
|
||||||
|
return GLContext.getCurrentGL().getGL2ES2().glCreateShader(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glCullFace(int param1) {
|
||||||
|
GLContext.getCurrentGL().glCullFace(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteBuffers(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glDeleteBuffers(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteProgram(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glDeleteProgram(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteShader(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glDeleteShader(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteTextures(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glDeleteTextures(param1.limit() ,param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDepthFunc(int param1) {
|
||||||
|
GLContext.getCurrentGL().glDepthFunc(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDepthMask(boolean param1) {
|
||||||
|
GLContext.getCurrentGL().glDepthMask(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDepthRange(double param1, double param2) {
|
||||||
|
GLContext.getCurrentGL().glDepthRange(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDetachShader(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glDetachShader(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDisable(int param1) {
|
||||||
|
GLContext.getCurrentGL().glDisable(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDisableVertexAttribArray(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glDisableVertexAttribArray(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDrawArrays(int param1, int param2, int param3) {
|
||||||
|
GLContext.getCurrentGL().glDrawArrays(param1, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDrawBuffer(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2GL3().glDrawBuffer(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDrawRangeElements(int param1, int param2, int param3, int param4, int param5, long param6) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glDrawRangeElements(param1, param2, param3, param4, param5, param6);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glEnable(int param1) {
|
||||||
|
GLContext.getCurrentGL().glEnable(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glEnableVertexAttribArray(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glEnableVertexAttribArray(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGenBuffers(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glGenBuffers(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGenTextures(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glGenTextures(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGetBoolean(int param1, ByteBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().glGetBooleanv(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGetBufferSubData(int target, long offset, ByteBuffer data) {
|
||||||
|
checkLimit(data);
|
||||||
|
GLContext.getCurrentGL().getGL2GL3().glGetBufferSubData(target, offset, getLimitBytes(data), data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int glGetError() {
|
||||||
|
return GLContext.getCurrentGL().glGetError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGetInteger(int param1, IntBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().glGetIntegerv(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGetProgram(int param1, int param2, IntBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glGetProgramiv(param1, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGetShader(int param1, int param2, IntBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glGetShaderiv(param1, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String glGetString(int param1) {
|
||||||
|
return GLContext.getCurrentGL().glGetString(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String glGetString(int param1, int param2) {
|
||||||
|
return GLContext.getCurrentGL().getGL2ES3().glGetStringi(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean glIsEnabled(int param1) {
|
||||||
|
return GLContext.getCurrentGL().glIsEnabled(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glLineWidth(float param1) {
|
||||||
|
GLContext.getCurrentGL().glLineWidth(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glLinkProgram(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glLinkProgram(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glPixelStorei(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().glPixelStorei(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glPointSize(float param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES1().glPointSize(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glPolygonMode(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().getGL2().glPolygonMode(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glPolygonOffset(float param1, float param2) {
|
||||||
|
GLContext.getCurrentGL().glPolygonOffset(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glReadBuffer(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glReadBuffer(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glReadPixels(int param1, int param2, int param3, int param4, int param5, int param6, ByteBuffer param7) {
|
||||||
|
checkLimit(param7);
|
||||||
|
GLContext.getCurrentGL().glReadPixels(param1, param2, param3, param4, param5, param6, param7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glReadPixels(int param1, int param2, int param3, int param4, int param5, int param6, long param7) {
|
||||||
|
GLContext.getCurrentGL().glReadPixels(param1, param2, param3, param4, param5, param6, param7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glScissor(int param1, int param2, int param3, int param4) {
|
||||||
|
GLContext.getCurrentGL().glScissor(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glStencilFuncSeparate(int param1, int param2, int param3, int param4) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glStencilFuncSeparate(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glStencilOpSeparate(int param1, int param2, int param3, int param4) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glStencilOpSeparate(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glTexImage2D(int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, ByteBuffer param9) {
|
||||||
|
checkLimit(param9);
|
||||||
|
GLContext.getCurrentGL().glTexImage2D(param1, param2, param3, param4, param5, param6, param7, param8, param9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glTexImage3D(int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9, ByteBuffer param10) {
|
||||||
|
checkLimit(param10);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glTexImage3D(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glTexParameterf(int param1, int param2, float param3) {
|
||||||
|
GLContext.getCurrentGL().glTexParameterf(param1, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glTexParameteri(int param1, int param2, int param3) {
|
||||||
|
GLContext.getCurrentGL().glTexParameteri(param1, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glTexSubImage2D(int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, ByteBuffer param9) {
|
||||||
|
checkLimit(param9);
|
||||||
|
GLContext.getCurrentGL().glTexSubImage2D(param1, param2, param3, param4, param5, param6, param7, param8, param9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glTexSubImage3D(int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9, int param10, ByteBuffer param11) {
|
||||||
|
checkLimit(param11);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glTexSubImage3D(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform1(int param1, FloatBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform1fv(param1, getLimitCount(param2, 1), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform1(int param1, IntBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform1iv(param1, getLimitCount(param2, 1), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform1f(int param1, float param2) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform1f(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform1i(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform1i(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform2(int param1, IntBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform2iv(param1, getLimitCount(param2, 2), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform2(int param1, FloatBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform2fv(param1, getLimitCount(param2, 2), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform2f(int param1, float param2, float param3) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform2f(param1, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform3(int param1, IntBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform3iv(param1, getLimitCount(param2, 3), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform3(int param1, FloatBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform3fv(param1, getLimitCount(param2, 3), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform3f(int param1, float param2, float param3, float param4) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform3f(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform4(int param1, FloatBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform4fv(param1, getLimitCount(param2, 4), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform4(int param1, IntBuffer param2) {
|
||||||
|
checkLimit(param2);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform4iv(param1, getLimitCount(param2, 4), param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniform4f(int param1, float param2, float param3, float param4, float param5) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniform4f(param1, param2, param3, param4, param5);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniformMatrix3(int param1, boolean param2, FloatBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniformMatrix3fv(param1, getLimitCount(param3, 3 * 3), param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUniformMatrix4(int param1, boolean param2, FloatBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUniformMatrix4fv(param1, getLimitCount(param3, 4 * 4), param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glUseProgram(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glUseProgram(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glVertexAttribPointer(int param1, int param2, int param3, boolean param4, int param5, long param6) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glVertexAttribPointer(param1, param2, param3, param4, param5, param6);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glViewport(int param1, int param2, int param3, int param4) {
|
||||||
|
GLContext.getCurrentGL().glViewport(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int glGetAttribLocation(int param1, String param2) {
|
||||||
|
// FIXME: Does JOGL require null-terminated strings?????
|
||||||
|
return GLContext.getCurrentGL().getGL2ES2().glGetAttribLocation(param1, param2 + "\0");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int glGetUniformLocation(int param1, String param2) {
|
||||||
|
// FIXME: Does JOGL require null-terminated strings????????
|
||||||
|
return GLContext.getCurrentGL().getGL2ES2().glGetUniformLocation(param1, param2 + "\0");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glShaderSource(int param1, String[] param2, IntBuffer param3) {
|
||||||
|
checkLimit(param3);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glShaderSource(param1, param2.length, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String glGetProgramInfoLog(int program, int maxSize) {
|
||||||
|
ByteBuffer buffer = ByteBuffer.allocateDirect(maxSize);
|
||||||
|
buffer.order(ByteOrder.nativeOrder());
|
||||||
|
ByteBuffer tmp = ByteBuffer.allocateDirect(4);
|
||||||
|
tmp.order(ByteOrder.nativeOrder());
|
||||||
|
IntBuffer intBuffer = tmp.asIntBuffer();
|
||||||
|
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glGetProgramInfoLog(program, maxSize, intBuffer, buffer);
|
||||||
|
int numBytes = intBuffer.get(0);
|
||||||
|
byte[] bytes = new byte[numBytes];
|
||||||
|
buffer.get(bytes);
|
||||||
|
return new String(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String glGetShaderInfoLog(int shader, int maxSize) {
|
||||||
|
ByteBuffer buffer = ByteBuffer.allocateDirect(maxSize);
|
||||||
|
buffer.order(ByteOrder.nativeOrder());
|
||||||
|
ByteBuffer tmp = ByteBuffer.allocateDirect(4);
|
||||||
|
tmp.order(ByteOrder.nativeOrder());
|
||||||
|
IntBuffer intBuffer = tmp.asIntBuffer();
|
||||||
|
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glGetShaderInfoLog(shader, maxSize, intBuffer, buffer);
|
||||||
|
int numBytes = intBuffer.get(0);
|
||||||
|
byte[] bytes = new byte[numBytes];
|
||||||
|
buffer.get(bytes);
|
||||||
|
return new String(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBindFragDataLocation(int param1, int param2, String param3) {
|
||||||
|
GLContext.getCurrentGL().getGL2GL3().glBindFragDataLocation(param1, param2, param3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBindVertexArray(int param1) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glBindVertexArray(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGenVertexArrays(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glGenVertexArrays(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glPatchParameter(int count) {
|
||||||
|
GLContext.getCurrentGL().getGL3().glPatchParameteri(com.jogamp.opengl.GL3.GL_PATCH_VERTICES, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteVertexArrays(IntBuffer arrays) {
|
||||||
|
checkLimit(arrays);
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glDeleteVertexArrays(arrays.limit(), arrays);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
package com.jme3.renderer.jogl;
|
||||||
|
|
||||||
|
import com.jme3.renderer.RendererException;
|
||||||
|
import com.jme3.renderer.opengl.GLExt;
|
||||||
|
import com.jogamp.opengl.GLContext;
|
||||||
|
|
||||||
|
import java.nio.Buffer;
|
||||||
|
import java.nio.FloatBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
|
|
||||||
|
public class JoglGLExt implements GLExt {
|
||||||
|
|
||||||
|
private static int getLimitBytes(IntBuffer buffer) {
|
||||||
|
checkLimit(buffer);
|
||||||
|
return buffer.limit() * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkLimit(Buffer buffer) {
|
||||||
|
if (buffer == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (buffer.limit() == 0) {
|
||||||
|
throw new RendererException("Attempting to upload empty buffer (limit = 0), that's an error");
|
||||||
|
}
|
||||||
|
if (buffer.remaining() == 0) {
|
||||||
|
throw new RendererException("Attempting to upload empty buffer (remaining = 0), that's an error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferData(int target, IntBuffer data, int usage) {
|
||||||
|
checkLimit(data);
|
||||||
|
GLContext.getCurrentGL().glBufferData(target, getLimitBytes(data), data, usage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBufferSubData(int target, long offset, IntBuffer data) {
|
||||||
|
checkLimit(data);
|
||||||
|
GLContext.getCurrentGL().glBufferSubData(target, getLimitBytes(data), offset, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDrawArraysInstancedARB(int mode, int first, int count, int primcount) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glDrawArraysInstanced(mode, first, count, primcount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDrawBuffers(IntBuffer bufs) {
|
||||||
|
checkLimit(bufs);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glDrawBuffers(bufs.limit(), bufs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDrawElementsInstancedARB(int mode, int indices_count, int type, long indices_buffer_offset, int primcount) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glDrawElementsInstanced(mode, indices_count, type, indices_buffer_offset, primcount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGetMultisample(int pname, int index, FloatBuffer val) {
|
||||||
|
checkLimit(val);
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glGetMultisamplefv(pname, index, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glTexImage2DMultisample(int target, int samples, int internalformat, int width, int height, boolean fixedsamplelocations) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES2().glTexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glVertexAttribDivisorARB(int index, int divisor) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glVertexAttribDivisor(index, divisor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object glFenceSync(int condition, int flags) {
|
||||||
|
return GLContext.getCurrentGL().getGL3ES3().glFenceSync(condition, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int glClientWaitSync(Object sync, int flags, long timeout) {
|
||||||
|
return GLContext.getCurrentGL().getGL3ES3().glClientWaitSync(((Long) sync).longValue(), flags, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteSync(Object sync) {
|
||||||
|
GLContext.getCurrentGL().getGL3ES3().glDeleteSync(((Long) sync).longValue());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,97 @@
|
|||||||
|
package com.jme3.renderer.jogl;
|
||||||
|
|
||||||
|
import com.jme3.renderer.RendererException;
|
||||||
|
import com.jme3.renderer.opengl.GLFbo;
|
||||||
|
import com.jogamp.opengl.GLContext;
|
||||||
|
|
||||||
|
import java.nio.Buffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements GLFbo
|
||||||
|
*
|
||||||
|
* @author Kirill Vainer
|
||||||
|
*/
|
||||||
|
public class JoglGLFbo implements GLFbo {
|
||||||
|
|
||||||
|
private static void checkLimit(Buffer buffer) {
|
||||||
|
if (buffer == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (buffer.limit() == 0) {
|
||||||
|
throw new RendererException("Attempting to upload empty buffer (limit = 0), that's an error");
|
||||||
|
}
|
||||||
|
if (buffer.remaining() == 0) {
|
||||||
|
throw new RendererException("Attempting to upload empty buffer (remaining = 0), that's an error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBlitFramebufferEXT(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) {
|
||||||
|
GLContext.getCurrentGL().getGL2ES3().glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glRenderbufferStorageMultisampleEXT(int target, int samples, int internalformat, int width, int height) {
|
||||||
|
GLContext.getCurrentGL().glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBindFramebufferEXT(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().glBindFramebuffer(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBindRenderbufferEXT(int param1, int param2) {
|
||||||
|
GLContext.getCurrentGL().glBindRenderbuffer(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int glCheckFramebufferStatusEXT(int param1) {
|
||||||
|
return GLContext.getCurrentGL().glCheckFramebufferStatus(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteFramebuffersEXT(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glDeleteFramebuffers(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glDeleteRenderbuffersEXT(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glDeleteRenderbuffers(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glFramebufferRenderbufferEXT(int param1, int param2, int param3, int param4) {
|
||||||
|
GLContext.getCurrentGL().glFramebufferRenderbuffer(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glFramebufferTexture2DEXT(int param1, int param2, int param3, int param4, int param5) {
|
||||||
|
GLContext.getCurrentGL().glFramebufferTexture2D(param1, param2, param3, param4, param5);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGenFramebuffersEXT(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glGenFramebuffers(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGenRenderbuffersEXT(IntBuffer param1) {
|
||||||
|
checkLimit(param1);
|
||||||
|
GLContext.getCurrentGL().glGenRenderbuffers(param1.limit(), param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glGenerateMipmapEXT(int param1) {
|
||||||
|
GLContext.getCurrentGL().glGenerateMipmap(param1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glRenderbufferStorageEXT(int param1, int param2, int param3, int param4) {
|
||||||
|
GLContext.getCurrentGL().glRenderbufferStorage(param1, param2, param3, param4);
|
||||||
|
}
|
||||||
|
}
|
@ -37,22 +37,15 @@ import com.jme3.input.MouseInput;
|
|||||||
import com.jme3.input.TouchInput;
|
import com.jme3.input.TouchInput;
|
||||||
import com.jme3.input.awt.AwtKeyInput;
|
import com.jme3.input.awt.AwtKeyInput;
|
||||||
import com.jme3.input.awt.AwtMouseInput;
|
import com.jme3.input.awt.AwtMouseInput;
|
||||||
import com.jme3.renderer.jogl.JoglRenderer;
|
|
||||||
import com.jogamp.opengl.util.Animator;
|
import com.jogamp.opengl.util.Animator;
|
||||||
import com.jogamp.opengl.util.AnimatorBase;
|
import com.jogamp.opengl.util.AnimatorBase;
|
||||||
import com.jogamp.opengl.util.FPSAnimator;
|
import com.jogamp.opengl.util.FPSAnimator;
|
||||||
|
|
||||||
import java.awt.GraphicsDevice;
|
import java.awt.GraphicsDevice;
|
||||||
import java.awt.GraphicsEnvironment;
|
import java.awt.GraphicsEnvironment;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import com.jogamp.opengl.DebugGL2;
|
|
||||||
import com.jogamp.opengl.DebugGL3;
|
|
||||||
import com.jogamp.opengl.DebugGL3bc;
|
|
||||||
import com.jogamp.opengl.DebugGL4;
|
|
||||||
import com.jogamp.opengl.DebugGL4bc;
|
|
||||||
import com.jogamp.opengl.DebugGLES1;
|
|
||||||
import com.jogamp.opengl.DebugGLES2;
|
|
||||||
import com.jogamp.opengl.GL;
|
|
||||||
import com.jogamp.opengl.GLAutoDrawable;
|
import com.jogamp.opengl.GLAutoDrawable;
|
||||||
import com.jogamp.opengl.GLCapabilities;
|
import com.jogamp.opengl.GLCapabilities;
|
||||||
import com.jogamp.opengl.GLEventListener;
|
import com.jogamp.opengl.GLEventListener;
|
||||||
@ -125,49 +118,8 @@ public abstract class JoglAbstractDisplay extends JoglContext implements GLEvent
|
|||||||
canvas.setIgnoreRepaint(true);
|
canvas.setIgnoreRepaint(true);
|
||||||
canvas.addGLEventListener(this);
|
canvas.addGLEventListener(this);
|
||||||
|
|
||||||
if (settings.getBoolean("GraphicsDebug")) {
|
//FIXME not sure it is the best place to do that
|
||||||
canvas.invoke(false, new GLRunnable() {
|
renderable.set(true);
|
||||||
public boolean run(GLAutoDrawable glad) {
|
|
||||||
GL gl = glad.getGL();
|
|
||||||
if (gl.isGLES()) {
|
|
||||||
if (gl.isGLES1()) {
|
|
||||||
glad.setGL(new DebugGLES1(gl.getGLES1()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGLES2()) {
|
|
||||||
glad.setGL(new DebugGLES2(gl.getGLES2()));
|
|
||||||
} else {
|
|
||||||
// TODO ES3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (gl.isGL4bc()) {
|
|
||||||
glad.setGL(new DebugGL4bc(gl.getGL4bc()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL4()) {
|
|
||||||
glad.setGL(new DebugGL4(gl.getGL4()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL3bc()) {
|
|
||||||
glad.setGL(new DebugGL3bc(gl.getGL3bc()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL3()) {
|
|
||||||
glad.setGL(new DebugGL3(gl.getGL3()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL2()) {
|
|
||||||
glad.setGL(new DebugGL2(gl.getGL2()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
renderer = new JoglRenderer();
|
|
||||||
|
|
||||||
renderer.setMainFrameBufferSrgb(settings.getGammaCorrection());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startGLCanvas() {
|
protected void startGLCanvas() {
|
||||||
@ -182,9 +134,6 @@ public abstract class JoglAbstractDisplay extends JoglContext implements GLEvent
|
|||||||
|
|
||||||
animator.start();
|
animator.start();
|
||||||
wasAnimating = true;
|
wasAnimating = true;
|
||||||
|
|
||||||
//FIXME not sure it is the best place to do that
|
|
||||||
renderable.set(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onCanvasAdded() {
|
protected void onCanvasAdded() {
|
||||||
|
@ -41,27 +41,33 @@ public class JoglCanvas extends JoglAbstractDisplay implements JmeCanvasContext
|
|||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(JoglCanvas.class.getName());
|
private static final Logger logger = Logger.getLogger(JoglCanvas.class.getName());
|
||||||
private int width, height;
|
private int width, height;
|
||||||
|
private boolean runningFirstTime = true;
|
||||||
|
|
||||||
public JoglCanvas(){
|
public JoglCanvas(){
|
||||||
super();
|
super();
|
||||||
initGLCanvas();
|
initGLCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
return Type.Canvas;
|
return Type.Canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setTitle(String title) {
|
public void setTitle(String title) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void restart() {
|
public void restart() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void create(boolean waitFor){
|
public void create(boolean waitFor){
|
||||||
if (waitFor)
|
if (waitFor)
|
||||||
waitFor(true);
|
waitFor(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void destroy(boolean waitFor){
|
public void destroy(boolean waitFor){
|
||||||
if (waitFor)
|
if (waitFor)
|
||||||
waitFor(false);
|
waitFor(false);
|
||||||
@ -81,13 +87,20 @@ public class JoglCanvas extends JoglAbstractDisplay implements JmeCanvasContext
|
|||||||
startGLCanvas();
|
startGLCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void init(GLAutoDrawable drawable) {
|
public void init(GLAutoDrawable drawable) {
|
||||||
canvas.requestFocus();
|
canvas.requestFocus();
|
||||||
|
|
||||||
super.internalCreate();
|
super.internalCreate();
|
||||||
logger.fine("Display created.");
|
logger.fine("Display created.");
|
||||||
|
|
||||||
renderer.initialize();
|
// At this point, the OpenGL context is active.
|
||||||
|
if (runningFirstTime){
|
||||||
|
// THIS is the part that creates the renderer.
|
||||||
|
// It must always be called, now that we have the pbuffer workaround.
|
||||||
|
initContextFirstTime();
|
||||||
|
runningFirstTime = false;
|
||||||
|
}
|
||||||
listener.initialize();
|
listener.initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,6 +110,7 @@ public class JoglCanvas extends JoglAbstractDisplay implements JmeCanvasContext
|
|||||||
super.startGLCanvas();
|
super.startGLCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void display(GLAutoDrawable glad) {
|
public void display(GLAutoDrawable glad) {
|
||||||
if (!created.get() && renderer != null){
|
if (!created.get() && renderer != null){
|
||||||
listener.destroy();
|
listener.destroy();
|
||||||
@ -129,6 +143,7 @@ public class JoglCanvas extends JoglAbstractDisplay implements JmeCanvasContext
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Canvas getCanvas() {
|
public Canvas getCanvas() {
|
||||||
return canvas;
|
return canvas;
|
||||||
}
|
}
|
||||||
|
@ -36,17 +36,33 @@ import com.jme3.input.JoyInput;
|
|||||||
import com.jme3.input.KeyInput;
|
import com.jme3.input.KeyInput;
|
||||||
import com.jme3.input.MouseInput;
|
import com.jme3.input.MouseInput;
|
||||||
import com.jme3.renderer.Renderer;
|
import com.jme3.renderer.Renderer;
|
||||||
|
import com.jme3.renderer.RendererException;
|
||||||
|
import com.jme3.renderer.jogl.JoglGL;
|
||||||
|
import com.jme3.renderer.jogl.JoglGLExt;
|
||||||
|
import com.jme3.renderer.jogl.JoglGLFbo;
|
||||||
import com.jme3.renderer.jogl.JoglRenderer;
|
import com.jme3.renderer.jogl.JoglRenderer;
|
||||||
|
import com.jme3.renderer.opengl.GL2;
|
||||||
|
import com.jme3.renderer.opengl.GL3;
|
||||||
|
import com.jme3.renderer.opengl.GL4;
|
||||||
|
import com.jme3.renderer.opengl.GLDebugDesktop;
|
||||||
|
import com.jme3.renderer.opengl.GLExt;
|
||||||
|
import com.jme3.renderer.opengl.GLFbo;
|
||||||
|
import com.jme3.renderer.opengl.GLRenderer;
|
||||||
|
import com.jme3.renderer.opengl.GLTiming;
|
||||||
|
import com.jme3.renderer.opengl.GLTimingState;
|
||||||
|
import com.jme3.renderer.opengl.GLTracer;
|
||||||
import com.jme3.system.AppSettings;
|
import com.jme3.system.AppSettings;
|
||||||
import com.jme3.system.JmeContext;
|
import com.jme3.system.JmeContext;
|
||||||
import com.jme3.system.NanoTimer;
|
import com.jme3.system.NanoTimer;
|
||||||
import com.jme3.system.NativeLibraryLoader;
|
import com.jme3.system.NativeLibraryLoader;
|
||||||
import com.jme3.system.SystemListener;
|
import com.jme3.system.SystemListener;
|
||||||
import com.jme3.system.Timer;
|
import com.jme3.system.Timer;
|
||||||
|
|
||||||
import java.nio.IntBuffer;
|
import java.nio.IntBuffer;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import com.jogamp.opengl.GL;
|
import com.jogamp.opengl.GL;
|
||||||
import com.jogamp.opengl.GL2GL3;
|
import com.jogamp.opengl.GL2GL3;
|
||||||
import com.jogamp.opengl.GLContext;
|
import com.jogamp.opengl.GLContext;
|
||||||
@ -62,7 +78,7 @@ public abstract class JoglContext implements JmeContext {
|
|||||||
protected final Object createdLock = new Object();
|
protected final Object createdLock = new Object();
|
||||||
|
|
||||||
protected AppSettings settings = new AppSettings(true);
|
protected AppSettings settings = new AppSettings(true);
|
||||||
protected JoglRenderer renderer;
|
protected Renderer renderer;
|
||||||
protected Timer timer;
|
protected Timer timer;
|
||||||
protected SystemListener listener;
|
protected SystemListener listener;
|
||||||
|
|
||||||
@ -77,42 +93,52 @@ public abstract class JoglContext implements JmeContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setSystemListener(SystemListener listener){
|
public void setSystemListener(SystemListener listener){
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setSettings(AppSettings settings) {
|
public void setSettings(AppSettings settings) {
|
||||||
this.settings.copyFrom(settings);
|
this.settings.copyFrom(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isRenderable(){
|
public boolean isRenderable(){
|
||||||
return renderable.get();
|
return renderable.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public AppSettings getSettings() {
|
public AppSettings getSettings() {
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Renderer getRenderer() {
|
public Renderer getRenderer() {
|
||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public MouseInput getMouseInput() {
|
public MouseInput getMouseInput() {
|
||||||
return mouseInput;
|
return mouseInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public KeyInput getKeyInput() {
|
public KeyInput getKeyInput() {
|
||||||
return keyInput;
|
return keyInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public JoyInput getJoyInput() {
|
public JoyInput getJoyInput() {
|
||||||
return joyInput;
|
return joyInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Timer getTimer() {
|
public Timer getTimer() {
|
||||||
return timer;
|
return timer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isCreated() {
|
public boolean isCreated() {
|
||||||
return created.get();
|
return created.get();
|
||||||
}
|
}
|
||||||
@ -136,12 +162,77 @@ public abstract class JoglContext implements JmeContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void initContextFirstTime(){
|
||||||
|
if (GLContext.getCurrent().getGLVersionNumber().getMajor() < 2) {
|
||||||
|
throw new RendererException("OpenGL 2.0 or higher is " +
|
||||||
|
"required for jMonkeyEngine");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings.getRenderer().equals("JOGL")) {
|
||||||
|
com.jme3.renderer.opengl.GL gl = new JoglGL();
|
||||||
|
GLExt glext = new JoglGLExt();
|
||||||
|
GLFbo glfbo = new JoglGLFbo();
|
||||||
|
|
||||||
|
if (settings.getBoolean("GraphicsDebug")) {
|
||||||
|
gl = new GLDebugDesktop(gl, glext, glfbo);
|
||||||
|
glext = (GLExt) gl;
|
||||||
|
glfbo = (GLFbo) gl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings.getBoolean("GraphicsTiming")) {
|
||||||
|
GLTimingState timingState = new GLTimingState();
|
||||||
|
gl = (com.jme3.renderer.opengl.GL) GLTiming.createGLTiming(gl, timingState, GL.class, GL2.class, GL3.class, GL4.class);
|
||||||
|
glext = (GLExt) GLTiming.createGLTiming(glext, timingState, GLExt.class);
|
||||||
|
glfbo = (GLFbo) GLTiming.createGLTiming(glfbo, timingState, GLFbo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings.getBoolean("GraphicsTrace")) {
|
||||||
|
gl = (com.jme3.renderer.opengl.GL) GLTracer.createDesktopGlTracer(gl, GL.class, GL2.class, GL3.class, GL4.class);
|
||||||
|
glext = (GLExt) GLTracer.createDesktopGlTracer(glext, GLExt.class);
|
||||||
|
glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
//FIXME uncomment the line below when the unified renderer is ready for the prime time :)
|
||||||
|
//renderer = new GLRenderer(gl, glext, glfbo);
|
||||||
|
renderer = new JoglRenderer();
|
||||||
|
renderer.initialize();
|
||||||
|
} else {
|
||||||
|
throw new UnsupportedOperationException("Unsupported renderer: " + settings.getRenderer());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GLContext.getCurrentGL().isExtensionAvailable("GL_ARB_debug_output") && settings.getBoolean("GraphicsDebug")) {
|
||||||
|
GLContext.getCurrent().enableGLDebugMessage(true);
|
||||||
|
GLContext.getCurrent().addGLDebugListener(new JoglGLDebugOutputHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer.setMainFrameBufferSrgb(settings.getGammaCorrection());
|
||||||
|
renderer.setLinearizeSrgbImages(settings.getGammaCorrection());
|
||||||
|
|
||||||
|
// Init input
|
||||||
|
if (keyInput != null) {
|
||||||
|
keyInput.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mouseInput != null) {
|
||||||
|
mouseInput.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (joyInput != null) {
|
||||||
|
joyInput.initialize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void internalCreate() {
|
public void internalCreate() {
|
||||||
timer = new NanoTimer();
|
timer = new NanoTimer();
|
||||||
synchronized (createdLock){
|
synchronized (createdLock){
|
||||||
created.set(true);
|
created.set(true);
|
||||||
createdLock.notifyAll();
|
createdLock.notifyAll();
|
||||||
}
|
}
|
||||||
|
if (renderable.get()){
|
||||||
|
initContextFirstTime();
|
||||||
|
} else {
|
||||||
|
assert getType() == Type.Canvas;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void internalDestroy() {
|
protected void internalDestroy() {
|
||||||
|
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2015 jMonkeyEngine
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package com.jme3.system.jogl;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import com.jogamp.opengl.GL2ES2;
|
||||||
|
import com.jogamp.opengl.GLDebugListener;
|
||||||
|
import com.jogamp.opengl.GLDebugMessage;
|
||||||
|
|
||||||
|
class JoglGLDebugOutputHandler implements GLDebugListener {
|
||||||
|
|
||||||
|
private static final HashMap<Integer, String> constMap = new HashMap<Integer, String>();
|
||||||
|
private static final String MESSAGE_FORMAT =
|
||||||
|
"[JME3] OpenGL debug message\r\n" +
|
||||||
|
" ID: %d\r\n" +
|
||||||
|
" Source: %s\r\n" +
|
||||||
|
" Type: %s\r\n" +
|
||||||
|
" Severity: %s\r\n" +
|
||||||
|
" Message: %s";
|
||||||
|
|
||||||
|
static {
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SOURCE_API, "API");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SOURCE_APPLICATION, "APPLICATION");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SOURCE_OTHER, "OTHER");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SOURCE_SHADER_COMPILER, "SHADER_COMPILER");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SOURCE_THIRD_PARTY, "THIRD_PARTY");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SOURCE_WINDOW_SYSTEM, "WINDOW_SYSTEM");
|
||||||
|
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR, "DEPRECATED_BEHAVIOR");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_TYPE_ERROR, "ERROR");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_TYPE_OTHER, "OTHER");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_TYPE_PERFORMANCE, "PERFORMANCE");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_TYPE_PORTABILITY, "PORTABILITY");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR, "UNDEFINED_BEHAVIOR");
|
||||||
|
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SEVERITY_HIGH, "HIGH");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SEVERITY_MEDIUM, "MEDIUM");
|
||||||
|
constMap.put(GL2ES2.GL_DEBUG_SEVERITY_LOW, "LOW");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void messageSent(GLDebugMessage event) {
|
||||||
|
String sourceStr = constMap.get(event.getDbgSource());
|
||||||
|
String typeStr = constMap.get(event.getDbgType());
|
||||||
|
String severityStr = constMap.get(event.getDbgSeverity());
|
||||||
|
|
||||||
|
System.err.println(String.format(MESSAGE_FORMAT, event.getDbgId(), sourceStr, typeStr, severityStr, event.getDbgMsg()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -37,21 +37,14 @@ import com.jme3.input.MouseInput;
|
|||||||
import com.jme3.input.TouchInput;
|
import com.jme3.input.TouchInput;
|
||||||
import com.jme3.input.jogl.NewtKeyInput;
|
import com.jme3.input.jogl.NewtKeyInput;
|
||||||
import com.jme3.input.jogl.NewtMouseInput;
|
import com.jme3.input.jogl.NewtMouseInput;
|
||||||
import com.jme3.renderer.jogl.JoglRenderer;
|
|
||||||
import com.jogamp.newt.opengl.GLWindow;
|
import com.jogamp.newt.opengl.GLWindow;
|
||||||
import com.jogamp.opengl.util.Animator;
|
import com.jogamp.opengl.util.Animator;
|
||||||
import com.jogamp.opengl.util.AnimatorBase;
|
import com.jogamp.opengl.util.AnimatorBase;
|
||||||
import com.jogamp.opengl.util.FPSAnimator;
|
import com.jogamp.opengl.util.FPSAnimator;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import com.jogamp.opengl.DebugGL2;
|
|
||||||
import com.jogamp.opengl.DebugGL3;
|
|
||||||
import com.jogamp.opengl.DebugGL3bc;
|
|
||||||
import com.jogamp.opengl.DebugGL4;
|
|
||||||
import com.jogamp.opengl.DebugGL4bc;
|
|
||||||
import com.jogamp.opengl.DebugGLES1;
|
|
||||||
import com.jogamp.opengl.DebugGLES2;
|
|
||||||
import com.jogamp.opengl.GL;
|
|
||||||
import com.jogamp.opengl.GLAutoDrawable;
|
import com.jogamp.opengl.GLAutoDrawable;
|
||||||
import com.jogamp.opengl.GLCapabilities;
|
import com.jogamp.opengl.GLCapabilities;
|
||||||
import com.jogamp.opengl.GLEventListener;
|
import com.jogamp.opengl.GLEventListener;
|
||||||
@ -104,49 +97,8 @@ public abstract class JoglNewtAbstractDisplay extends JoglContext implements GLE
|
|||||||
canvas.setSize(settings.getWidth(), settings.getHeight());
|
canvas.setSize(settings.getWidth(), settings.getHeight());
|
||||||
canvas.addGLEventListener(this);
|
canvas.addGLEventListener(this);
|
||||||
|
|
||||||
if (settings.getBoolean("GraphicsDebug")) {
|
//FIXME not sure it is the best place to do that
|
||||||
canvas.invoke(false, new GLRunnable() {
|
renderable.set(true);
|
||||||
public boolean run(GLAutoDrawable glad) {
|
|
||||||
GL gl = glad.getGL();
|
|
||||||
if (gl.isGLES()) {
|
|
||||||
if (gl.isGLES1()) {
|
|
||||||
glad.setGL(new DebugGLES1(gl.getGLES1()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGLES2()) {
|
|
||||||
glad.setGL(new DebugGLES2(gl.getGLES2()));
|
|
||||||
} else {
|
|
||||||
// TODO ES3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (gl.isGL4bc()) {
|
|
||||||
glad.setGL(new DebugGL4bc(gl.getGL4bc()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL4()) {
|
|
||||||
glad.setGL(new DebugGL4(gl.getGL4()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL3bc()) {
|
|
||||||
glad.setGL(new DebugGL3bc(gl.getGL3bc()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL3()) {
|
|
||||||
glad.setGL(new DebugGL3(gl.getGL3()));
|
|
||||||
} else {
|
|
||||||
if (gl.isGL2()) {
|
|
||||||
glad.setGL(new DebugGL2(gl.getGL2()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
renderer = new JoglRenderer();
|
|
||||||
|
|
||||||
renderer.setMainFrameBufferSrgb(settings.getGammaCorrection());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startGLCanvas() {
|
protected void startGLCanvas() {
|
||||||
@ -161,9 +113,6 @@ public abstract class JoglNewtAbstractDisplay extends JoglContext implements GLE
|
|||||||
|
|
||||||
animator.start();
|
animator.start();
|
||||||
wasAnimating = true;
|
wasAnimating = true;
|
||||||
|
|
||||||
//FIXME not sure it is the best place to do that
|
|
||||||
renderable.set(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onCanvasAdded() {
|
protected void onCanvasAdded() {
|
||||||
|
@ -41,6 +41,7 @@ public class JoglNewtCanvas extends JoglNewtAbstractDisplay implements JmeCanvas
|
|||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(JoglNewtCanvas.class.getName());
|
private static final Logger logger = Logger.getLogger(JoglNewtCanvas.class.getName());
|
||||||
private int width, height;
|
private int width, height;
|
||||||
|
private boolean runningFirstTime = true;
|
||||||
|
|
||||||
private NewtCanvasAWT newtAwtCanvas;
|
private NewtCanvasAWT newtAwtCanvas;
|
||||||
|
|
||||||
@ -53,6 +54,8 @@ public class JoglNewtCanvas extends JoglNewtAbstractDisplay implements JmeCanvas
|
|||||||
protected final void initGLCanvas() {
|
protected final void initGLCanvas() {
|
||||||
super.initGLCanvas();
|
super.initGLCanvas();
|
||||||
newtAwtCanvas = new NewtCanvasAWT(canvas) {
|
newtAwtCanvas = new NewtCanvasAWT(canvas) {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addNotify() {
|
public void addNotify() {
|
||||||
super.addNotify();
|
super.addNotify();
|
||||||
@ -67,21 +70,26 @@ public class JoglNewtCanvas extends JoglNewtAbstractDisplay implements JmeCanvas
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
return Type.Canvas;
|
return Type.Canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setTitle(String title) {
|
public void setTitle(String title) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void restart() {
|
public void restart() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void create(boolean waitFor){
|
public void create(boolean waitFor){
|
||||||
if (waitFor)
|
if (waitFor)
|
||||||
waitFor(true);
|
waitFor(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void destroy(boolean waitFor){
|
public void destroy(boolean waitFor){
|
||||||
if (waitFor)
|
if (waitFor)
|
||||||
waitFor(false);
|
waitFor(false);
|
||||||
@ -101,13 +109,20 @@ public class JoglNewtCanvas extends JoglNewtAbstractDisplay implements JmeCanvas
|
|||||||
startGLCanvas();
|
startGLCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void init(GLAutoDrawable drawable) {
|
public void init(GLAutoDrawable drawable) {
|
||||||
canvas.requestFocus();
|
canvas.requestFocus();
|
||||||
|
|
||||||
super.internalCreate();
|
super.internalCreate();
|
||||||
logger.fine("Display created.");
|
logger.fine("Display created.");
|
||||||
|
|
||||||
renderer.initialize();
|
// At this point, the OpenGL context is active.
|
||||||
|
if (runningFirstTime){
|
||||||
|
// THIS is the part that creates the renderer.
|
||||||
|
// It must always be called, now that we have the pbuffer workaround.
|
||||||
|
initContextFirstTime();
|
||||||
|
runningFirstTime = false;
|
||||||
|
}
|
||||||
listener.initialize();
|
listener.initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,6 +132,7 @@ public class JoglNewtCanvas extends JoglNewtAbstractDisplay implements JmeCanvas
|
|||||||
super.startGLCanvas();
|
super.startGLCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void display(GLAutoDrawable glad) {
|
public void display(GLAutoDrawable glad) {
|
||||||
if (!created.get() && renderer != null){
|
if (!created.get() && renderer != null){
|
||||||
listener.destroy();
|
listener.destroy();
|
||||||
|
@ -13,7 +13,7 @@ import java.nio.ShortBuffer;
|
|||||||
import com.jme3.renderer.opengl.GL4;
|
import com.jme3.renderer.opengl.GL4;
|
||||||
import org.lwjgl.opengl.*;
|
import org.lwjgl.opengl.*;
|
||||||
|
|
||||||
public class LwjglGL implements GL, GL2, GL3, GL4 {
|
public final class LwjglGL implements GL, GL2, GL3, GL4 {
|
||||||
|
|
||||||
private static void checkLimit(Buffer buffer) {
|
private static void checkLimit(Buffer buffer) {
|
||||||
if (buffer == null) {
|
if (buffer == null) {
|
||||||
|
@ -13,7 +13,7 @@ import org.lwjgl.opengl.GL15;
|
|||||||
import org.lwjgl.opengl.GL20;
|
import org.lwjgl.opengl.GL20;
|
||||||
import org.lwjgl.opengl.GLSync;
|
import org.lwjgl.opengl.GLSync;
|
||||||
|
|
||||||
public class LwjglGLExt implements GLExt {
|
public final class LwjglGLExt implements GLExt {
|
||||||
|
|
||||||
private static void checkLimit(Buffer buffer) {
|
private static void checkLimit(Buffer buffer) {
|
||||||
if (buffer == null) {
|
if (buffer == null) {
|
||||||
|
@ -13,7 +13,7 @@ import org.lwjgl.opengl.EXTFramebufferObject;
|
|||||||
*
|
*
|
||||||
* @author Kirill Vainer
|
* @author Kirill Vainer
|
||||||
*/
|
*/
|
||||||
public class LwjglGLFboEXT implements GLFbo {
|
public final class LwjglGLFboEXT implements GLFbo {
|
||||||
|
|
||||||
private static void checkLimit(Buffer buffer) {
|
private static void checkLimit(Buffer buffer) {
|
||||||
if (buffer == null) {
|
if (buffer == null) {
|
||||||
|
@ -11,7 +11,7 @@ import org.lwjgl.opengl.GL30;
|
|||||||
*
|
*
|
||||||
* @author Kirill Vainer
|
* @author Kirill Vainer
|
||||||
*/
|
*/
|
||||||
public class LwjglGLFboGL3 implements GLFbo {
|
public final class LwjglGLFboGL3 implements GLFbo {
|
||||||
|
|
||||||
private static void checkLimit(Buffer buffer) {
|
private static void checkLimit(Buffer buffer) {
|
||||||
if (buffer == null) {
|
if (buffer == null) {
|
||||||
|
1
private/known_hosts
Normal file
1
private/known_hosts
Normal file
@ -0,0 +1 @@
|
|||||||
|
updates.jmonkeyengine.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5bNOiZwU5dF62nBllxkjiSIfn0k6RVfprvO1aUypRmARD3/MKJKg7cGLezlLKaHZtVs84VpEqpmg5IzPAXWEmxUw1oke70uYMli7JV+4oPAeQRFwUdldP98I5h9VHwSjBqMycRLkxYaHF8edIPt1Zsa2dM3qrufy71ndQoFF6g7QxmT7gsTxwcNufDxymIgiAna/Qp2fr0YCLCiB8RQ7JTHfqA3dOWw0wz7AwfBTwwDCHkVxB5B4nz5iZxFr0scvqcae8vMncq8xKS7OMrLbn6asVaF6dDu+5Jc0mqxma5Qg7VC1xQXZsvlRISfrTFhQMhEx+j9w5snzihrlFnZ35
|
BIN
private/www-updater.key.enc
Normal file
BIN
private/www-updater.key.enc
Normal file
Binary file not shown.
@ -50,8 +50,8 @@ javac.compilerargs=
|
|||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
javac.processorpath=\
|
javac.processorpath=\
|
||||||
${javac.classpath}
|
${javac.classpath}
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.target=1.5
|
javac.target=1.6
|
||||||
javac.test.classpath=\
|
javac.test.classpath=\
|
||||||
${javac.classpath}:\
|
${javac.classpath}:\
|
||||||
${build.classes.dir}
|
${build.classes.dir}
|
||||||
|
@ -51,8 +51,7 @@
|
|||||||
-init-macrodef-junit: defines macro for junit execution
|
-init-macrodef-junit: defines macro for junit execution
|
||||||
-init-macrodef-debug: defines macro for class debugging
|
-init-macrodef-debug: defines macro for class debugging
|
||||||
-init-macrodef-java: defines macro for class execution
|
-init-macrodef-java: defines macro for class execution
|
||||||
-do-jar-with-manifest: JAR building (if you are using a manifest)
|
-do-jar: JAR building
|
||||||
-do-jar-without-manifest: JAR building (if you are not using a manifest)
|
|
||||||
run: execution of project
|
run: execution of project
|
||||||
-javadoc-build: Javadoc generation
|
-javadoc-build: Javadoc generation
|
||||||
test-report: JUnit report generation
|
test-report: JUnit report generation
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
build.xml.data.CRC32=0f706f4a
|
build.xml.data.CRC32=0f706f4a
|
||||||
build.xml.script.CRC32=0b0b23c4
|
build.xml.script.CRC32=82b8b23d
|
||||||
build.xml.stylesheet.CRC32=28e38971@1.38.1.45
|
build.xml.stylesheet.CRC32=8064a381@1.75.2.48
|
||||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||||
nbproject/build-impl.xml.data.CRC32=0f706f4a
|
nbproject/build-impl.xml.data.CRC32=0f706f4a
|
||||||
|
@ -25,20 +25,26 @@ excludes=
|
|||||||
includes=**
|
includes=**
|
||||||
jar.compress=false
|
jar.compress=false
|
||||||
javac.classpath=\
|
javac.classpath=\
|
||||||
${libs.jme3.classpath}:\
|
${libs.jme3-jogg.classpath}:\
|
||||||
${libs.jme3-libraries.classpath}:\
|
${libs.jme3-blender.classpath}:\
|
||||||
${libs.jme3-libraries-blender.classpath}:\
|
${libs.jme3-networking.classpath}:\
|
||||||
|
${libs.jme3-plugins.classpath}:\
|
||||||
|
${libs.jme3-core.classpath}:\
|
||||||
|
${libs.jme3-desktop.classpath}:\
|
||||||
|
${libs.jme3-lwjgl.classpath}:\
|
||||||
|
${libs.jme3-niftygui.classpath}:\
|
||||||
|
${libs.jme3-effects.classpath}:\
|
||||||
|
${libs.jme3-terrain.classpath}:\
|
||||||
|
${libs.jme3-jbullet.classpath}:\
|
||||||
${libs.jme3-test-data.classpath}
|
${libs.jme3-test-data.classpath}
|
||||||
# Space-separated list of extra javac options
|
# Space-separated list of extra javac options
|
||||||
javac.compilerargs=
|
javac.compilerargs=
|
||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.target=1.5
|
javac.target=1.6
|
||||||
javac.test.classpath=\
|
javac.test.classpath=\
|
||||||
${javac.classpath}:\
|
${javac.classpath}:\
|
||||||
${build.classes.dir}:\
|
${build.classes.dir}
|
||||||
${libs.junit.classpath}:\
|
|
||||||
${libs.junit_4.classpath}
|
|
||||||
javadoc.additionalparam=
|
javadoc.additionalparam=
|
||||||
javadoc.author=false
|
javadoc.author=false
|
||||||
javadoc.encoding=${source.encoding}
|
javadoc.encoding=${source.encoding}
|
||||||
|
@ -47,8 +47,8 @@ javac.compilerargs=
|
|||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
javac.processorpath=\
|
javac.processorpath=\
|
||||||
${javac.classpath}
|
${javac.classpath}
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.target=1.5
|
javac.target=1.6
|
||||||
javac.test.classpath=\
|
javac.test.classpath=\
|
||||||
${javac.classpath}:\
|
${javac.classpath}:\
|
||||||
${build.classes.dir}
|
${build.classes.dir}
|
||||||
|
@ -36,8 +36,8 @@ javac.compilerargs=
|
|||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
javac.processorpath=\
|
javac.processorpath=\
|
||||||
${javac.classpath}
|
${javac.classpath}
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.target=1.5
|
javac.target=1.6
|
||||||
javac.test.classpath=\
|
javac.test.classpath=\
|
||||||
${javac.classpath}:\
|
${javac.classpath}:\
|
||||||
${build.classes.dir}
|
${build.classes.dir}
|
||||||
|
@ -165,7 +165,7 @@ task createBaseXml(dependsOn: configurations.corelibs) <<{
|
|||||||
"compile-dependency"{}
|
"compile-dependency"{}
|
||||||
"run-dependency"{
|
"run-dependency"{
|
||||||
"release-version" "1"
|
"release-version" "1"
|
||||||
"specification-version" "3.0.0"
|
"specification-version" jmeVersion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -388,12 +388,14 @@ copyTestSources.outputs.dir "JME3TestsTemplate/src/"
|
|||||||
copyTestSources.outputs.dir "JME3TestsTemplateAndroid/src/"
|
copyTestSources.outputs.dir "JME3TestsTemplateAndroid/src/"
|
||||||
|
|
||||||
ant.properties['plugins.version'] = jmeVersion
|
ant.properties['plugins.version'] = jmeVersion
|
||||||
ant.properties['app.version']= jmeMainVersion + "-" + jmeVersionTag
|
ant.properties['app.version']= jmeFullVersion
|
||||||
|
ant.properties['nbm.revision']= jmeNbmRevision
|
||||||
|
|
||||||
task buildSdk(dependsOn: [copyBaseLibs, copyProjectLibs, createProjectXml, createBaseXml, copyTestSources]) <<{
|
task buildSdk(dependsOn: [copyBaseLibs, copyProjectLibs, createProjectXml, createBaseXml, copyTestSources]) <<{
|
||||||
ant.propertyfile(file: "nbproject/project.properties") {
|
ant.propertyfile(file: "nbproject/project.properties") {
|
||||||
entry( key: "plugins.version", value: "${jmeVersion}")
|
entry( key: "plugins.version", value: "${jmeVersion}")
|
||||||
entry( key: "app.version", value: "${jmeMainVersion + "-" + jmeVersionTag}")
|
entry( key: "app.version", value: "${jmeFullVersion}")
|
||||||
|
entry( key: "nbm.revision", value: "${jmeNbmRevision}")
|
||||||
}
|
}
|
||||||
ant.ant(dir: ".", antfile: "build.xml", target: "build")
|
ant.ant(dir: ".", antfile: "build.xml", target: "build")
|
||||||
}
|
}
|
||||||
@ -416,7 +418,7 @@ task cleanSdk() <<{
|
|||||||
file("JME3TestsTemplateAndroid/src/jmetest/").deleteDir()
|
file("JME3TestsTemplateAndroid/src/jmetest/").deleteDir()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.remove(uploadArchives)
|
||||||
|
|
||||||
jar.dependsOn(buildSdk)
|
jar.dependsOn(buildSdk)
|
||||||
clean.dependsOn(cleanSdk);
|
clean.dependsOn(cleanSdk)
|
||||||
|
|
||||||
|
|
||||||
|
163
sdk/build.xml
163
sdk/build.xml
@ -12,7 +12,6 @@
|
|||||||
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="ant-import.classpath"/>
|
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="ant-import.classpath"/>
|
||||||
<taskdef resource="com/jme/ant/ant-jme.properties" classpathref="ant-import.classpath"/>
|
<taskdef resource="com/jme/ant/ant-jme.properties" classpathref="ant-import.classpath"/>
|
||||||
<taskdef name="deb" classname="com.googlecode.ant_deb_task.Deb" classpathref="ant-import.classpath"/>
|
<taskdef name="deb" classname="com.googlecode.ant_deb_task.Deb" classpathref="ant-import.classpath"/>
|
||||||
<taskdef name="gcupload" classname="net.bluecow.googlecode.ant.GoogleCodeUploadTask" classpathref="ant-import.classpath"/>
|
|
||||||
<taskdef name="desktopentry" classname="com.googlecode.ant_deb_task.DesktopEntry" classpathref="ant-import.classpath"/>
|
<taskdef name="desktopentry" classname="com.googlecode.ant_deb_task.DesktopEntry" classpathref="ant-import.classpath"/>
|
||||||
|
|
||||||
<!--override branding target to include netbeans config file creation, using this target makes sure init was called-->
|
<!--override branding target to include netbeans config file creation, using this target makes sure init was called-->
|
||||||
@ -157,7 +156,7 @@
|
|||||||
replace="OpenIDE-Module-Specification-Version: ${plugins.version}"
|
replace="OpenIDE-Module-Specification-Version: ${plugins.version}"
|
||||||
byline="true"/>
|
byline="true"/>
|
||||||
<replaceregexp file="${module_dir}/nbproject/project.properties"
|
<replaceregexp file="${module_dir}/nbproject/project.properties"
|
||||||
match="spec.version.base"
|
match="#*spec\.version\.base"
|
||||||
replace="#spec.version.base"
|
replace="#spec.version.base"
|
||||||
byline="true"/>
|
byline="true"/>
|
||||||
</then>
|
</then>
|
||||||
@ -167,7 +166,7 @@
|
|||||||
replace="OpenIDE-Module-Implementation-Version: 0"
|
replace="OpenIDE-Module-Implementation-Version: 0"
|
||||||
byline="true"/>
|
byline="true"/>
|
||||||
<replaceregexp file="${module_dir}/nbproject/project.properties"
|
<replaceregexp file="${module_dir}/nbproject/project.properties"
|
||||||
match="#spec.version.base"
|
match="#*spec\.version\.base"
|
||||||
replace="spec.version.base"
|
replace="spec.version.base"
|
||||||
byline="true"/>
|
byline="true"/>
|
||||||
</else>
|
</else>
|
||||||
@ -176,9 +175,6 @@
|
|||||||
|
|
||||||
<target name="set-impl-version">
|
<target name="set-impl-version">
|
||||||
<property file="nbproject/project.properties"/>
|
<property file="nbproject/project.properties"/>
|
||||||
<antcall target="-create-jme3-svn-properties" inheritall="true">
|
|
||||||
<param name="jme3_dir" value="../engine/"/>
|
|
||||||
</antcall>
|
|
||||||
<foreach target="-do-impl-version" list="${modules}" delimiter=":" param="module_dir" inheritall="true">
|
<foreach target="-do-impl-version" list="${modules}" delimiter=":" param="module_dir" inheritall="true">
|
||||||
<param name="set_impl_version" value="true"/>
|
<param name="set_impl_version" value="true"/>
|
||||||
</foreach>
|
</foreach>
|
||||||
@ -191,105 +187,19 @@
|
|||||||
</foreach>
|
</foreach>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!--sets/unsets implementation version to svn revision for plugins-->
|
<!--sets/unsets implementation version to GIT revision for plugins-->
|
||||||
<target name="-do-impl-version">
|
<target name="-do-impl-version">
|
||||||
<!--jme3 libraries-->
|
|
||||||
<if>
|
|
||||||
<or>
|
|
||||||
<equals arg1="${module_dir}" arg2="jme3-core-libraries"/>
|
|
||||||
<equals arg1="${module_dir}" arg2="jme3-project-libraries"/>
|
|
||||||
</or>
|
|
||||||
<then>
|
|
||||||
<!--set jme3 libraries svn revision-->
|
|
||||||
<property prefix="svn" file="build/jme3-lib-svn.properties"/>
|
|
||||||
</then>
|
|
||||||
<else>
|
|
||||||
<!--jme3 core-->
|
|
||||||
<if>
|
|
||||||
<or>
|
|
||||||
<equals arg1="${module_dir}" arg2="jme3-core-baselibs"/>
|
|
||||||
<equals arg1="${module_dir}" arg2="jme3-project-baselibs"/>
|
|
||||||
</or>
|
|
||||||
<then>
|
|
||||||
<!--set jme3 svn revision-->
|
|
||||||
<property prefix="svn" file="build/jme3-svn.properties"/>
|
|
||||||
</then>
|
|
||||||
<else>
|
|
||||||
<!--jme3 test data-->
|
|
||||||
<if>
|
|
||||||
<equals arg1="${module_dir}" arg2="jme3-project-testdata"/>
|
|
||||||
<then>
|
|
||||||
<!--set jme3 testdata svn revision-->
|
|
||||||
<property prefix="svn" file="build/jme3-testdata-svn.properties"/>
|
|
||||||
</then>
|
|
||||||
<else>
|
|
||||||
<!--jme3 tests-->
|
|
||||||
<if>
|
|
||||||
<equals arg1="${module_dir}" arg2="jme3-tests-template"/>
|
|
||||||
<then>
|
|
||||||
<!--set jme3 tests svn revision-->
|
|
||||||
<property prefix="svn" file="build/jme3-tests-svn.properties"/>
|
|
||||||
</then>
|
|
||||||
<!--"normal" module-->
|
|
||||||
<else>
|
|
||||||
<!--load svn revision of this modules folder if we are setting the value-->
|
|
||||||
<if>
|
<if>
|
||||||
<equals arg1="${set_impl_version}" arg2="true"/>
|
<equals arg1="${set_impl_version}" arg2="true"/>
|
||||||
<then>
|
<then>
|
||||||
<exec executable="svn" output="build/${module_dir}-svn.properties" dir="${module_dir}">
|
<echo>Setting implementation version for ${module_dir} to revision: ${nbm.revision}</echo>
|
||||||
<arg value="info" />
|
<replace file="${module_dir}/manifest.mf" token="OpenIDE-Module-Implementation-Version: 0" value="OpenIDE-Module-Implementation-Version: ${nbm.revision}"/>
|
||||||
</exec>
|
|
||||||
<replace file="build/${module_dir}-svn.properties" token=" " value=""/>
|
|
||||||
</then>
|
|
||||||
</if>
|
|
||||||
<!--set svn revision of module-->
|
|
||||||
<property prefix="svn" file="build/${module_dir}-svn.properties"/>
|
|
||||||
</else>
|
|
||||||
</if>
|
|
||||||
</else>
|
|
||||||
</if>
|
|
||||||
</else>
|
|
||||||
</if>
|
|
||||||
</else>
|
|
||||||
</if>
|
|
||||||
|
|
||||||
<if>
|
|
||||||
<equals arg1="${set_impl_version}" arg2="true"/>
|
|
||||||
<then>
|
|
||||||
<echo>Setting implementation version for ${module_dir} to revision: ${svn.LastChangedRev}</echo>
|
|
||||||
<replace file="${module_dir}/manifest.mf" token="OpenIDE-Module-Implementation-Version: 0" value="OpenIDE-Module-Implementation-Version: ${svn.LastChangedRev}"/>
|
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<echo>Removing implementation version for ${module_dir} from revision: ${svn.LastChangedRev}</echo>
|
<echo>Removing implementation version for ${module_dir} from revision: ${nbm.revision}</echo>
|
||||||
<replace file="${module_dir}/manifest.mf" token="OpenIDE-Module-Implementation-Version: ${svn.LastChangedRev}" value="OpenIDE-Module-Implementation-Version: 0"/>
|
<replace file="${module_dir}/manifest.mf" token="OpenIDE-Module-Implementation-Version: ${nbm.revision}" value="OpenIDE-Module-Implementation-Version: 0"/>
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<!--creates properties files containing svn info for the jme3 folders-->
|
|
||||||
<target name="-create-jme3-svn-properties">
|
|
||||||
<mkdir dir="build"/>
|
|
||||||
<!--jme3 svn properties-->
|
|
||||||
<exec executable="svn" dir="${jme3_dir}/src/" output="build/jme3-svn.properties">
|
|
||||||
<arg value="info" />
|
|
||||||
</exec>
|
|
||||||
<replace file="build/jme3-svn.properties" token=" " value=""/>
|
|
||||||
<!--jme3 test data svn properties-->
|
|
||||||
<exec executable="svn" dir="${jme3_dir}/test-data/" output="build/jme3-testdata-svn.properties">
|
|
||||||
<arg value="info" />
|
|
||||||
</exec>
|
|
||||||
<replace file="build/jme3-testdata-svn.properties" token=" " value=""/>
|
|
||||||
<!--jme3 libraries svn properties-->
|
|
||||||
<exec executable="svn" dir="${jme3_dir}/lib/" output="build/jme3-lib-svn.properties">
|
|
||||||
<arg value="info" />
|
|
||||||
</exec>
|
|
||||||
<replace file="build/jme3-lib-svn.properties" token=" " value=""/>
|
|
||||||
<!--jme3 tests svn properties-->
|
|
||||||
<exec executable="svn" dir="${jme3_dir}/src/test/" output="build/jme3-tests-svn.properties">
|
|
||||||
<arg value="info" />
|
|
||||||
</exec>
|
|
||||||
<replace file="build/jme3-tests-svn.properties" token=" " value=""/>
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="build-installers">
|
<target name="build-installers">
|
||||||
@ -298,7 +208,7 @@
|
|||||||
<property name="suite.location" value="${basedir}"/>
|
<property name="suite.location" value="${basedir}"/>
|
||||||
<property name="suite.nbi.product.uid" value="${app.name}"/>
|
<property name="suite.nbi.product.uid" value="${app.name}"/>
|
||||||
<!--TODO: this is .0.2 because of the pre-release static 3.0.0, else the RCs could not be installed next to a beta-->
|
<!--TODO: this is .0.2 because of the pre-release static 3.0.0, else the RCs could not be installed next to a beta-->
|
||||||
<property name="suite.nbi.product.version" value="${plugins.version}.0.4"/>
|
<property name="suite.nbi.product.version" value="${plugins.version}.0.${nbm.revision}"/>
|
||||||
<property name="nbi.stub.location" value="${basedir}/nbi/stub"/>
|
<property name="nbi.stub.location" value="${basedir}/nbi/stub"/>
|
||||||
<property name="nbi.stub.common.location" value="${basedir}/nbi/.common"/>
|
<property name="nbi.stub.common.location" value="${basedir}/nbi/.common"/>
|
||||||
<property name="nbi.ant.tasks.jar" value="${basedir}/nbi/antlib/nbi-ant-tasks.jar"/>
|
<property name="nbi.ant.tasks.jar" value="${basedir}/nbi/antlib/nbi-ant-tasks.jar"/>
|
||||||
@ -311,6 +221,8 @@
|
|||||||
<property name="pack200.enabled" value="true"/>
|
<property name="pack200.enabled" value="true"/>
|
||||||
<property name="nbi.icon.file" value="${basedir}/jmonkeyplatform.png"/>
|
<property name="nbi.icon.file" value="${basedir}/jmonkeyplatform.png"/>
|
||||||
<property name="nbi.dock.icon.file" value="${basedir}/jmonkeyplatform.icns"/>
|
<property name="nbi.dock.icon.file" value="${basedir}/jmonkeyplatform.icns"/>
|
||||||
|
<property name="product.description" value="${app.description}"/>
|
||||||
|
<property name="product.categories" value="${app.categories}"/>
|
||||||
</ant>
|
</ant>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
@ -339,7 +251,7 @@
|
|||||||
section="devel"
|
section="devel"
|
||||||
depends="sun-java6-jdk"
|
depends="sun-java6-jdk"
|
||||||
maintainer="jMonkeyEngine"
|
maintainer="jMonkeyEngine"
|
||||||
homepage="http://www.jmonkeyengine.com"
|
homepage="http://www.jmonkeyengine.org"
|
||||||
postrm="debscripts/postrm"
|
postrm="debscripts/postrm"
|
||||||
>
|
>
|
||||||
<tarfileset dir="dist/${app.name}/" prefix="opt/${app.name}">
|
<tarfileset dir="dist/${app.name}/" prefix="opt/${app.name}">
|
||||||
@ -360,57 +272,4 @@
|
|||||||
</deb>
|
</deb>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="-upload-googlecode" depends="-check-googlecode" if="googlecode.credentials.present">
|
|
||||||
<property file="nbproject/project.properties"/>
|
|
||||||
<property file="../../../googlecode.properties" prefix="googlecode"/>
|
|
||||||
<echo>Upload windows installers to googlecode..</echo>
|
|
||||||
<gcupload projectname="jmonkeyengine"
|
|
||||||
labels="Type-Installer, OpSys-Windows, jMonkeyEngine3, Featured"
|
|
||||||
summary="jMonkeyEngine3 SDK ${app.version} for Windows32"
|
|
||||||
filename="${basedir}/dist/${app.name}-windows-x86.exe"
|
|
||||||
targetfilename="jME3_SDK_${app.version}-windows-x86.exe"
|
|
||||||
username="${googlecode.username}"
|
|
||||||
password="${googlecode.password}"
|
|
||||||
/>
|
|
||||||
<gcupload projectname="jmonkeyengine"
|
|
||||||
labels="Type-Installer, OpSys-Windows, jMonkeyEngine3, Featured"
|
|
||||||
summary="jMonkeyEngine3 SDK ${app.version} for Windows64"
|
|
||||||
filename="${basedir}/dist/${app.name}-windows-x64.exe"
|
|
||||||
targetfilename="jME3_SDK_${app.version}-windows-x64.exe"
|
|
||||||
username="${googlecode.username}"
|
|
||||||
password="${googlecode.password}"
|
|
||||||
/>
|
|
||||||
<echo>Upload linux installers to googlecode..</echo>
|
|
||||||
<gcupload projectname="jmonkeyengine"
|
|
||||||
labels="Type-Installer, OpSys-Linux, jMonkeyEngine3, Featured"
|
|
||||||
summary="jMonkeyEngine3 SDK ${app.version} for Linux32"
|
|
||||||
filename="${basedir}/dist/${app.name}-linux-x86.sh"
|
|
||||||
targetfilename="jME3_SDK_${app.version}-linux-x86.sh"
|
|
||||||
username="${googlecode.username}"
|
|
||||||
password="${googlecode.password}"
|
|
||||||
/>
|
|
||||||
<gcupload projectname="jmonkeyengine"
|
|
||||||
labels="Type-Installer, OpSys-Linux, jMonkeyEngine3, Featured"
|
|
||||||
summary="jMonkeyEngine3 SDK ${app.version} for Linux64"
|
|
||||||
filename="${basedir}/dist/${app.name}-linux-x64.sh"
|
|
||||||
targetfilename="jME3_SDK_${app.version}-linux-x64.sh"
|
|
||||||
username="${googlecode.username}"
|
|
||||||
password="${googlecode.password}"
|
|
||||||
/>
|
|
||||||
<echo>Upload mac installer to googlecode..</echo>
|
|
||||||
<gcupload projectname="jmonkeyengine"
|
|
||||||
labels="Type-Installer, OpSys-OSX, jMonkeyEngine3, Featured"
|
|
||||||
summary="jMonkeyEngine3 SDK ${app.version} for MacOS X"
|
|
||||||
filename="${basedir}/dist/${app.name}-macosx.tgz"
|
|
||||||
targetfilename="jME3_SDK_${app.version}-macosx.tgz"
|
|
||||||
username="${googlecode.username}"
|
|
||||||
password="${googlecode.password}"
|
|
||||||
/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="-check-googlecode">
|
|
||||||
<available file="../../../googlecode.properties" property="googlecode.credentials.present"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#(c) jMonkeyEngine.com
|
#(c) jmonkeyengine.org
|
||||||
#Author Normen Hansen
|
#Author Normen Hansen
|
||||||
set -e
|
set -e
|
||||||
rm -rf jdk-macosx.zip
|
rm -rf jdk-macosx.zip
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
#(c) jMonkeyEngine.com
|
#(c) jmonkeyengine.org
|
||||||
#This script creates SFX binaries of the JDK for the specified platform
|
#This script creates SFX binaries of the JDK for the specified platform
|
||||||
#Author Normen Hansen
|
#Author Normen Hansen
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
javac.source=1.6
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint:-serial
|
javac.compilerargs=-Xlint -Xlint:-serial
|
||||||
license.file=../license-jme.txt
|
license.file=../license-jme.txt
|
||||||
nbm.homepage=http://www.jmonkeyengine.com
|
nbm.homepage=http://www.jmonkeyengine.org
|
||||||
nbm.module.author=Normen Hansen
|
nbm.module.author=Normen Hansen
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:50 +0200
|
#Thu, 25 Aug 2011 20:26:50 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
|
nbm.module.author=Normen Hansen
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:49 +0200
|
#Thu, 25 Aug 2011 20:26:49 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
license.file=../license-jme.txt
|
license.file=../license-jme.txt
|
||||||
nbm.homepage=http\://www.jmonkeyengine.com
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
nbm.module.author=Normen Hansen
|
nbm.module.author=Normen Hansen
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:50 +0200
|
#Thu, 25 Aug 2011 20:26:50 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
nbm.homepage=http\://www.jmonkeyengine.com
|
license.file=../license-jme.txt
|
||||||
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
nbm.module.author=Kaelthas
|
nbm.module.author=Kaelthas
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -165,6 +165,14 @@ public class BlenderTool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getBlenderOsSettingsPath() {
|
||||||
|
if (Utilities.isMac()) {
|
||||||
|
return "../blender/blender.app/Contents/Resources";
|
||||||
|
} else {
|
||||||
|
return "../blender";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean checkBlenderFolders() {
|
private static boolean checkBlenderFolders() {
|
||||||
String jmpDir = Places.getUserDirectory().getAbsolutePath();
|
String jmpDir = Places.getUserDirectory().getAbsolutePath();
|
||||||
FileObject fileObject = FileUtil.toFileObject(new File(jmpDir));
|
FileObject fileObject = FileUtil.toFileObject(new File(jmpDir));
|
||||||
@ -251,9 +259,9 @@ public class BlenderTool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static File getBlenderSettingsFolder() {
|
private static File getBlenderSettingsFolder() {
|
||||||
File blender = InstalledFileLocator.getDefault().locate(getBlenderOsPath() + "/2.69", null, false);
|
File blender = InstalledFileLocator.getDefault().locate(getBlenderOsSettingsPath() + "/2.75", null, false);
|
||||||
if (blender == null) {
|
if (blender == null) {
|
||||||
blender = InstalledFileLocator.getDefault().locate(getBlenderOsPath() + "/2.67", null, false);
|
blender = InstalledFileLocator.getDefault().locate(getBlenderOsSettingsPath() + "/2.69", null, false);
|
||||||
}
|
}
|
||||||
if (blender == null) {
|
if (blender == null) {
|
||||||
DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message("Error finding Blender settings"));
|
DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message("Error finding Blender settings"));
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:50 +0200
|
#Thu, 25 Aug 2011 20:26:50 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
license.file=../license-jme.txt
|
license.file=../license-jme.txt
|
||||||
nbm.homepage=http\://www.jmonkeyengine.com
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
nbm.module.author=R\u00e9my Bouquet
|
nbm.module.author=R\u00e9my Bouquet
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:50 +0200
|
#Thu, 25 Aug 2011 20:26:50 +0200
|
||||||
javac.source=1.6
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
|
license.file=../license-jme.txt
|
||||||
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
|
nbm.module.author=Normen Hansen
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:49 +0200
|
#Thu, 25 Aug 2011 20:26:49 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
license.file=../license-jme.txt
|
license.file=../license-jme.txt
|
||||||
nbm.homepage=http\://www.jmonkeyengine.com
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
nbm.module.author=Normen Hansen
|
nbm.module.author=Normen Hansen
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
build.xml.data.CRC32=278ea45d
|
build.xml.data.CRC32=d43b0890
|
||||||
build.xml.script.CRC32=cdae6a36
|
build.xml.script.CRC32=cdae6a36
|
||||||
build.xml.stylesheet.CRC32=a56c6a5b@2.67.1
|
build.xml.stylesheet.CRC32=a56c6a5b@2.67.1
|
||||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||||
nbproject/build-impl.xml.data.CRC32=278ea45d
|
nbproject/build-impl.xml.data.CRC32=d43b0890
|
||||||
nbproject/build-impl.xml.script.CRC32=246f9b81
|
nbproject/build-impl.xml.script.CRC32=246f9b81
|
||||||
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.67.1
|
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.67.1
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
license.file=../license-jme.txt
|
license.file=../license-jme.txt
|
||||||
nbm.homepage=http\://www.jmonkeyengine.com
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
nbm.module.author=jMonkeyEngine
|
nbm.module.author=jMonkeyEngine
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version='1.0'?>
|
||||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
<project xmlns='http://www.netbeans.org/ns/project/1'>
|
||||||
<type>org.netbeans.modules.apisupport.project</type>
|
<type>org.netbeans.modules.apisupport.project</type>
|
||||||
<configuration>
|
<configuration>
|
||||||
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
|
<data xmlns='http://www.netbeans.org/ns/nb-module-project/3'>
|
||||||
<code-name-base>com.jme3.gde.core.baselibs</code-name-base>
|
<code-name-base>com.jme3.gde.core.baselibs</code-name-base>
|
||||||
<suite-component/>
|
<suite-component />
|
||||||
<module-dependencies>
|
<module-dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<code-name-base>com.jme3.gde.core.libraries</code-name-base>
|
<code-name-base>com.jme3.gde.core.libraries</code-name-base>
|
||||||
<build-prerequisite/>
|
<build-prerequisite />
|
||||||
<compile-dependency/>
|
<compile-dependency />
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>1</release-version>
|
<release-version>1</release-version>
|
||||||
<specification-version>3.1.0</specification-version>
|
<specification-version>3.1.0</specification-version>
|
||||||
@ -19,133 +19,142 @@
|
|||||||
<public-packages>
|
<public-packages>
|
||||||
<package>com.jme3.asset</package>
|
<package>com.jme3.asset</package>
|
||||||
<package>com.jme3.scene.plugins.blender</package>
|
<package>com.jme3.scene.plugins.blender</package>
|
||||||
<package>com.jme3.scene.plugins.blender.animations</package>
|
<package>com.jme3.scene.plugins.blender.math</package>
|
||||||
<package>com.jme3.scene.plugins.blender.cameras</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.constraints</package>
|
<package>com.jme3.scene.plugins.blender.constraints</package>
|
||||||
<package>com.jme3.scene.plugins.blender.constraints.definitions</package>
|
<package>com.jme3.scene.plugins.blender.constraints.definitions</package>
|
||||||
<package>com.jme3.scene.plugins.blender.curves</package>
|
<package>com.jme3.scene.plugins.blender.curves</package>
|
||||||
<package>com.jme3.scene.plugins.blender.file</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.landscape</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.lights</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.materials</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.math</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.meshes</package>
|
<package>com.jme3.scene.plugins.blender.meshes</package>
|
||||||
<package>com.jme3.scene.plugins.blender.modifiers</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.objects</package>
|
|
||||||
<package>com.jme3.scene.plugins.blender.particles</package>
|
<package>com.jme3.scene.plugins.blender.particles</package>
|
||||||
|
<package>com.jme3.scene.plugins.blender.cameras</package>
|
||||||
|
<package>com.jme3.scene.plugins.blender.objects</package>
|
||||||
|
<package>com.jme3.scene.plugins.blender.landscape</package>
|
||||||
|
<package>com.jme3.scene.plugins.blender.modifiers</package>
|
||||||
<package>com.jme3.scene.plugins.blender.textures</package>
|
<package>com.jme3.scene.plugins.blender.textures</package>
|
||||||
|
<package>com.jme3.scene.plugins.blender.textures.io</package>
|
||||||
<package>com.jme3.scene.plugins.blender.textures.blending</package>
|
<package>com.jme3.scene.plugins.blender.textures.blending</package>
|
||||||
<package>com.jme3.scene.plugins.blender.textures.generating</package>
|
<package>com.jme3.scene.plugins.blender.textures.generating</package>
|
||||||
<package>com.jme3.scene.plugins.blender.textures.io</package>
|
<package>com.jme3.scene.plugins.blender.animations</package>
|
||||||
<package>checkers.quals</package>
|
<package>com.jme3.scene.plugins.blender.materials</package>
|
||||||
<package>com.jme3.animation</package>
|
<package>com.jme3.scene.plugins.blender.file</package>
|
||||||
<package>com.jme3.app</package>
|
<package>com.jme3.scene.plugins.blender.lights</package>
|
||||||
<package>com.jme3.app.state</package>
|
<package>jme3tools.shader</package>
|
||||||
<package>com.jme3.asset.cache</package>
|
<package>jme3tools.savegame</package>
|
||||||
<package>com.jme3.asset.plugins</package>
|
<package>jme3tools.shadercheck</package>
|
||||||
<package>com.jme3.audio</package>
|
<package>jme3tools.optimize</package>
|
||||||
<package>com.jme3.audio.openal</package>
|
<package>jme3tools.converters</package>
|
||||||
<package>com.jme3.audio.plugins</package>
|
|
||||||
<package>com.jme3.bounding</package>
|
|
||||||
<package>com.jme3.cinematic</package>
|
|
||||||
<package>com.jme3.cinematic.events</package>
|
|
||||||
<package>com.jme3.collision</package>
|
|
||||||
<package>com.jme3.collision.bih</package>
|
|
||||||
<package>com.jme3.cursors.plugins</package>
|
|
||||||
<package>com.jme3.effect</package>
|
|
||||||
<package>com.jme3.effect.influencers</package>
|
|
||||||
<package>com.jme3.effect.shapes</package>
|
|
||||||
<package>com.jme3.export</package>
|
|
||||||
<package>com.jme3.export.binary</package>
|
|
||||||
<package>com.jme3.font</package>
|
|
||||||
<package>com.jme3.font.plugins</package>
|
|
||||||
<package>com.jme3.input</package>
|
|
||||||
<package>com.jme3.input.controls</package>
|
|
||||||
<package>com.jme3.input.dummy</package>
|
|
||||||
<package>com.jme3.input.event</package>
|
|
||||||
<package>com.jme3.light</package>
|
|
||||||
<package>com.jme3.material</package>
|
|
||||||
<package>com.jme3.material.plugins</package>
|
|
||||||
<package>com.jme3.math</package>
|
|
||||||
<package>com.jme3.post</package>
|
|
||||||
<package>com.jme3.profile</package>
|
|
||||||
<package>com.jme3.renderer</package>
|
|
||||||
<package>com.jme3.renderer.opengl</package>
|
|
||||||
<package>com.jme3.renderer.queue</package>
|
|
||||||
<package>com.jme3.scene</package>
|
|
||||||
<package>com.jme3.scene.control</package>
|
|
||||||
<package>com.jme3.scene.debug</package>
|
|
||||||
<package>com.jme3.scene.instancing</package>
|
|
||||||
<package>com.jme3.scene.mesh</package>
|
|
||||||
<package>com.jme3.scene.plugins</package>
|
|
||||||
<package>com.jme3.scene.shape</package>
|
|
||||||
<package>com.jme3.shader</package>
|
<package>com.jme3.shader</package>
|
||||||
<package>com.jme3.shader.plugins</package>
|
<package>com.jme3.shader.plugins</package>
|
||||||
<package>com.jme3.shadow</package>
|
<package>com.jme3.export</package>
|
||||||
<package>com.jme3.system</package>
|
<package>com.jme3.export.binary</package>
|
||||||
<package>com.jme3.texture</package>
|
<package>com.jme3.cinematic</package>
|
||||||
<package>com.jme3.texture.image</package>
|
<package>com.jme3.cinematic.events</package>
|
||||||
<package>com.jme3.texture.plugins</package>
|
<package>com.jme3.math</package>
|
||||||
<package>com.jme3.ui</package>
|
|
||||||
<package>com.jme3.util</package>
|
<package>com.jme3.util</package>
|
||||||
<package>com.jme3.util.blockparser</package>
|
<package>com.jme3.util.blockparser</package>
|
||||||
<package>com.jme3.util.xml</package>
|
<package>com.jme3.util.xml</package>
|
||||||
<package>jme3tools.converters</package>
|
<package>com.jme3.post</package>
|
||||||
<package>jme3tools.converters.model</package>
|
<package>com.jme3.input</package>
|
||||||
<package>jme3tools.converters.model.strip</package>
|
<package>com.jme3.input.dummy</package>
|
||||||
<package>jme3tools.optimize</package>
|
<package>com.jme3.input.controls</package>
|
||||||
<package>jme3tools.savegame</package>
|
<package>com.jme3.input.event</package>
|
||||||
<package>jme3tools.shader</package>
|
<package>com.jme3.profile</package>
|
||||||
<package>jme3tools.shadercheck</package>
|
<package>com.jme3.ui</package>
|
||||||
|
<package>com.jme3.audio</package>
|
||||||
|
<package>com.jme3.audio.openal</package>
|
||||||
|
<package>com.jme3.audio.plugins</package>
|
||||||
|
<package>com.jme3.cursors.plugins</package>
|
||||||
|
<package>com.jme3.bounding</package>
|
||||||
|
<package>com.jme3.shadow</package>
|
||||||
|
<package>com.jme3.texture</package>
|
||||||
|
<package>com.jme3.texture.image</package>
|
||||||
|
<package>com.jme3.texture.plugins</package>
|
||||||
|
<package>com.jme3.system</package>
|
||||||
|
<package>com.jme3.material</package>
|
||||||
|
<package>com.jme3.material.plugins</package>
|
||||||
|
<package>com.jme3.renderer</package>
|
||||||
|
<package>com.jme3.renderer.queue</package>
|
||||||
|
<package>com.jme3.renderer.opengl</package>
|
||||||
|
<package>com.jme3.effect</package>
|
||||||
|
<package>com.jme3.effect.shapes</package>
|
||||||
|
<package>com.jme3.effect.influencers</package>
|
||||||
|
<package>com.jme3.app</package>
|
||||||
|
<package>com.jme3.app.state</package>
|
||||||
|
<package>com.jme3.asset.plugins</package>
|
||||||
|
<package>com.jme3.asset.cache</package>
|
||||||
|
<package>com.jme3.light</package>
|
||||||
|
<package>com.jme3.animation</package>
|
||||||
|
<package>com.jme3.collision</package>
|
||||||
|
<package>com.jme3.collision.bih</package>
|
||||||
|
<package>com.jme3.scene</package>
|
||||||
|
<package>com.jme3.scene.shape</package>
|
||||||
|
<package>com.jme3.scene.plugins</package>
|
||||||
|
<package>com.jme3.scene.debug</package>
|
||||||
|
<package>com.jme3.scene.instancing</package>
|
||||||
|
<package>com.jme3.scene.control</package>
|
||||||
|
<package>com.jme3.scene.mesh</package>
|
||||||
|
<package>com.jme3.font</package>
|
||||||
|
<package>com.jme3.font.plugins</package>
|
||||||
|
<package>checkers.quals</package>
|
||||||
|
<package>jme3tools.navigation</package>
|
||||||
<package>com.jme3.input.awt</package>
|
<package>com.jme3.input.awt</package>
|
||||||
<package>com.jme3.system.awt</package>
|
<package>com.jme3.system.awt</package>
|
||||||
<package>jme3tools.navigation</package>
|
|
||||||
<package>com.jme3.post.filters</package>
|
|
||||||
<package>com.jme3.post.ssao</package>
|
<package>com.jme3.post.ssao</package>
|
||||||
|
<package>com.jme3.post.filters</package>
|
||||||
<package>com.jme3.water</package>
|
<package>com.jme3.water</package>
|
||||||
<package>com.jme3.bullet</package>
|
<package>com.jme3.bullet</package>
|
||||||
<package>com.jme3.bullet.collision</package>
|
<package>com.jme3.bullet.util</package>
|
||||||
<package>com.jme3.bullet.collision.shapes</package>
|
|
||||||
<package>com.jme3.bullet.collision.shapes.infos</package>
|
|
||||||
<package>com.jme3.bullet.control</package>
|
|
||||||
<package>com.jme3.bullet.control.ragdoll</package>
|
|
||||||
<package>com.jme3.bullet.debug</package>
|
|
||||||
<package>com.jme3.bullet.joints</package>
|
<package>com.jme3.bullet.joints</package>
|
||||||
<package>com.jme3.bullet.joints.motors</package>
|
<package>com.jme3.bullet.joints.motors</package>
|
||||||
<package>com.jme3.bullet.objects</package>
|
<package>com.jme3.bullet.objects</package>
|
||||||
<package>com.jme3.bullet.objects.infos</package>
|
<package>com.jme3.bullet.objects.infos</package>
|
||||||
<package>com.jme3.bullet.util</package>
|
<package>com.jme3.bullet.debug</package>
|
||||||
<package>com.jme3.audio.lwjgl</package>
|
<package>com.jme3.bullet.control</package>
|
||||||
|
<package>com.jme3.bullet.control.ragdoll</package>
|
||||||
|
<package>com.jme3.bullet.collision</package>
|
||||||
|
<package>com.jme3.bullet.collision.shapes</package>
|
||||||
|
<package>com.jme3.bullet.collision.shapes.infos</package>
|
||||||
<package>com.jme3.input.lwjgl</package>
|
<package>com.jme3.input.lwjgl</package>
|
||||||
<package>com.jme3.renderer.lwjgl</package>
|
<package>com.jme3.audio.lwjgl</package>
|
||||||
<package>com.jme3.system.lwjgl</package>
|
<package>com.jme3.system.lwjgl</package>
|
||||||
|
<package>com.jme3.renderer.lwjgl</package>
|
||||||
<package>com.jme3.network</package>
|
<package>com.jme3.network</package>
|
||||||
<package>com.jme3.network.base</package>
|
|
||||||
<package>com.jme3.network.kernel</package>
|
<package>com.jme3.network.kernel</package>
|
||||||
<package>com.jme3.network.kernel.tcp</package>
|
|
||||||
<package>com.jme3.network.kernel.udp</package>
|
<package>com.jme3.network.kernel.udp</package>
|
||||||
|
<package>com.jme3.network.kernel.tcp</package>
|
||||||
|
<package>com.jme3.network.util</package>
|
||||||
<package>com.jme3.network.message</package>
|
<package>com.jme3.network.message</package>
|
||||||
<package>com.jme3.network.rmi</package>
|
<package>com.jme3.network.rmi</package>
|
||||||
|
<package>com.jme3.network.base</package>
|
||||||
<package>com.jme3.network.serializing</package>
|
<package>com.jme3.network.serializing</package>
|
||||||
<package>com.jme3.network.serializing.serializers</package>
|
<package>com.jme3.network.serializing.serializers</package>
|
||||||
|
<package>com.jme3.network.service</package>
|
||||||
|
<package>com.jme3.network.service.rpc</package>
|
||||||
|
<package>com.jme3.network.service.rpc.msg</package>
|
||||||
|
<package>com.jme3.network.service.serializer</package>
|
||||||
<package>com.jme3.niftygui</package>
|
<package>com.jme3.niftygui</package>
|
||||||
<package>com.jme3.export.xml</package>
|
<package>com.jme3.export.xml</package>
|
||||||
<package>com.jme3.scene.plugins.fbx</package>
|
<package>com.jme3.scene.plugins.fbx</package>
|
||||||
|
<package>com.jme3.scene.plugins.fbx.obj</package>
|
||||||
|
<package>com.jme3.scene.plugins.fbx.anim</package>
|
||||||
|
<package>com.jme3.scene.plugins.fbx.node</package>
|
||||||
|
<package>com.jme3.scene.plugins.fbx.misc</package>
|
||||||
|
<package>com.jme3.scene.plugins.fbx.material</package>
|
||||||
<package>com.jme3.scene.plugins.fbx.file</package>
|
<package>com.jme3.scene.plugins.fbx.file</package>
|
||||||
|
<package>com.jme3.scene.plugins.fbx.mesh</package>
|
||||||
<package>com.jme3.scene.plugins.ogre</package>
|
<package>com.jme3.scene.plugins.ogre</package>
|
||||||
<package>com.jme3.scene.plugins.ogre.matext</package>
|
<package>com.jme3.scene.plugins.ogre.matext</package>
|
||||||
<package>com.jme3.terrain</package>
|
<package>com.jme3.terrain</package>
|
||||||
|
<package>com.jme3.terrain.heightmap</package>
|
||||||
<package>com.jme3.terrain.geomipmap</package>
|
<package>com.jme3.terrain.geomipmap</package>
|
||||||
|
<package>com.jme3.terrain.geomipmap.picking</package>
|
||||||
<package>com.jme3.terrain.geomipmap.grid</package>
|
<package>com.jme3.terrain.geomipmap.grid</package>
|
||||||
<package>com.jme3.terrain.geomipmap.lodcalc</package>
|
<package>com.jme3.terrain.geomipmap.lodcalc</package>
|
||||||
<package>com.jme3.terrain.geomipmap.lodcalc.util</package>
|
<package>com.jme3.terrain.geomipmap.lodcalc.util</package>
|
||||||
<package>com.jme3.terrain.geomipmap.picking</package>
|
|
||||||
<package>com.jme3.terrain.heightmap</package>
|
|
||||||
<package>com.jme3.terrain.noise</package>
|
<package>com.jme3.terrain.noise</package>
|
||||||
<package>com.jme3.terrain.noise.basis</package>
|
|
||||||
<package>com.jme3.terrain.noise.filter</package>
|
<package>com.jme3.terrain.noise.filter</package>
|
||||||
<package>com.jme3.terrain.noise.fractal</package>
|
|
||||||
<package>com.jme3.terrain.noise.modulator</package>
|
<package>com.jme3.terrain.noise.modulator</package>
|
||||||
|
<package>com.jme3.terrain.noise.fractal</package>
|
||||||
|
<package>com.jme3.terrain.noise.basis</package>
|
||||||
</public-packages>
|
</public-packages>
|
||||||
<class-path-extension>
|
<class-path-extension>
|
||||||
<runtime-relative-path>ext/jme3-blender-3.1.0-snapshot-github.jar</runtime-relative-path>
|
<runtime-relative-path>ext/jme3-blender-3.1.0-snapshot-github.jar</runtime-relative-path>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:48 +0200
|
#Thu, 25 Aug 2011 20:26:48 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
license.file=../license-jme.txt
|
license.file=../license-jme.txt
|
||||||
nbm.homepage=http\://www.jmonkeyengine.com
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
nbm.module.author=jMonkeyEngine
|
nbm.module.author=jMonkeyEngine
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -6,6 +6,44 @@
|
|||||||
<suite-component />
|
<suite-component />
|
||||||
<module-dependencies />
|
<module-dependencies />
|
||||||
<public-packages>
|
<public-packages>
|
||||||
|
<package>org.ejml</package>
|
||||||
|
<package>org.ejml.interfaces.decomposition</package>
|
||||||
|
<package>org.ejml.interfaces.linsol</package>
|
||||||
|
<package>org.ejml.data</package>
|
||||||
|
<package>org.ejml.alg.dense.linsol</package>
|
||||||
|
<package>org.ejml.ops</package>
|
||||||
|
<package>org.ejml.factory</package>
|
||||||
|
<package>org.ejml.alg.fixed</package>
|
||||||
|
<package>org.ejml.alg.generic</package>
|
||||||
|
<package>org.ejml.alg.block</package>
|
||||||
|
<package>org.ejml.alg.block.decomposition.chol</package>
|
||||||
|
<package>org.ejml.alg.block.decomposition.qr</package>
|
||||||
|
<package>org.ejml.alg.block.decomposition.hessenberg</package>
|
||||||
|
<package>org.ejml.alg.block.decomposition.bidiagonal</package>
|
||||||
|
<package>org.ejml.alg.block.linsol.chol</package>
|
||||||
|
<package>org.ejml.alg.block.linsol.qr</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.chol</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.lu</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.qr</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.hessenberg</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.svd</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.svd.implicitqr</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.eig</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.eig.watched</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.eig.symm</package>
|
||||||
|
<package>org.ejml.alg.dense.decomposition.bidiagonal</package>
|
||||||
|
<package>org.ejml.alg.dense.mult</package>
|
||||||
|
<package>org.ejml.alg.dense.misc</package>
|
||||||
|
<package>org.ejml.alg.dense.linsol.chol</package>
|
||||||
|
<package>org.ejml.alg.dense.linsol.lu</package>
|
||||||
|
<package>org.ejml.alg.dense.linsol.qr</package>
|
||||||
|
<package>org.ejml.alg.dense.linsol.svd</package>
|
||||||
|
<package>org.ejml.simple</package>
|
||||||
|
<package>org.ejml.alg.dense.decompose</package>
|
||||||
|
<package>org.ejml.alg.dense.decompose.chol</package>
|
||||||
|
<package>org.ejml.alg.dense.decompose.lu</package>
|
||||||
|
<package>org.ejml.alg.dense.decompose.qr</package>
|
||||||
<package>com.bulletphysics</package>
|
<package>com.bulletphysics</package>
|
||||||
<package>com.bulletphysics.collision.broadphase</package>
|
<package>com.bulletphysics.collision.broadphase</package>
|
||||||
<package>com.bulletphysics.collision.dispatch</package>
|
<package>com.bulletphysics.collision.dispatch</package>
|
||||||
@ -161,6 +199,22 @@
|
|||||||
<package>org.jglfont.impl.format.awt</package>
|
<package>org.jglfont.impl.format.awt</package>
|
||||||
<package>org.jglfont.impl</package>
|
<package>org.jglfont.impl</package>
|
||||||
</public-packages>
|
</public-packages>
|
||||||
|
<class-path-extension>
|
||||||
|
<runtime-relative-path>ext/core-0.27.jar</runtime-relative-path>
|
||||||
|
<binary-origin>release/modules/ext/core-0.27.jar</binary-origin>
|
||||||
|
</class-path-extension>
|
||||||
|
<class-path-extension>
|
||||||
|
<runtime-relative-path>ext/dense64-0.27.jar</runtime-relative-path>
|
||||||
|
<binary-origin>release/modules/ext/dense64-0.27.jar</binary-origin>
|
||||||
|
</class-path-extension>
|
||||||
|
<class-path-extension>
|
||||||
|
<runtime-relative-path>ext/simple-0.27.jar</runtime-relative-path>
|
||||||
|
<binary-origin>release/modules/ext/simple-0.27.jar</binary-origin>
|
||||||
|
</class-path-extension>
|
||||||
|
<class-path-extension>
|
||||||
|
<runtime-relative-path>ext/denseC64-0.27.jar</runtime-relative-path>
|
||||||
|
<binary-origin>release/modules/ext/denseC64-0.27.jar</binary-origin>
|
||||||
|
</class-path-extension>
|
||||||
<class-path-extension>
|
<class-path-extension>
|
||||||
<runtime-relative-path>ext/jbullet.jar</runtime-relative-path>
|
<runtime-relative-path>ext/jbullet.jar</runtime-relative-path>
|
||||||
<binary-origin>release/modules/ext/jbullet.jar</binary-origin>
|
<binary-origin>release/modules/ext/jbullet.jar</binary-origin>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
build.xml.data.CRC32=08468784
|
build.xml.data.CRC32=e145fa2a
|
||||||
build.xml.script.CRC32=cfa8d5c5
|
build.xml.script.CRC32=cfa8d5c5
|
||||||
build.xml.stylesheet.CRC32=a56c6a5b@2.67.1
|
build.xml.stylesheet.CRC32=a56c6a5b@2.67.1
|
||||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||||
nbproject/build-impl.xml.data.CRC32=08468784
|
nbproject/build-impl.xml.data.CRC32=e145fa2a
|
||||||
nbproject/build-impl.xml.script.CRC32=270846fb
|
nbproject/build-impl.xml.script.CRC32=270846fb
|
||||||
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.67.1
|
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.67.1
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:49 +0200
|
#Thu, 25 Aug 2011 20:26:49 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
spec.version.base=3.1.0
|
spec.version.base=3.1.0
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
<module-dependencies>
|
<module-dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<code-name-base>org.netbeans.modules.autoupdate.services</code-name-base>
|
<code-name-base>org.netbeans.modules.autoupdate.services</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<specification-version>1.47.2</specification-version>
|
<specification-version>1.47.2</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
com.jme3.gde.core.updatecenters.keystore.JmeKeyStoreProvider
|
@ -1,7 +1,7 @@
|
|||||||
#jMP update centers
|
#jMP update centers
|
||||||
com_jme3_gde_core_update_center_nightly=http://updates.jmonkeyengine.org/nightly/3.0/plugins/updates.xml
|
com_jme3_gde_core_update_center_nightly=http://updates.jmonkeyengine.org/nightly/3.1/plugins/updates.xml
|
||||||
com_jme3_gde_core_update_center_stable=http://updates.jmonkeyengine.org/stable/3.0/plugins/updates.xml
|
com_jme3_gde_core_update_center_stable=http://updates.jmonkeyengine.org/stable/3.1/plugins/updates.xml
|
||||||
com_jme3_jmp_contributions_update_center=http://updates.jmonkeyengine.org/contributions/updates.xml
|
com_jme3_jmp_contributions_update_center=http://updates.jmonkeyengine.org/contrib/3.1/updates.xml
|
||||||
|
|
||||||
#jMP update centers
|
#jMP update centers
|
||||||
Services/AutoupdateType/com_jme3_gde_core_update_center_nightly.instance=jMonkeyEngine SDK Nightly (Breaks!)
|
Services/AutoupdateType/com_jme3_gde_core_update_center_nightly.instance=jMonkeyEngine SDK Nightly (Breaks!)
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.jme3.gde.core.updatecenters.keystore;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.security.KeyStore;
|
||||||
|
import java.security.KeyStoreException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.cert.CertificateException;
|
||||||
|
import org.netbeans.spi.autoupdate.KeyStoreProvider;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the jMonkeyEngine SDK Plugins certificates into the AutoUpdate system.
|
||||||
|
*
|
||||||
|
* @author Kirill Vainer
|
||||||
|
*/
|
||||||
|
public class JmeKeyStoreProvider implements KeyStoreProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public KeyStore getKeyStore() {
|
||||||
|
InputStream in = null;
|
||||||
|
try {
|
||||||
|
in = JmeKeyStoreProvider.class.getResourceAsStream("trustedcerts.jks");
|
||||||
|
KeyStore store = KeyStore.getInstance("JKS");
|
||||||
|
store.load(in, "trustedcerts".toCharArray());
|
||||||
|
return store;
|
||||||
|
} catch (KeyStoreException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (NoSuchAlgorithmException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (CertificateException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} finally {
|
||||||
|
if (in != null) {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Binary file not shown.
@ -1,10 +1,10 @@
|
|||||||
#Thu, 25 Aug 2011 20:26:48 +0200
|
#Thu, 25 Aug 2011 20:26:48 +0200
|
||||||
file.reference.DDSUtils.jar=release/modules/ext/DDSUtils.jar
|
file.reference.DDSUtils.jar=release/modules/ext/DDSUtils.jar
|
||||||
#Thu, 25 Aug 2011 19:32:54 +0200
|
#Thu, 25 Aug 2011 19:32:54 +0200
|
||||||
javac.source=1.5
|
javac.source=1.6
|
||||||
javac.compilerargs=-Xlint -Xlint\:-serial
|
javac.compilerargs=-Xlint -Xlint\:-serial
|
||||||
license.file=../license-jme.txt
|
license.file=../license-jme.txt
|
||||||
nbm.homepage=http\://www.jmonkeyengine.com
|
nbm.homepage=http\://www.jmonkeyengine.org
|
||||||
nbm.module.author=Normen Hansen
|
nbm.module.author=Normen Hansen
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
project.license=jme
|
project.license=jme
|
||||||
|
10
sdk/jme3-dark-laf/README.md
Normal file
10
sdk/jme3-dark-laf/README.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# DarkMonkey
|
||||||
|
Netbeans LAF and FAC combo - uses NimROD and Obsidian
|
||||||
|
|
||||||
|
This is a plug-in for for Netbeans 8+ (well, the version it was developed for is 8.0.2). We wanted a dark theme variant for the jMonkeyEngine 3.1 sdk, so we made one. Enjoy!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Features
|
||||||
|
- Adds the DarkMonkey LaF to the Netbeans 8 environment under appearance - It's NimROD with a couple of tweaks. We've just adapted Nilo's wonderful project for the look we were going for.
|
||||||
|
- Adds the DarkMonkey FaC to the editor profile listing - It's Obsidian with some tweaks. DejaVu Sans Mono brings some sophistication to an otherwise courier world.
|
8
sdk/jme3-dark-laf/build.xml
Normal file
8
sdk/jme3-dark-laf/build.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
|
||||||
|
<!-- for some information on what you could do (e.g. targets to override). -->
|
||||||
|
<!-- If you delete this file and reopen the project it will be recreated. -->
|
||||||
|
<project name="org.jme3.netbeans.plaf.darkmonkey" default="netbeans" basedir=".">
|
||||||
|
<description>Builds, tests, and runs the project org.jme3.netbeans.plaf.darkmonkey.</description>
|
||||||
|
<import file="nbproject/build-impl.xml"/>
|
||||||
|
</project>
|
7
sdk/jme3-dark-laf/manifest.mf
Normal file
7
sdk/jme3-dark-laf/manifest.mf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
OpenIDE-Module: org.jme3.netbeans.plaf.darkmonkey/1
|
||||||
|
OpenIDE-Module-Implementation-Version: 0
|
||||||
|
OpenIDE-Module-Install: org/jme3/netbeans/plaf/darkmonkey/Installer.class
|
||||||
|
OpenIDE-Module-Layer: org/jme3/netbeans/plaf/darkmonkey/layer.xml
|
||||||
|
OpenIDE-Module-Localizing-Bundle: org/jme3/netbeans/plaf/darkmonkey/Bundle.properties
|
||||||
|
|
45
sdk/jme3-dark-laf/nbproject/build-impl.xml
Normal file
45
sdk/jme3-dark-laf/nbproject/build-impl.xml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
*** GENERATED FROM project.xml - DO NOT EDIT ***
|
||||||
|
*** EDIT ../build.xml INSTEAD ***
|
||||||
|
-->
|
||||||
|
<project name="org.jme3.netbeans.plaf.darkmonkey-impl" basedir="..">
|
||||||
|
<fail message="Please build using Ant 1.7.1 or higher.">
|
||||||
|
<condition>
|
||||||
|
<not>
|
||||||
|
<antversion atleast="1.7.1"/>
|
||||||
|
</not>
|
||||||
|
</condition>
|
||||||
|
</fail>
|
||||||
|
<property file="nbproject/private/suite-private.properties"/>
|
||||||
|
<property file="nbproject/suite.properties"/>
|
||||||
|
<fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
|
||||||
|
<property file="${suite.dir}/nbproject/private/platform-private.properties"/>
|
||||||
|
<property file="${suite.dir}/nbproject/platform.properties"/>
|
||||||
|
<macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
|
||||||
|
<attribute name="name"/>
|
||||||
|
<attribute name="value"/>
|
||||||
|
<sequential>
|
||||||
|
<property name="@{name}" value="${@{value}}"/>
|
||||||
|
</sequential>
|
||||||
|
</macrodef>
|
||||||
|
<macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
|
||||||
|
<attribute name="property"/>
|
||||||
|
<attribute name="value"/>
|
||||||
|
<sequential>
|
||||||
|
<property name="@{property}" value="@{value}"/>
|
||||||
|
</sequential>
|
||||||
|
</macrodef>
|
||||||
|
<property file="${user.properties.file}"/>
|
||||||
|
<nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
|
||||||
|
<nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
|
||||||
|
<nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
|
||||||
|
<fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
|
||||||
|
<condition>
|
||||||
|
<not>
|
||||||
|
<contains string="${cluster.path.evaluated}" substring="platform"/>
|
||||||
|
</not>
|
||||||
|
</condition>
|
||||||
|
</fail>
|
||||||
|
<import file="${harness.dir}/build.xml"/>
|
||||||
|
</project>
|
8
sdk/jme3-dark-laf/nbproject/genfiles.properties
Normal file
8
sdk/jme3-dark-laf/nbproject/genfiles.properties
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
build.xml.data.CRC32=8f3042a8
|
||||||
|
build.xml.script.CRC32=c15f5ee0
|
||||||
|
build.xml.stylesheet.CRC32=a56c6a5b@2.67.1
|
||||||
|
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||||
|
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||||
|
nbproject/build-impl.xml.data.CRC32=8f3042a8
|
||||||
|
nbproject/build-impl.xml.script.CRC32=4524e469
|
||||||
|
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.67.1
|
8
sdk/jme3-dark-laf/nbproject/project.properties
Normal file
8
sdk/jme3-dark-laf/nbproject/project.properties
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
file.reference.nimrodlf.jar=release/modules/ext/nimrodlf.jar
|
||||||
|
javac.source=1.7
|
||||||
|
javac.compilerargs=-Xlint -Xlint:-serial
|
||||||
|
license.file=../license-jme.txt
|
||||||
|
nbm.homepage=http://www.jmonkeyengine.org
|
||||||
|
nbm.module.author=Charles Anderson, R\u00e9my Bouquet
|
||||||
|
nbm.needs.restart=true
|
||||||
|
spec.version.base=3.1.0
|
49
sdk/jme3-dark-laf/nbproject/project.xml
Normal file
49
sdk/jme3-dark-laf/nbproject/project.xml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||||
|
<type>org.netbeans.modules.apisupport.project</type>
|
||||||
|
<configuration>
|
||||||
|
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
|
||||||
|
<code-name-base>org.jme3.netbeans.plaf.darkmonkey</code-name-base>
|
||||||
|
<suite-component/>
|
||||||
|
<module-dependencies>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.awt</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>7.62.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.modules</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>7.43.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.util</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>8.39.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.windows</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>6.71.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
</module-dependencies>
|
||||||
|
<public-packages/>
|
||||||
|
<class-path-extension>
|
||||||
|
<runtime-relative-path>ext/nimrodlf.jar</runtime-relative-path>
|
||||||
|
<binary-origin>release/modules/ext/nimrodlf.jar</binary-origin>
|
||||||
|
</class-path-extension>
|
||||||
|
</data>
|
||||||
|
</configuration>
|
||||||
|
</project>
|
1
sdk/jme3-dark-laf/nbproject/suite.properties
Normal file
1
sdk/jme3-dark-laf/nbproject/suite.properties
Normal file
@ -0,0 +1 @@
|
|||||||
|
suite.dir=${basedir}/..
|
BIN
sdk/jme3-dark-laf/release/modules/ext/nimrodlf.jar
Normal file
BIN
sdk/jme3-dark-laf/release/modules/ext/nimrodlf.jar
Normal file
Binary file not shown.
@ -0,0 +1,10 @@
|
|||||||
|
OpenIDE-Module-Name=DarkMonkey
|
||||||
|
OpenIDE-Module-Display-Category=Appearance
|
||||||
|
OpenIDE-Module-Short-Description=Contains DarkMonkey theme for the JME3.1 stable release
|
||||||
|
OpenIDE-Module-Long-Description=\
|
||||||
|
<div style="background:#333333;color:#995500; font-family:'Kreon',serif;margin: 3px, #777777;"/> <img src="http://hub.jmonkeyengine.org/uploads/default/1252/91fcc91347189c84.png" style="margin-left:auto;margin-right:auto"/><br/><h1 style="font-weight:bold;text-align:center;">DarkMonkey Theme</h1> <p style="color:#aaaaaa;">This is a Fonts/Colors and LookAndFeel combo that utilizes <a style="color:#999900" href="http://jamesmcfadden.co.uk/netbeans-obsidian-theme/" target="new">James McFadden's Obsidian Fonts/Colors</a>and <a style="color:#999900" href="http://nilogonzalez.es/nimrodlf/download-en.html" target="new">Nilo Gonzalez's Nimrod LookAndFeel</a> which isbased on the Metal LookAndFeel. \
|
||||||
|
This module just checks and sees if the user already has the components, and if not, installs the theme and activates a few options:\n</p><UL> <LI> under Tools - Options - Appearance - LookAndFeel it will have "DarkMonkey" , available.\
|
||||||
|
</LI><LI> It also adds a Fonts/Colors Profile called "Dark Monkey".\
|
||||||
|
</LI></UL> <p style="color:#aaaaaa;"> We hope you like it!\
|
||||||
|
</p> For More Information visit: <a style="color:#999900" href="http://hub.jmonkeyengine.org/t/darkmonkey-dev-blog/31566" target="new"> DarkMonkey Development Thread </a> </div>
|
||||||
|
|
@ -0,0 +1,288 @@
|
|||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package org.jme3.netbeans.plaf.darkmonkey;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.FontFormatException;
|
||||||
|
import java.awt.GraphicsEnvironment;
|
||||||
|
import java.awt.image.BandedSampleModel;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.DataBuffer;
|
||||||
|
import java.awt.image.DataBufferFloat;
|
||||||
|
import java.awt.image.Raster;
|
||||||
|
import java.awt.image.WritableRaster;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* I figured it would be best to have a Utilities type class to store the
|
||||||
|
* Methods I commonly use. Resources, registering stuff, resolving, transforming
|
||||||
|
* and so on...
|
||||||
|
*
|
||||||
|
* @author charles
|
||||||
|
*/
|
||||||
|
public class DMUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* This method loads a picture from a relative path string. The relative
|
||||||
|
* path's root directory is understood to be inside of a jar... and in
|
||||||
|
* relation to the package of the referring Object instance.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* For example: if the object is an instance of
|
||||||
|
* org.jme3.netbeans.plaf.darkmonkey.DarkMonkeyIconFactory.class, and the
|
||||||
|
* string is "icons/MyCloseIcon.png", it will attempt to load
|
||||||
|
* org/jme3/netbeans/plaf/darkmonkey/icons/MyCloseIcon.png from
|
||||||
|
* DarkMonkeyIconFactory's jar file.
|
||||||
|
* </p>
|
||||||
|
* It will print a stack trace if you get the relative path wrong.
|
||||||
|
*
|
||||||
|
* @param refObj - Reference Object(Object) - meant for a standard 'this'
|
||||||
|
* call, though any Instantiated class can be used. This is part of a
|
||||||
|
* workaround for Netbean's multiple class loader system.
|
||||||
|
* @param fileName - File Name(String) - the path to an image relative to
|
||||||
|
* the Reference Object's location in a jar file.
|
||||||
|
* @return BufferedImage - Freshly converted from the image file found at
|
||||||
|
* the location.
|
||||||
|
*/
|
||||||
|
public static BufferedImage loadImagefromJar(Object refObj, String fileName) {
|
||||||
|
BufferedImage bi = null;
|
||||||
|
try {
|
||||||
|
bi = ImageIO.read(refObj.getClass().getResourceAsStream(fileName));
|
||||||
|
} catch (IOException e) {
|
||||||
|
// File is probably referenced wrong or "mispleled"... lol.
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return bi;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**<p>
|
||||||
|
* This utility method is designed to Load OpenType/TrueType fonts into the
|
||||||
|
* current Runtime Environment without installing them to the OS. It takes
|
||||||
|
* the base path of the refObj and loads font files located relative to it.
|
||||||
|
* It checks to make sure that the fonts are not already installed in the system
|
||||||
|
* OS, first. If they are already installed, it does nothing more.
|
||||||
|
* </p><p>
|
||||||
|
* Typical Usage - DMUtils.loadFontsFromJar(this, someFontFiles);<br/>
|
||||||
|
* and then someFontFiles[0] would contain something like "myfonts/DisFontPlain.ttf"
|
||||||
|
* </p>
|
||||||
|
* @param refObj - Object - Usually just a *this*, but useful for a multiClassLoader
|
||||||
|
* type situation.
|
||||||
|
* @param fileNames - String[] - an array of {relative path + filename} strings for loading
|
||||||
|
* TrueType or OpenType fonts
|
||||||
|
*/
|
||||||
|
public static void loadFontsFromJar(Object refObj, String[] fileNames) {
|
||||||
|
//first, we grab ahold of what all fonts are in the JRE's system
|
||||||
|
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||||
|
Font[] fontsListing = ge.getAllFonts();
|
||||||
|
|
||||||
|
/* // this can be uncommented if you want to see all the fonts in the JRE
|
||||||
|
for (Font fontInListing : fontsListing) {
|
||||||
|
System.out.println(fontInListing.getFontName() + " : " + fontInListing.getFamily());
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Then we go and process the incoming streams
|
||||||
|
InputStream inStream;
|
||||||
|
Font checkFont;
|
||||||
|
try {
|
||||||
|
toNextFileName:
|
||||||
|
for (String fileName : fileNames) {// load up the fileName to process...
|
||||||
|
checkFont = Font.createFont(Font.TRUETYPE_FONT, refObj.getClass().getResourceAsStream(fileName));
|
||||||
|
for (Font fontInListing : fontsListing) {// check if it's already on the list
|
||||||
|
if (fontInListing.getFontName().equals(checkFont.getFontName())) {
|
||||||
|
continue toNextFileName; //head to the next file if we find it...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ge.registerFont(checkFont);// and register it if we don't....
|
||||||
|
}
|
||||||
|
} catch (FontFormatException | IOException e) {
|
||||||
|
// a File is probably referenced wrong or "mispleled"... lol.
|
||||||
|
// you can alternativly send a single String for debugging purposes
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method transforms the inputed BufferedImage by the supplied Color[].
|
||||||
|
* The behavior treats the Color[] as Ordered Passes A, R, G, B for .length
|
||||||
|
* 4 or more. It treats it as Ordered Passes R, G, B only for .length 3 or
|
||||||
|
* less.
|
||||||
|
*
|
||||||
|
* @param colorSet Color[] - that processes [1..4] up to four palette
|
||||||
|
* colors. 3 or less uses R,G,B passes only. 4 uses A,R,G,B and ignores
|
||||||
|
* anything more.
|
||||||
|
* @param clearToColorRequested - Color - A color to Blend with the First
|
||||||
|
* Translucent Pass - Optional
|
||||||
|
* @param argbMappedBufferedImage - BufferedImage - The image containing
|
||||||
|
* Channels as Alpha for the Palette
|
||||||
|
* @return BufferedImage - a new BufferedImage() transformed by the palette.
|
||||||
|
*/
|
||||||
|
public static BufferedImage paletteSwapARGB8(Color[] colorSet, Color clearToColorRequested, BufferedImage argbMappedBufferedImage) {
|
||||||
|
if (argbMappedBufferedImage == null) {
|
||||||
|
return null; //S.E.P.
|
||||||
|
}
|
||||||
|
final Color BLACK_NO_ALPHA = new Color(0x00000000);
|
||||||
|
final Color WHITE_NO_ALPHA = new Color(0x00FFFFFF);
|
||||||
|
final int ALPHA = 3; // this is some static mapping for...
|
||||||
|
final int RED = 0; // readability in the following...
|
||||||
|
final int GREEN = 1; // Magic code section of band processing.
|
||||||
|
final int BLUE = 2;
|
||||||
|
final int[] orderedBands = {ALPHA, RED, GREEN, BLUE};
|
||||||
|
//first we prep a cmap with blank passes and
|
||||||
|
Color[] cMap = {BLACK_NO_ALPHA, BLACK_NO_ALPHA, BLACK_NO_ALPHA, BLACK_NO_ALPHA};
|
||||||
|
boolean clearColorFound = false;
|
||||||
|
Color clearToColor = BLACK_NO_ALPHA;
|
||||||
|
if (colorSet != null) { //if we get a null colorSet... it's all mapped to clear.
|
||||||
|
if (colorSet.length > cMap.length) { // if colorSet is more than 4, we only proces up to 4
|
||||||
|
for (int i = 0; i < cMap.length; i++) {
|
||||||
|
if (colorSet[i] != null) {
|
||||||
|
if (!clearColorFound) {
|
||||||
|
clearColorFound = true;
|
||||||
|
clearToColor = colorSet[i];
|
||||||
|
}
|
||||||
|
cMap[orderedBands[i]] = colorSet[i]; // and finally, if any of the Colors are null... invisible pass...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int startOffset = 0;
|
||||||
|
if (colorSet.length < 4) // if less than standard size, assume RGB model
|
||||||
|
{
|
||||||
|
startOffset++; // and "blank" the alpha color pass.
|
||||||
|
}
|
||||||
|
for (int i = 0; i < colorSet.length; i++) {
|
||||||
|
if (colorSet[i] != null) {
|
||||||
|
if (!clearColorFound) {
|
||||||
|
clearColorFound = true;
|
||||||
|
clearToColor = colorSet[i];
|
||||||
|
}
|
||||||
|
cMap[orderedBands[i + startOffset]] = colorSet[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// finally adjust the clearToColor if one was requested
|
||||||
|
if (clearToColorRequested != null) {
|
||||||
|
clearToColor = clearToColorRequested;
|
||||||
|
}
|
||||||
|
//Next we'll switch to Rasters to easily handle floating point precision
|
||||||
|
// operations upon the individual channels.
|
||||||
|
|
||||||
|
WritableRaster outRaster, inRaster;
|
||||||
|
int w = argbMappedBufferedImage.getWidth();
|
||||||
|
int h = argbMappedBufferedImage.getHeight();
|
||||||
|
BandedSampleModel inSM = new BandedSampleModel(DataBuffer.TYPE_FLOAT, w, h, 4);
|
||||||
|
DataBufferFloat inDBF = new DataBufferFloat((w * h), 4);//4 banks, and total size
|
||||||
|
inRaster = Raster.createWritableRaster(inSM, inDBF, null); // that null just means point 0, 0 (top/left)
|
||||||
|
outRaster = inRaster.createCompatibleWritableRaster(w, h);
|
||||||
|
float[] cMaptoFlArray, outColortoFlArray, clearColortoFlArray;
|
||||||
|
float inBandAsAlpha;
|
||||||
|
Color paletteColor;
|
||||||
|
// now we convert from W/E the argbMappedBufferedImage's format to
|
||||||
|
// our normalized [0f..1f] RGBA raster
|
||||||
|
outColortoFlArray = new float[]{0f, 0f, 0f, 0f}; // or new float[4]... w/e
|
||||||
|
clearColortoFlArray = clearToColor.getRGBComponents(new float[4]);
|
||||||
|
clearColortoFlArray[ALPHA] = 0f;
|
||||||
|
for (int y = 0; y < h; y++) {
|
||||||
|
for (int x = 0; x < w; x++) {
|
||||||
|
int packedPixel = argbMappedBufferedImage.getRGB(x, y);
|
||||||
|
int testing;
|
||||||
|
float ftesting;
|
||||||
|
//outColortoFlArray[ALPHA] = (((packedPixel >> 24) & 0xFF) / 255);
|
||||||
|
testing = packedPixel;
|
||||||
|
testing = testing >> 24;
|
||||||
|
testing = testing & 0xFF;
|
||||||
|
ftesting = testing;
|
||||||
|
ftesting = ftesting / 255;
|
||||||
|
outColortoFlArray[ALPHA] = ftesting;
|
||||||
|
|
||||||
|
//outColortoFlArray[RED] = (((packedPixel >> 16) & 0xFF) / 255);
|
||||||
|
testing = packedPixel;
|
||||||
|
testing = testing >> 16;
|
||||||
|
testing = testing & 0xFF;
|
||||||
|
ftesting = testing;
|
||||||
|
ftesting = ftesting / 255;
|
||||||
|
outColortoFlArray[RED] = ftesting;
|
||||||
|
|
||||||
|
//outColortoFlArray[GREEN] = (((packedPixel >> 8) & 0xFF) / 255);
|
||||||
|
testing = packedPixel;
|
||||||
|
testing = testing >> 8;
|
||||||
|
testing = testing & 0xFF;
|
||||||
|
ftesting = testing;
|
||||||
|
ftesting = ftesting / 255;
|
||||||
|
outColortoFlArray[GREEN] = ftesting;
|
||||||
|
|
||||||
|
//outColortoFlArray[BLUE] = ( (packedPixel & 0xFF) / 255);
|
||||||
|
testing = packedPixel;
|
||||||
|
testing = testing & 0xFF;
|
||||||
|
ftesting = testing;
|
||||||
|
ftesting = ftesting / 255;
|
||||||
|
outColortoFlArray[BLUE] = ftesting;
|
||||||
|
|
||||||
|
inRaster.setPixel(x, y, outColortoFlArray);
|
||||||
|
outRaster.setPixel(x, y, clearColortoFlArray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// next, we process all bands in order - a "band" being one channel of A,R,G,B.
|
||||||
|
// as each band is processed the outRaster keeps getting "resampled" to apply
|
||||||
|
// the next band properly. all values are considered normalized [0f..1f]
|
||||||
|
for (int band : orderedBands) {
|
||||||
|
paletteColor = cMap[band];
|
||||||
|
cMaptoFlArray = paletteColor.getRGBComponents(new float[4]);// this nullifies translucency
|
||||||
|
if (paletteColor != BLACK_NO_ALPHA) {
|
||||||
|
for (int y = 0; y < h; y++) {
|
||||||
|
for (int x = 0; x < w; x++) {
|
||||||
|
//inBandAsAlpha = inRaster.getSample(x, y, band);
|
||||||
|
inBandAsAlpha = inRaster.getSampleFloat(x, y, band);
|
||||||
|
outColortoFlArray = outRaster.getPixel(x, y, new float[4]);
|
||||||
|
outColortoFlArray[RED] = (outColortoFlArray[RED]
|
||||||
|
* (1f - (inBandAsAlpha * cMaptoFlArray[ALPHA])))
|
||||||
|
+ (cMaptoFlArray[RED] * (inBandAsAlpha * cMaptoFlArray[ALPHA]));
|
||||||
|
outColortoFlArray[GREEN] = (outColortoFlArray[GREEN]
|
||||||
|
* (1f - (inBandAsAlpha * cMaptoFlArray[ALPHA])))
|
||||||
|
+ (cMaptoFlArray[GREEN] * (inBandAsAlpha * cMaptoFlArray[ALPHA]));
|
||||||
|
outColortoFlArray[BLUE] = (outColortoFlArray[BLUE]
|
||||||
|
* (1f - (inBandAsAlpha * cMaptoFlArray[ALPHA])))
|
||||||
|
+ (cMaptoFlArray[BLUE] * (inBandAsAlpha * cMaptoFlArray[ALPHA]));
|
||||||
|
|
||||||
|
outColortoFlArray[ALPHA] = (outColortoFlArray[ALPHA]
|
||||||
|
* (1f - (inBandAsAlpha * cMaptoFlArray[ALPHA])))
|
||||||
|
+ (cMaptoFlArray[ALPHA] * (inBandAsAlpha * cMaptoFlArray[ALPHA]));
|
||||||
|
|
||||||
|
outRaster.setPixel(x, y, outColortoFlArray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//then we convert n' ship
|
||||||
|
BufferedImage returnBI = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
for (int y = 0; y < h; y++) {
|
||||||
|
for (int x = 0; x < w; x++) {
|
||||||
|
outColortoFlArray = outRaster.getPixel(x, y, new float[4]);
|
||||||
|
int packedColor = ((int) (outColortoFlArray[ALPHA] * 255f) << 24)
|
||||||
|
| ((int) (outColortoFlArray[RED] * 255f) << 16)
|
||||||
|
| ((int) (outColortoFlArray[GREEN] * 255f) << 8)
|
||||||
|
| ((int) (outColortoFlArray[BLUE] * 255f));
|
||||||
|
returnBI.setRGB(x, y, packedColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnBI;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BufferedImage paletteSwapARGB8(Color[] colorSet, BufferedImage argbMappedBufferedImage) {
|
||||||
|
|
||||||
|
return paletteSwapARGB8(colorSet, null, argbMappedBufferedImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
nimrodlf.p1=#77411D
|
||||||
|
nimrodlf.p2=#9E5F28
|
||||||
|
nimrodlf.p3=#948519
|
||||||
|
nimrodlf.s1=#303030
|
||||||
|
nimrodlf.s2=#3A3A3A
|
||||||
|
nimrodlf.s3=#515151
|
||||||
|
nimrodlf.w=#262626
|
||||||
|
nimrodlf.b=#E8EAE0
|
||||||
|
nimrodlf.menuOpacity=219
|
||||||
|
nimrodlf.frameOpacity=180
|
||||||
|
nimrodlf.font=DejaVu Sans Condensed-BOLD-12
|
@ -0,0 +1,153 @@
|
|||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package org.jme3.netbeans.plaf.darkmonkey;
|
||||||
|
|
||||||
|
import com.nilo.plaf.nimrod.NimRODIconFactory;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Image;
|
||||||
|
import java.awt.image.BandedSampleModel;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.DataBuffer;
|
||||||
|
import java.awt.image.DataBufferFloat;
|
||||||
|
import java.awt.image.Raster;
|
||||||
|
import java.awt.image.WritableRaster;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import javax.swing.Icon;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.plaf.UIResource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides for overrides on the system Icons from the
|
||||||
|
* NimROD look and feel
|
||||||
|
* @author charles
|
||||||
|
*/
|
||||||
|
public class DarkMonkeyIconFactory extends NimRODIconFactory{
|
||||||
|
private static Icon treeCollapsedIcon;
|
||||||
|
private static Icon treeExpandedIcon;
|
||||||
|
|
||||||
|
public static Icon getTreeCollapsedIcon(){
|
||||||
|
if(treeCollapsedIcon == null){
|
||||||
|
treeCollapsedIcon = new TreeCollapsedIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
return treeCollapsedIcon;
|
||||||
|
}
|
||||||
|
public static Icon getTreeExpandedIcon(){
|
||||||
|
if(treeExpandedIcon == null){
|
||||||
|
treeExpandedIcon = new TreeExpandedIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
return treeExpandedIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class TreeCollapsedIcon implements Icon, UIResource, Serializable{
|
||||||
|
private int w, h;
|
||||||
|
ImageIcon preProcessed;
|
||||||
|
{
|
||||||
|
w = 18;
|
||||||
|
h = 18;
|
||||||
|
preProcessed = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TreeCollapsedIcon(){ //maybe THIS is all I need, eh?
|
||||||
|
w = 18;
|
||||||
|
h = 18;
|
||||||
|
preProcessed = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void paintIcon(Component c, Graphics g, int x, int y) {
|
||||||
|
if(preProcessed != null){
|
||||||
|
preProcessed.paintIcon(c, g, x, y);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//process for first time, unless this gets "uninitialized" by
|
||||||
|
// UIResource calls;
|
||||||
|
BufferedImage bi = DMUtils.loadImagefromJar(this, "icons/nehonC2.png");
|
||||||
|
// start the experiments!
|
||||||
|
|
||||||
|
Color[] normColorSet = {null, DarkMonkeyLookAndFeel.getWhite(),
|
||||||
|
null, DarkMonkeyLookAndFeel.getPrimaryControl()};
|
||||||
|
bi = DMUtils.paletteSwapARGB8(normColorSet, bi);
|
||||||
|
// end experiment, back to old code
|
||||||
|
ImageIcon ii = new ImageIcon(bi);
|
||||||
|
Image scaled = ii.getImage();
|
||||||
|
ImageIcon preProcess = new ImageIcon(scaled.getScaledInstance(w, h, Image.SCALE_SMOOTH));
|
||||||
|
preProcess.paintIcon(c, g, x, y);
|
||||||
|
preProcessed = preProcess;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIconWidth() {
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIconHeight() {
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TreeExpandedIcon implements Icon, UIResource, Serializable{
|
||||||
|
private int w, h;
|
||||||
|
ImageIcon preProcessed;
|
||||||
|
{
|
||||||
|
w = 18;
|
||||||
|
h = 18;
|
||||||
|
preProcessed = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public TreeExpandedIcon(){ //maybe THIS is all I need, eh?
|
||||||
|
w = 18;
|
||||||
|
h = 18;
|
||||||
|
preProcessed = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void paintIcon(Component c, Graphics g, int x, int y) {
|
||||||
|
if(preProcessed != null){
|
||||||
|
preProcessed.paintIcon(c, g, x, y);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//process for first time, unless this gets "uninitialized" by
|
||||||
|
// UIResource calls;
|
||||||
|
|
||||||
|
BufferedImage bi = DMUtils.loadImagefromJar(this, "icons/nehonE2.png");
|
||||||
|
Color[] normColorSet = { DarkMonkeyLookAndFeel.getWhite(),
|
||||||
|
null, DarkMonkeyLookAndFeel.getPrimaryControl()};
|
||||||
|
bi = DMUtils.paletteSwapARGB8(normColorSet, bi);
|
||||||
|
|
||||||
|
ImageIcon ii = new ImageIcon(bi);
|
||||||
|
Image scaled = ii.getImage();
|
||||||
|
|
||||||
|
ImageIcon preProcess = new ImageIcon(scaled.getScaledInstance(w, h, Image.SCALE_DEFAULT));
|
||||||
|
|
||||||
|
preProcess.paintIcon(c, g, x, y);
|
||||||
|
preProcessed = preProcess;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIconWidth() {
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIconHeight() {
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package org.jme3.netbeans.plaf.darkmonkey;
|
||||||
|
|
||||||
|
import com.nilo.plaf.nimrod.NimRODTheme;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.UIDefaults;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The DarkMonkey look and feel class Extends the Nimrod LAF, which in turn,
|
||||||
|
* extends Metal. The version of Nimrod used is 1.2b obtained from: <br/>
|
||||||
|
* <a src="http://nilogonzalez.es/nimrodlf/download-en.html">
|
||||||
|
* http://nilogonzalez.es/nimrodlf/download-en.html</a>
|
||||||
|
* <p> A copy of the jar and source used for this project is in the ext/ folder.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author Charles Anderson
|
||||||
|
*/
|
||||||
|
public class DarkMonkeyLookAndFeel extends com.nilo.plaf.nimrod.NimRODLookAndFeel{
|
||||||
|
|
||||||
|
public static final String dmLAFDefault = "DarkMonkey.theme";
|
||||||
|
protected static NimRODTheme nrTheme = new NimRODTheme();
|
||||||
|
|
||||||
|
public DarkMonkeyLookAndFeel(){
|
||||||
|
super();
|
||||||
|
// Todo: replace following code with proper loading
|
||||||
|
// From DarkMonkey.theme
|
||||||
|
NimRODTheme nt = new NimRODTheme();
|
||||||
|
|
||||||
|
nt.setBlack(Color.decode("#E8EAE0"));
|
||||||
|
nt.setWhite(Color.decode("#262626"));
|
||||||
|
nt.setPrimary1(Color.decode("#77411D"));
|
||||||
|
nt.setPrimary2(Color.decode("#9E5F28"));
|
||||||
|
nt.setPrimary3(Color.decode("#948519"));
|
||||||
|
nt.setSecondary1(Color.decode("#303030"));
|
||||||
|
nt.setSecondary2(Color.decode("#3A3A3A"));
|
||||||
|
nt.setSecondary3(Color.decode("#515151"));
|
||||||
|
nt.setFrameOpacity(180);
|
||||||
|
nt.setMenuOpacity(219);
|
||||||
|
nt.setFont(Font.decode("DejaVu Sans Condensed-PLAIN-12"));
|
||||||
|
|
||||||
|
setCurrentTheme(nt);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method override, getID() returns the String "DarkMonkey" for
|
||||||
|
* registering this Look And Feel with the UImanager.
|
||||||
|
* @return String "DarkMonkey"
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getID() {
|
||||||
|
return "DarkMonkey";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method override, getName() returns the String "DarkMonkey" for
|
||||||
|
* its Look and Feel Name. I don't know that this is important, but is
|
||||||
|
* overridden anyway, for completion.
|
||||||
|
* @return String "DarkMonkey"
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "DarkMonkey";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method override, getDescription() returns the String
|
||||||
|
* "Look and Feel DarkMonkey - 2015, based on NimROD 2007" for
|
||||||
|
* instances of future programming that might use it as a tool tip or
|
||||||
|
* small descriptor in their Look and Feel modules.
|
||||||
|
* @return String "Look and Feel DarkMonkey - 2015, based on NimROD 2007"
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Look and Feel DarkMonkey - 2015, based on NimROD 2007";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initClassDefaults( UIDefaults table) {
|
||||||
|
super.initClassDefaults( table);
|
||||||
|
/*
|
||||||
|
for( Enumeration en = table.keys(); en.hasMoreElements(); ) {
|
||||||
|
System.out.println( "[" + en.nextElement() + "]");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initComponentDefaults( UIDefaults table) {
|
||||||
|
super.initComponentDefaults( table);
|
||||||
|
|
||||||
|
table.put("Tree.collapsedIcon", DarkMonkeyIconFactory.getTreeCollapsedIcon());
|
||||||
|
table.put("Tree.expandedIcon", DarkMonkeyIconFactory.getTreeExpandedIcon());
|
||||||
|
//
|
||||||
|
/*
|
||||||
|
for( Enumeration en = table.keys(); en.hasMoreElements(); ) {
|
||||||
|
System.out.println( "[" + en.nextElement() + "]");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user