* XMLImporter can now read directly from file
* XML representation of savable now writes version (no reading yet) * Initial attempt of fixing "frozen after app restart" bug * Fixed NVIDIA shininess bug (!!!) - No longer need to set m_Shininess on materials! git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7734 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
7ea8687e4a
commit
a43e52a384
@ -77,6 +77,9 @@ float lightComputeDiffuse(in vec3 norm, in vec3 lightdir, in vec3 viewdir){
|
||||
}
|
||||
|
||||
float lightComputeSpecular(in vec3 norm, in vec3 viewdir, in vec3 lightdir, in float shiny){
|
||||
if (shiny <= 1.0){
|
||||
return 0.0;
|
||||
}
|
||||
#ifdef LOW_QUALITY
|
||||
// Blinn-Phong
|
||||
// Note: preferably, H should be computed in the vertex shader
|
||||
@ -102,9 +105,6 @@ vec2 computeLighting(in vec3 wvPos, in vec3 wvNorm, in vec3 wvViewDir, in vec3 w
|
||||
float diffuseFactor = lightComputeDiffuse(wvNorm, wvLightDir, wvViewDir);
|
||||
float specularFactor = lightComputeSpecular(wvNorm, wvViewDir, wvLightDir, m_Shininess);
|
||||
|
||||
// if shininess is == 0, spec == 0, if shininess > 1, spec == 1
|
||||
specularFactor *= min(1.0, m_Shininess);
|
||||
|
||||
#ifdef HQ_ATTENUATION
|
||||
float att = clamp(1.0 - g_LightPosition.w * length(lightVec), 0.0, 1.0);
|
||||
#else
|
||||
|
@ -350,19 +350,7 @@ public class BinaryExporter implements JmeExporter {
|
||||
BinaryClassObject bco = new BinaryClassObject();
|
||||
bco.alias = generateTag();
|
||||
bco.nameFields = new HashMap<String, BinaryClassField>();
|
||||
|
||||
ArrayList<Integer> versionList = new ArrayList<Integer>();
|
||||
Class superclass = clazz;
|
||||
do {
|
||||
versionList.add(SavableClassUtil.getSavableVersion(superclass));
|
||||
superclass = superclass.getSuperclass();
|
||||
} while (superclass != null && SavableClassUtil.isImplementingSavable(superclass));
|
||||
|
||||
int[] versions = new int[versionList.size()];
|
||||
for (int i = 0; i < versionList.size(); i++){
|
||||
versions[i] = versionList.get(i);
|
||||
}
|
||||
bco.classHierarchyVersions = versions;
|
||||
bco.classHierarchyVersions = SavableClassUtil.getSavableVersions(clazz);
|
||||
|
||||
classes.put(clazz.getName(), bco);
|
||||
|
||||
|
@ -42,9 +42,8 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.jme3.material.MatParamTexture;
|
||||
import com.jme3.scene.Spatial;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
@ -95,6 +94,21 @@ public class SavableClassUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static int[] getSavableVersions(Class<? extends Savable> clazz) throws IOException{
|
||||
ArrayList<Integer> versionList = new ArrayList<Integer>();
|
||||
Class superclass = clazz;
|
||||
do {
|
||||
versionList.add(getSavableVersion(superclass));
|
||||
superclass = superclass.getSuperclass();
|
||||
} while (superclass != null && SavableClassUtil.isImplementingSavable(superclass));
|
||||
|
||||
int[] versions = new int[versionList.size()];
|
||||
for (int i = 0; i < versionList.size(); i++){
|
||||
versions[i] = versionList.get(i);
|
||||
}
|
||||
return versions;
|
||||
}
|
||||
|
||||
public static int getSavableVersion(Class<? extends Savable> clazz) throws IOException{
|
||||
try {
|
||||
Field field = clazz.getField("SAVABLE_VERSION");
|
||||
|
@ -142,7 +142,7 @@ public abstract class LwjglAbstractDisplay extends LwjglContext implements Runna
|
||||
throw new IllegalStateException();
|
||||
|
||||
listener.update();
|
||||
|
||||
|
||||
// All this does is call swap buffers
|
||||
// If the canvas is not active, there's no need to waste time
|
||||
// doing that ..
|
||||
|
@ -32,7 +32,6 @@
|
||||
|
||||
package com.jme3.system.lwjgl;
|
||||
|
||||
import com.jme3.input.TouchInput;
|
||||
import com.jme3.system.JmeContext.Type;
|
||||
import org.lwjgl.LWJGLException;
|
||||
import org.lwjgl.opengl.Display;
|
||||
@ -110,14 +109,21 @@ public class LwjglDisplay extends LwjglAbstractDisplay {
|
||||
pixelFormat = pf;
|
||||
|
||||
Display.setTitle(settings.getTitle());
|
||||
if (displayMode != null)
|
||||
Display.setDisplayMode(displayMode);
|
||||
if (displayMode != null){
|
||||
if (settings.isFullscreen()){
|
||||
Display.setDisplayModeAndFullscreen(displayMode);
|
||||
}else{
|
||||
Display.setFullscreen(false);
|
||||
Display.setDisplayMode(displayMode);
|
||||
}
|
||||
}else{
|
||||
Display.setFullscreen(settings.isFullscreen());
|
||||
}
|
||||
|
||||
if (settings.getIcons() != null) {
|
||||
Display.setIcon(imagesToByteBuffers(settings.getIcons()));
|
||||
}
|
||||
|
||||
Display.setFullscreen(settings.isFullscreen());
|
||||
|
||||
Display.setVSyncEnabled(settings.isVSync());
|
||||
|
||||
if (!created.get() || pixelFormatChanged){
|
||||
|
@ -36,6 +36,7 @@ import com.jme3.export.JmeExporter;
|
||||
import com.jme3.export.OutputCapsule;
|
||||
import com.jme3.export.Savable;
|
||||
import com.jme3.export.Savable;
|
||||
import com.jme3.export.SavableClassUtil;
|
||||
import com.jme3.util.IntMap;
|
||||
import com.jme3.util.IntMap.Entry;
|
||||
import java.io.IOException;
|
||||
@ -484,6 +485,18 @@ public class DOMOutputCapsule implements OutputCapsule {
|
||||
el.setAttribute("ref", refID);
|
||||
} else {
|
||||
el = appendElement(name);
|
||||
|
||||
// jME3 NEW: Append version number(s)
|
||||
int[] versions = SavableClassUtil.getSavableVersions(object.getClass());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < versions.length; i++){
|
||||
sb.append(versions[i]);
|
||||
if (i != versions.length - 1){
|
||||
sb.append(", ");
|
||||
}
|
||||
}
|
||||
el.setAttribute("savable_version", sb.toString());
|
||||
|
||||
writtenSavables.put(object, el);
|
||||
object.write(exporter);
|
||||
}
|
||||
|
@ -63,8 +63,8 @@ public class XMLExporter implements JmeExporter{
|
||||
|
||||
public boolean save(Savable object, OutputStream f) throws IOException {
|
||||
try {
|
||||
//Initialize Document when saving so we don't retain state of previous exports
|
||||
this.domOut = new DOMOutputCapsule(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(), this);
|
||||
//Initialize Document when saving so we don't retain state of previous exports
|
||||
this.domOut = new DOMOutputCapsule(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(), this);
|
||||
domOut.write(object, object.getClass().getName(), null);
|
||||
DOMSerializer serializer = new DOMSerializer();
|
||||
serializer.serialize(domOut.getDoc(), f);
|
||||
|
@ -37,6 +37,8 @@ import com.jme3.asset.AssetManager;
|
||||
import com.jme3.export.JmeImporter;
|
||||
import com.jme3.export.InputCapsule;
|
||||
import com.jme3.export.Savable;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
@ -56,7 +58,6 @@ public class XMLImporter implements JmeImporter {
|
||||
public XMLImporter() {
|
||||
}
|
||||
|
||||
// TODO: .......
|
||||
public int getFormatVersion() {
|
||||
return 0;
|
||||
}
|
||||
@ -76,6 +77,17 @@ public class XMLImporter implements JmeImporter {
|
||||
in.close();
|
||||
return obj;
|
||||
}
|
||||
|
||||
public Savable load(File f) throws IOException {
|
||||
FileInputStream fis = null;
|
||||
try {
|
||||
fis = new FileInputStream(f);
|
||||
Savable sav = load(fis);
|
||||
return sav;
|
||||
} finally {
|
||||
if (fis != null) fis.close();
|
||||
}
|
||||
}
|
||||
|
||||
public Savable load(InputStream f) throws IOException {
|
||||
try {
|
||||
|
Loading…
x
Reference in New Issue
Block a user