Skip to content

Commit 7e1f760

Browse files
committed
fix several incompatibilities
1 parent fe84d1e commit 7e1f760

11 files changed

Lines changed: 106 additions & 83 deletions

File tree

jme3-core/src/main/java/com/jme3/material/GlMaterial.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
import java.util.logging.Logger;
7777

7878
/**
79-
* <code>Material</code> describes the rendering style for a given
79+
* <code>GlMaterial</code> describes the rendering style for a given
8080
* {@link Geometry}.
8181
* <p>A material is essentially a list of {@link MatParam parameters},
8282
* those parameters map to uniforms which are defined in a shader.
@@ -649,6 +649,11 @@ private void checkTextureParamColorSpace(String name, GlTexture value) {
649649
}
650650
}
651651

652+
@Override
653+
public void setTexture(String name, VersionedResource<? extends Texture> value) {
654+
setTexture(name, value.get());
655+
}
656+
652657
/**
653658
* Pass a texture to the material shader.
654659
*
@@ -657,18 +662,18 @@ private void checkTextureParamColorSpace(String name, GlTexture value) {
657662
* @param value the Texture object previously loaded by the asset manager
658663
*/
659664
@Override
660-
public void setTexture(String name, VersionedResource<? extends Texture> value) {
665+
public void setTexture(String name, Texture value) {
661666
if (value == null) {
662667
// clear it
663668
clearParam(name);
664669
return;
665670
}
666-
if (!(value.get() instanceof GlTexture)) {
671+
if (!(value instanceof GlTexture)) {
667672
throw new IllegalArgumentException("Must be a GlTexture.");
668673
}
669674

670675
VarType paramType = null;
671-
GlTexture.Type type = ((GlTexture)value.get()).getType();
676+
GlTexture.Type type = ((GlTexture)value).getType();
672677
switch (type) {
673678
case TwoDimensional:
674679
paramType = VarType.Texture2D;
@@ -1151,18 +1156,9 @@ public void render(Geometry geometry, LightList lights, RenderManager renderMana
11511156
technique.render(renderManager, shader, geometry, lights, units);
11521157
}
11531158

1154-
/**
1155-
* Called by {@link RenderManager} to render the geometry by
1156-
* using this material.
1157-
*
1158-
* Note that this version of the render method
1159-
* does not perform light filtering.
1160-
*
1161-
* @param geom The geometry to render
1162-
* @param rm The render manager requesting the rendering
1163-
*/
1164-
public void render(Geometry geom, RenderManager rm) {
1165-
render(geom, geom.getWorldLightList(), rm);
1159+
@Override
1160+
public void render(Geometry geometry, LightList lights, CommandBuffer cmd, Pipeline pipeline) {
1161+
throw new UnsupportedOperationException("Unable to render in a Vulkan context.");
11661162
}
11671163

11681164
@Override

jme3-core/src/main/java/com/jme3/material/Material.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@
3838
import com.jme3.scene.Geometry;
3939
import com.jme3.texture.Texture;
4040
import com.jme3.vulkan.buffers.GpuBuffer;
41+
import com.jme3.vulkan.commands.CommandBuffer;
42+
import com.jme3.vulkan.frames.SingleResource;
4143
import com.jme3.vulkan.frames.VersionedResource;
44+
import com.jme3.vulkan.pipelines.Pipeline;
4245

4346
/**
4447
* <code>Material</code> describes the rendering style for a given
@@ -57,18 +60,32 @@ public interface Material extends Savable {
5760

5861
void render(Geometry geometry, LightList lights, RenderManager renderManager);
5962

63+
void render(Geometry geometry, LightList lights, CommandBuffer cmd, Pipeline pipeline);
64+
6065
void setUniform(String name, VersionedResource<? extends GpuBuffer> buffer);
6166

6267
void setTexture(String name, VersionedResource<? extends Texture> texture);
6368

6469
void setParam(String uniform, String param, Object value);
6570

71+
default void render(Geometry geometry, RenderManager renderManager) {
72+
render(geometry, geometry.getWorldLightList(), renderManager);
73+
}
74+
75+
default void render(Geometry geometry, CommandBuffer cmd, Pipeline pipeline) {
76+
render(geometry, geometry.getWorldLightList(), cmd, pipeline);
77+
}
78+
6679
/* ----- COMPATABILITY WITH OLD MATERIAL ----- */
6780

6881
default void setParam(String param, Object value) {
6982
setParam(DEFAULT_UNIFORM_BUFFER, param, value);
7083
}
7184

85+
default void setTexture(String param, Texture value) {
86+
setTexture(param, new SingleResource<>(value));
87+
}
88+
7289
default void setBoolean(String param, boolean value) {
7390
setParam(param, value);
7491
}

jme3-core/src/main/java/com/jme3/scene/GlMesh.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
* <ul>
6464
* <li>Points - Every vertex represents a single point in space.
6565
* <li>Lines - 2 vertices represent a line segment, with the width specified
66-
* via {@link Material#getAdditionalRenderState()} and {@link RenderState#setLineWidth(float)}.</li>
66+
* via {@link com.jme3.material.GlMaterial#getAdditionalRenderState()} and {@link RenderState#setLineWidth(float)}.</li>
6767
* <li>Triangles - 3 vertices represent a solid triangle primitive. </li>
6868
* </ul>
6969
*
@@ -88,23 +88,23 @@ public enum Mode {
8888
Points(true),
8989
/**
9090
* A primitive is a line segment. Every two vertices specify
91-
* a single line. {@link Material#getAdditionalRenderState()}
91+
* a single line. {@link com.jme3.material.GlMaterial#getAdditionalRenderState()}
9292
* and {@link RenderState#setLineWidth(float)} can be used
9393
* to set the width of the lines.
9494
*/
9595
Lines(true),
9696
/**
9797
* A primitive is a line segment. The first two vertices specify
9898
* a single line, while subsequent vertices are combined with the
99-
* previous vertex to make a line. {@link Material#getAdditionalRenderState()}
99+
* previous vertex to make a line. {@link com.jme3.material.GlMaterial#getAdditionalRenderState()}
100100
* and {@link RenderState#setLineWidth(float)} can
101101
* be used to set the width of the lines.
102102
*/
103103
LineStrip(false),
104104
/**
105105
* Identical to {@link #LineStrip} except that at the end
106106
* the last vertex is connected with the first to form a line.
107-
* {@link Material#getAdditionalRenderState()}
107+
* {@link com.jme3.material.GlMaterial#getAdditionalRenderState()}
108108
* and {@link RenderState#setLineWidth(float)} can be used
109109
* to set the width of the lines.
110110
*/
@@ -202,7 +202,6 @@ public boolean isListMode() {
202202
private int[] modeStart;
203203

204204
private Mode mode = Mode.Triangles;
205-
206205
private SafeArrayList<MorphTarget> morphTargets;
207206

208207
/**
@@ -651,7 +650,7 @@ public float getPointSize() {
651650
* Returns the line width for line meshes.
652651
*
653652
* @return the line width
654-
* @deprecated use {@link Material#getAdditionalRenderState()}
653+
* @deprecated use {@link com.jme3.material.GlMaterial#getAdditionalRenderState()}
655654
* and {@link RenderState#getLineWidth()}
656655
*/
657656
@Deprecated
@@ -665,7 +664,7 @@ public float getLineWidth() {
665664
* the default value is 1.0.
666665
*
667666
* @param lineWidth The line width
668-
* @deprecated use {@link GlMesh#getAdditionalRenderState()}
667+
* @deprecated use {@link com.jme3.material.GlMaterial#getAdditionalRenderState()}
669668
* and {@link RenderState#setLineWidth(float)}
670669
*/
671670
@Deprecated
@@ -1527,6 +1526,7 @@ public boolean isAnimatedByBone(int boneIndex) {
15271526
* @param jointIndex the bone's index in its skeleton
15281527
* @return true if the specified bone animates this mesh, otherwise false
15291528
*/
1529+
@Override
15301530
public boolean isAnimatedByJoint(int jointIndex) {
15311531
VertexBuffer biBuf = getBuffer(VertexBuffer.Type.BoneIndex);
15321532
VertexBuffer wBuf = getBuffer(VertexBuffer.Type.BoneWeight);

jme3-core/src/main/java/com/jme3/scene/Mesh.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,18 @@
3535
import com.jme3.collision.Collidable;
3636
import com.jme3.collision.CollisionResults;
3737
import com.jme3.export.*;
38-
import com.jme3.material.Material;
39-
import com.jme3.material.RenderState;
4038
import com.jme3.renderer.Renderer;
4139
import com.jme3.vulkan.commands.CommandBuffer;
4240
import com.jme3.vulkan.mesh.AttributeModifier;
43-
import com.jme3.vulkan.mesh.BuiltInAttribute;
4441

4542
/**
46-
* <code>Mesh</code> is used to store rendering data.
47-
* <p>
48-
* All visible elements in a scene are represented by meshes.
49-
* Meshes may contain three types of geometric primitives:
50-
* <ul>
51-
* <li>Points - Every vertex represents a single point in space.
52-
* <li>Lines - 2 vertices represent a line segment, with the width specified
53-
* via {@link Material#getAdditionalRenderState()} and {@link RenderState#setLineWidth(float)}.</li>
54-
* <li>Triangles - 3 vertices represent a solid triangle primitive. </li>
55-
* </ul>
5643
*
57-
* @author Kirill Vainer
44+
* @author codex
5845
*/
5946
public interface Mesh extends Collidable, Savable {
6047

48+
49+
6150
void draw(CommandBuffer cmd, Geometry geometry);
6251

6352
void draw(Renderer renderer, Geometry geometry, int instances, VertexBuffer[] instanceData);
@@ -78,8 +67,20 @@ public interface Mesh extends Collidable, Savable {
7867

7968
int getNumLodLevels();
8069

81-
default AttributeModifier modifyAttribute(BuiltInAttribute name) {
70+
default AttributeModifier modifyAttribute(VertexBuffer.Type name) {
8271
return modifyAttribute(name.getName());
8372
}
8473

74+
/* ----- COMPATIBILITY WITH OLD MESH ----- */
75+
76+
// todo: determine what to do with this method
77+
// It's used only seriously by Joint, and only then for attachment nodes.
78+
// I hope it can be replaced by something else or attachment nodes could
79+
// be refactored to remove that dependency, because the GlMesh implementation
80+
// for this is concerning.
81+
@Deprecated
82+
default boolean isAnimatedByJoint(int i) {
83+
return false;
84+
}
85+
8586
}

jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public class VertexBuffer extends NativeObject implements Savable, Cloneable {
5757
/**
5858
* Type of buffer. Specifies the actual attribute it defines.
5959
*/
60-
public static enum Type {
60+
public enum Type {
6161
/**
6262
* Position of the vertex (3 floats)
6363
*/
@@ -225,7 +225,22 @@ public static enum Type {
225225
MorphTarget10,
226226
MorphTarget11,
227227
MorphTarget12,
228-
MorphTarget13,
228+
MorphTarget13;
229+
230+
private final String name;
231+
232+
Type() {
233+
this.name = name();
234+
}
235+
236+
Type(String name) {
237+
this.name = name;
238+
}
239+
240+
public String getName() {
241+
return name;
242+
}
243+
229244
}
230245

231246
/**

jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureDebugger.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.jme3.asset.AssetManager;
3838
import com.jme3.collision.Collidable;
3939
import com.jme3.collision.CollisionResults;
40+
import com.jme3.material.GlMaterial;
4041
import com.jme3.material.Material;
4142
import com.jme3.material.RenderState;
4243
import com.jme3.renderer.Camera;
@@ -125,29 +126,29 @@ public void initialize(AssetManager assetManager, Camera camera) {
125126

126127
armatureNode.setCamera(camera);
127128

128-
Material matJoints = new Material(assetManager, "Common/MatDefs/Misc/Billboard.j3md");
129+
GlMaterial matJoints = new GlMaterial(assetManager, "Common/MatDefs/Misc/Billboard.j3md");
129130
GlTexture t = assetManager.loadTexture("Common/Textures/dot.png");
130131
matJoints.setTexture("Texture", t);
131132
matJoints.getAdditionalRenderState().setDepthTest(false);
132133
matJoints.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha);
133134
joints.setQueueBucket(RenderQueue.Bucket.Translucent);
134135
joints.setMaterial(matJoints);
135136

136-
Material matWires = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
137+
GlMaterial matWires = new GlMaterial(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
137138
matWires.setBoolean("VertexColor", true);
138139
matWires.getAdditionalRenderState().setLineWidth(1f);
139140
wires.setMaterial(matWires);
140141

141-
Material matOutline = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
142+
GlMaterial matOutline = new GlMaterial(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
142143
matOutline.setBoolean("VertexColor", true);
143144
matOutline.getAdditionalRenderState().setLineWidth(1f);
144145
outlines.setMaterial(matOutline);
145146

146-
Material matOutline2 = new Material(assetManager, "Common/MatDefs/Misc/DashedLine.j3md");
147+
GlMaterial matOutline2 = new GlMaterial(assetManager, "Common/MatDefs/Misc/DashedLine.j3md");
147148
matOutline2.getAdditionalRenderState().setLineWidth(1);
148149
outlines.getChild(1).setMaterial(matOutline2);
149150

150-
Material matWires2 = new Material(assetManager, "Common/MatDefs/Misc/DashedLine.j3md");
151+
GlMaterial matWires2 = new GlMaterial(assetManager, "Common/MatDefs/Misc/DashedLine.j3md");
151152
matWires2.getAdditionalRenderState().setLineWidth(1);
152153
wires.getChild(1).setMaterial(matWires2);
153154

jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.jme3.scene.*;
4242
import com.jme3.scene.shape.Line;
4343

44+
import java.nio.ByteBuffer;
4445
import java.nio.FloatBuffer;
4546
import java.util.*;
4647

jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@
66
import com.jme3.material.Material;
77
import com.jme3.renderer.RenderManager;
88
import com.jme3.scene.Geometry;
9+
import com.jme3.texture.Texture;
910
import com.jme3.vulkan.buffers.GpuBuffer;
1011
import com.jme3.vulkan.commands.CommandBuffer;
1112
import com.jme3.vulkan.descriptors.*;
1213
import com.jme3.vulkan.devices.LogicalDevice;
14+
import com.jme3.vulkan.frames.VersionedResource;
15+
import com.jme3.vulkan.material.uniforms.BufferUniform;
16+
import com.jme3.vulkan.material.uniforms.TextureUniform;
1317
import com.jme3.vulkan.material.uniforms.Uniform;
1418
import com.jme3.vulkan.pipelines.Pipeline;
1519
import com.jme3.vulkan.struct.Structure;
@@ -54,8 +58,24 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) {
5458

5559
@Override
5660
public void render(Geometry geometry, LightList lights, RenderManager renderManager) {
57-
bind(cmd, pipeline);
58-
geometry.getMesh().draw(cmd, geometry);
61+
throw new UnsupportedOperationException("Unable to render in an OpenGL context.");
62+
}
63+
64+
@Override
65+
public void render(Geometry geometry, LightList lights, CommandBuffer cmd, Pipeline pipeline) {
66+
67+
}
68+
69+
@Override
70+
public void setUniform(String name, VersionedResource<? extends GpuBuffer> buffer) {
71+
BufferUniform u = getUniform(name);
72+
u.setResource(buffer);
73+
}
74+
75+
@Override
76+
public void setTexture(String name, VersionedResource<? extends Texture> texture) {
77+
TextureUniform u = getUniform(name);
78+
u.setResource(texture);
5979
}
6080

6181
@Override
@@ -66,7 +86,6 @@ public void setParam(String uniform, String param, Object value) {
6686
buffer.unmap();
6787
}
6888

69-
@Override
7089
@SuppressWarnings("unchecked")
7190
public <T extends Uniform> T getUniform(String name) {
7291
// Not sure if caching the results is really worth it...

jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,6 @@ public void setMode(String name, VertexMode mode) {
200200
}
201201
}
202202

203-
public void setMode(BuiltInAttribute name, VertexMode mode) {
204-
setMode(name.getName(), mode);
205-
}
206-
207203
private VersionedResource<? extends GpuBuffer> createBufferResource(VertexBinding binding, VertexMode mode) {
208204
MemorySize size = MemorySize.bytes(binding.getStride() * vertices);
209205
switch (mode) {

0 commit comments

Comments
 (0)