Skip to content

Commit 6e9d3aa

Browse files
Merge pull request #52 from ArtifactForms/working2
Working2
2 parents 41ef468 + dfb536a commit 6e9d3aa

File tree

8 files changed

+385
-246
lines changed

8 files changed

+385
-246
lines changed

src/main/java/engine/application/BasicApplication.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public void update() {
110110
}
111111

112112
@Override
113-
public void render(Graphics g) {
113+
public void render(Graphics g) {
114114
if (activeScene != null) {
115115
activeScene.render(g);
116116
}
@@ -170,4 +170,8 @@ public Scene getActiveScene() {
170170
public void setActiveScene(Scene activeScene) {
171171
this.activeScene = activeScene;
172172
}
173+
174+
public void setDisplayInfoText(boolean displayInfoText) {
175+
this.displayInfoText = displayInfoText;
176+
}
173177
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package engine.resources;
2+
3+
public class Image {
4+
5+
private final Object backendImage;
6+
7+
public Image(Object backendImage) {
8+
this.backendImage = backendImage;
9+
}
10+
11+
public Object getBackendImage() {
12+
return backendImage;
13+
}
14+
15+
// Add methods to abstract common operations like `getWidth()`, `getHeight()`, etc.
16+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package engine.resources;
2+
3+
public interface ImageLoader {
4+
5+
Object loadImage(String path); // Returns the backend-specific image object
6+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package engine.resources;
2+
3+
public class ImageResource implements Resource {
4+
5+
private Object image;
6+
7+
private String path;
8+
9+
@Override
10+
public void load(String path) {
11+
this.image = ResourceManager.getInstance().loadImage(path);
12+
this.path = path;
13+
}
14+
15+
@Override
16+
public void unload() {
17+
ResourceManager.getInstance().unloadImage(path);
18+
this.image = null;
19+
}
20+
21+
@Override
22+
public boolean isLoaded() {
23+
return image != null;
24+
}
25+
26+
public Object getImage() {
27+
return image;
28+
}
29+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package engine.resources;
2+
3+
public interface Resource {
4+
5+
void load(String path);
6+
7+
void unload();
8+
9+
boolean isLoaded();
10+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package engine.resources;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class ResourceManager {
7+
8+
private static ResourceManager instance;
9+
10+
private ImageLoader imageLoader;
11+
12+
private final Map<String, Image> resourceCache = new HashMap<>();
13+
14+
private ResourceManager() {}
15+
16+
public static ResourceManager getInstance() {
17+
if (instance == null) {
18+
instance = new ResourceManager();
19+
}
20+
return instance;
21+
}
22+
23+
public void setImageLoader(ImageLoader loader) {
24+
this.imageLoader = loader;
25+
}
26+
27+
public Image loadImage(String path) {
28+
if (resourceCache.containsKey(path)) {
29+
return resourceCache.get(path); // Return cached resource
30+
}
31+
32+
if (imageLoader == null) {
33+
throw new IllegalStateException("ImageLoader is not set!");
34+
}
35+
36+
Object obj = imageLoader.loadImage(path);
37+
Image image = new Image(obj);
38+
39+
resourceCache.put(path, image);
40+
41+
return image;
42+
}
43+
44+
public void unloadImage(String path) {
45+
resourceCache.remove(path); // Optionally handle cleanup for backend-specific resources
46+
}
47+
}

src/main/java/workspace/GraphicsPImpl.java

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import engine.processing.LightGizmoRenderer;
66
import engine.processing.LightRendererImpl;
77
import engine.render.Material;
8+
import engine.resources.Image;
89
import engine.scene.camera.Camera;
910
import engine.scene.light.Light;
1011
import engine.scene.light.LightRenderer;
@@ -14,6 +15,8 @@
1415
import mesh.Mesh3D;
1516
import processing.core.PApplet;
1617
import processing.core.PGraphics;
18+
import processing.core.PImage;
19+
import processing.opengl.PGraphicsOpenGL;
1720
import processing.opengl.PShader;
1821
import workspace.render.Mesh3DRenderer;
1922
import workspace.ui.Color;
@@ -35,6 +38,10 @@ public class GraphicsPImpl implements Graphics {
3538

3639
private LightGizmoRenderer lightGizmoRenderer;
3740

41+
public static int faceCount = 0;
42+
43+
public static int vertexCount = 0;
44+
3845
@Override
3946
public void setAmbientColor(math.Color ambientColor) {
4047
this.ambientColor = ambientColor;
@@ -66,6 +73,8 @@ public GraphicsPImpl(PApplet p) {
6673

6774
@Override
6875
public void fillFaces(Mesh3D mesh) {
76+
faceCount += mesh.faces.size();
77+
vertexCount += mesh.vertices.size();
6978
if (wireframeMode) {
7079
g.noFill();
7180
stroke();
@@ -342,9 +351,9 @@ public void rotateZ(float angle) {
342351

343352
@Override
344353
public void rotate(float rx, float ry, float rz) {
345-
g.rotateX(rx);
346-
g.rotateY(ry);
347-
g.rotateZ(rz);
354+
g.rotateX(rx);
355+
g.rotateY(ry);
356+
g.rotateZ(rz);
348357
}
349358

350359
public void camera() {
@@ -460,15 +469,48 @@ public void applyCamera(Camera camera) {
460469
if (camera == null) {
461470
throw new IllegalArgumentException("Camera instance cannot be null.");
462471
}
463-
472+
473+
// g.resetMatrix();
474+
// Matrix4f m = camera.getViewProjectionMatrix();
475+
//
476+
//
477+
// Vector3f target = camera.getTarget();
478+
// Vector3f eye = camera.getTransform().getPosition();
479+
// Matrix4f look = Matrix4f.lookAt(eye, target, new Vector3f(0, 1, 0));
480+
//
481+
// m = m.multiply(look);
482+
483+
// g.getMatrix().set(m.getValues());
484+
464485
float fov = camera.getFieldOfView();
465486
float aspect = camera.getAspectRatio();
466487
float near = camera.getNearPlane();
467488
float far = camera.getFarPlane();
468-
g.perspective(fov, aspect, near, far);
489+
// g.perspective(fov, aspect, near, far);
490+
491+
Matrix4f m = camera.getProjectionMatrix();
492+
((PGraphicsOpenGL) g).projection.set(m.getValues());
469493

470494
Vector3f target = camera.getTarget();
471495
Vector3f eye = camera.getTransform().getPosition();
472496
g.camera(eye.x, eye.y, eye.z, target.x, target.y, target.z, 0, 1, 0);
473497
}
498+
499+
@Override
500+
public void drawImage(Image image, float x, float y) {
501+
if (image.getBackendImage() instanceof PImage) {
502+
g.image((PImage) image.getBackendImage(), x, y);
503+
} else {
504+
throw new IllegalArgumentException("Unsupported image backend.");
505+
}
506+
}
507+
508+
@Override
509+
public void drawImage(Image image, float x, float y, float width, float height) {
510+
if (image.getBackendImage() instanceof PImage) {
511+
g.image((PImage) image.getBackendImage(), x, y, width, height);
512+
} else {
513+
throw new IllegalArgumentException("Unsupported image backend.");
514+
}
515+
}
474516
}

0 commit comments

Comments
 (0)