浏览代码

added test app

codex 8 月之前
父节点
当前提交
79c93e0346

+ 59 - 0
jme3-examples/src/main/java/jme3test/texture/TestShaderImage.java

@@ -0,0 +1,59 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package jme3test.texture;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.material.Material;
+import com.jme3.math.Vector3f;
+import com.jme3.scene.Geometry;
+import com.jme3.scene.shape.Box;
+import com.jme3.scene.shape.Quad;
+import com.jme3.shader.VarType;
+import com.jme3.texture.Image;
+import com.jme3.texture.Texture2D;
+import com.jme3.texture.TextureImage;
+
+/**
+ *
+ * @author codex
+ */
+public class TestShaderImage extends SimpleApplication {
+    
+    private int frame = 0;
+    
+    public static void main(String[] args) {
+        new TestShaderImage().start();
+    }
+    
+    @Override
+    public void simpleInitApp() {
+        
+        Geometry box = new Geometry("Box", new Box(1, 1, 1));
+        Material mat = new Material(assetManager, "Materials/ImageTest.j3md");
+        box.setMaterial(mat);
+        rootNode.attachChild(box);
+        
+        int width = context.getFramebufferWidth();
+        int height = context.getFramebufferHeight();
+        Texture2D target = new Texture2D(width, height, Image.Format.RGBA8);
+        TextureImage targetImage = new TextureImage(target, TextureImage.Access.WriteOnly);
+        mat.setParam("TargetImage", VarType.Image2D, targetImage);
+        
+        Geometry pic = new Geometry("gui_pic", new Quad(200, 200));
+        pic.setLocalTranslation(0, height - 200, 0);
+        Material picMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
+        picMat.setTexture("ColorMap", target);
+        pic.setMaterial(mat);
+        guiNode.attachChild(pic);
+        
+    }
+    @Override
+    public void simpleUpdate(float tpf) {
+        if (frame++ < 5) {
+            cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
+        }
+    }
+    
+}

+ 7 - 6
jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglGL.java

@@ -60,12 +60,13 @@ public final class LwjglGL implements GL, GL2, GL3, GL4 {
         GL11.glBindTexture(param1, param2);
     }
     
-    @Override
-    public void glBindImageTexture(final int unit, final int texture, final int level,
-                                   final boolean layered, final int layer,
-                                   final int access, final int format) {
-        GL42.glBindImageTexture(unit, texture, level, layered, layer, access, format);
-    }
+//    @Override
+//    public void glBindImageTexture(final int unit, final int texture, final int level,
+//                                   final boolean layered, final int layer,
+//                                   final int access, final int format) {
+//        throw new NullPointerException("lwjgl");
+//        //GL42.glBindImageTexture(unit, texture, level, layered, layer, access, format);
+//    }
     
     @Override
     public void glBlendEquationSeparate(int colorMode, int alphaMode){

+ 12 - 4
jme3-lwjgl3/src/main/java/com/jme3/renderer/lwjgl/LwjglGL.java

@@ -81,13 +81,20 @@ public class LwjglGL extends LwjglRender implements GL, GL2, GL3, GL4 {
         GL11.glBindTexture(target, texture);
     }
     
+//    @Override
+//    public void glBindImageTexture(final int unit, final int texture, final int level,
+//                                   final boolean layered, final int layer,
+//                                   final int access, final int format) {
+//        throw new NullPointerException("lwjgl3");
+//        //GL42.glBindImageTexture(unit, texture, level, layered, layer, access, format);
+//    }
+    
+    
     @Override
-    public void glBindImageTexture(final int unit, final int texture, final int level,
-                                   final boolean layered, final int layer,
-                                   final int access, final int format) {
+    public void glBindImageTexture(int unit, int texture, int level, boolean layered, int layer, int access, int format) {
         GL42.glBindImageTexture(unit, texture, level, layered, layer, access, format);
     }
-
+    
     @Override
     public void glBlendEquationSeparate(final int colorMode, final int alphaMode) {
         GL20.glBlendEquationSeparate(colorMode, alphaMode);
@@ -660,4 +667,5 @@ public class LwjglGL extends LwjglRender implements GL, GL2, GL3, GL4 {
     public void glUniformBlockBinding(final int program, final int uniformBlockIndex, final int uniformBlockBinding) {
         GL31.glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
     }
+    
 }

+ 11 - 0
jme3-testdata/src/main/resources/Materials/ImageTest.frag

@@ -0,0 +1,11 @@
+
+#import "Common/ShaderLib/GLSLCompat.glsllib"
+
+layout(RGBA8) uniform image2D m_TargetImage;
+
+void main() {
+    
+    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
+    imageStore(m_TargetImage, ivec2(gl_FragCoord.xy), vec4(0.0, 1.0, 0.0, 1.0));
+    
+}

+ 20 - 0
jme3-testdata/src/main/resources/Materials/ImageTest.j3md

@@ -0,0 +1,20 @@
+MaterialDef ImageTest {
+
+    MaterialParameters {
+        
+        Image2D TargetImage
+        
+    }
+
+     Technique {
+        
+        VertexShader   GLSL400 GLSL320 GLSL150 : Common/MatDefs/Misc/Unshaded.vert
+        FragmentShader GLSL400 GLSL320 GLSL150 : Materials/ImageTest.frag
+
+        WorldParameters {
+            WorldViewProjectionMatrix
+        }
+        
+    }
+
+}