Fixed uploading of all shader stages
This commit is contained in:
parent
46a48f466d
commit
1ad8ff154c
@ -393,6 +393,7 @@ public class DesktopAssetManager implements AssetManager {
|
||||
public Shader loadShader(ShaderKey key){
|
||||
// cache abuse in method
|
||||
// that doesn't use loaders/locators
|
||||
System.out.println();
|
||||
AssetCache cache = handler.getCache(SimpleAssetCache.class);
|
||||
Shader shader = (Shader) cache.getFromCache(key);
|
||||
if (shader == null){
|
||||
@ -402,17 +403,11 @@ public class DesktopAssetManager implements AssetManager {
|
||||
}
|
||||
shader = shaderGenerator.generateShader();
|
||||
} else {
|
||||
|
||||
String vertName = key.getVertName();
|
||||
String fragName = key.getFragName();
|
||||
|
||||
String vertSource = (String) loadAsset(new AssetKey(vertName));
|
||||
String fragSource = (String) loadAsset(new AssetKey(fragName));
|
||||
|
||||
shader = new Shader();
|
||||
shader.initialize();
|
||||
shader.addSource(Shader.ShaderType.Vertex, vertName, vertSource, key.getDefines().getCompiled(), key.getVertexShaderLanguage());
|
||||
shader.addSource(Shader.ShaderType.Fragment, fragName, fragSource, key.getDefines().getCompiled(), key.getFragmentShaderLanguage());
|
||||
for (Shader.ShaderType shaderType : key.getUsedShaderPrograms()) {
|
||||
shader.addSource(shaderType,key.getShaderProgramName(shaderType),(String) loadAsset(new AssetKey(key.getShaderProgramName(shaderType))),key.getDefines().getCompiled(),key.getShaderProgramLanguage(shaderType));
|
||||
}
|
||||
}
|
||||
|
||||
cache.addToCache(key, shader);
|
||||
|
@ -33,6 +33,7 @@ package com.jme3.asset.cache;
|
||||
|
||||
import com.jme3.asset.AssetKey;
|
||||
import com.jme3.asset.CloneableSmartAsset;
|
||||
|
||||
import java.lang.ref.PhantomReference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
@ -123,7 +124,6 @@ public class WeakRefCloneAssetCache implements AssetCache {
|
||||
public <T> void addToCache(AssetKey<T> originalKey, T obj) {
|
||||
// Make room for new asset
|
||||
removeCollectedAssets();
|
||||
|
||||
CloneableSmartAsset asset = (CloneableSmartAsset) obj;
|
||||
|
||||
// No circular references, since the original asset is
|
||||
|
@ -38,6 +38,7 @@ import com.jme3.export.JmeImporter;
|
||||
import com.jme3.export.OutputCapsule;
|
||||
import java.io.IOException;
|
||||
import java.util.EnumMap;
|
||||
import java.util.Set;
|
||||
|
||||
public class ShaderKey extends AssetKey<Shader> {
|
||||
|
||||
@ -141,6 +142,18 @@ public class ShaderKey extends AssetKey<Shader> {
|
||||
this.usesShaderNodes = usesShaderNodes;
|
||||
}
|
||||
|
||||
public Set<Shader.ShaderType> getUsedShaderPrograms(){
|
||||
return shaderName.keySet();
|
||||
}
|
||||
|
||||
public String getShaderProgramLanguage(Shader.ShaderType shaderType){
|
||||
return shaderLanguage.get(shaderType);
|
||||
}
|
||||
|
||||
public String getShaderProgramName(Shader.ShaderType shaderType){
|
||||
return shaderName.get(shaderType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JmeExporter ex) throws IOException{
|
||||
super.write(ex);
|
||||
|
@ -49,6 +49,7 @@ import com.jme3.texture.image.ColorSpace;
|
||||
import com.jme3.util.PlaceholderAssets;
|
||||
import com.jme3.util.blockparser.BlockLanguageParser;
|
||||
import com.jme3.util.blockparser.Statement;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.EnumMap;
|
||||
@ -410,7 +411,10 @@ public class J3MLoader implements AssetLoader {
|
||||
private void readTechniqueStatement(Statement statement) throws IOException {
|
||||
String[] split = statement.getLine().split("[ \\{]");
|
||||
if (split[0].equals("VertexShader") ||
|
||||
split[0].equals("FragmentShader")){
|
||||
split[0].equals("FragmentShader") ||
|
||||
split[0].equals("GeometryShader") ||
|
||||
split[0].equals("TesselationControlShader") ||
|
||||
split[0].equals("TesselationEvaluationShader")) {
|
||||
readShaderStatement(statement.getLine());
|
||||
} else if (split[0].equals("LightMode")) {
|
||||
readLightMode(statement.getLine());
|
||||
|
@ -0,0 +1,3 @@
|
||||
void main(){
|
||||
gl_FragColor=vec4(1.0,0.0,1.0,0.5);
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
layout (points) in;
|
||||
layout (line_strip) out;
|
||||
layout (max_vertices = 11) out;
|
||||
|
||||
uniform mat4 g_WorldViewProjectionMatrix;
|
||||
const float PI = 3.1415926;
|
||||
void main(){
|
||||
for (int i = 0; i <= 10; i++) {
|
||||
|
||||
float ang = PI * 2.0 / 10.0 * i;
|
||||
vec4 offset = vec4(cos(ang) * 5, -sin(ang) * 5, 0.0, 0.0);
|
||||
gl_Position = g_WorldViewProjectionMatrix*vec4(gl_in[0].gl_Position.xyz + offset.xyz,1.0);
|
||||
|
||||
EmitVertex();
|
||||
}
|
||||
|
||||
EndPrimitive();
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
Material Pong Rock : Materials/Geom/SimpleGeom.j3md {
|
||||
MaterialParameters {
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
MaterialDef SimpleGeom {
|
||||
|
||||
MaterialParameters {
|
||||
|
||||
}
|
||||
|
||||
Technique {
|
||||
VertexShader GLSL330: Materials/Geom/SimpleGeom.vert
|
||||
GeometryShader GLSL330: Materials/Geom/SimpleGeom.geom
|
||||
FragmentShader GLSL330: Materials/Geom/SimpleGeom.frag
|
||||
|
||||
WorldParameters {
|
||||
WorldViewProjectionMatrix
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
attribute vec3 inPosition;
|
||||
|
||||
void main(){
|
||||
gl_Position=vec4(inPosition,1);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user