/*
- * Sixth - System for data storage, computation, exploration and interaction.
- * Copyright ©2012-2016, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- *
+ * Sixth 3D engine. Copyright ©2012-2019, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ *
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 3 of the GNU Lesser General Public License
* or later as published by the Free Software Foundation.
+ *
*/
package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic;
import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
import eu.svjatoslav.sixth.e3d.renderer.raster.texture.Texture;
+import java.util.Collections;
+import java.util.Set;
+import java.util.WeakHashMap;
+
public class GlowingPoint extends ForwardOrientedTexture {
private static final int TEXTURE_SIZE = 50;
+ private static final Set<GlowingPoint> glowingPoints = Collections.newSetFromMap(new WeakHashMap<>());
private final Color color;
public GlowingPoint(final Point3D point, final double pointSize,
super(point, pointSize, getTexture(color));
this.color = color;
- getTexture(color);
+ synchronized (glowingPoints) {
+ glowingPoints.add(this);
+ }
+ }
+
+ private static Texture getTexture(final Color color) {
+ // attempt to reuse texture from existing glowing point of the same color
+ synchronized (glowingPoints) {
+ for (GlowingPoint glowingPoint : glowingPoints)
+ if (color.equals(glowingPoint.color))
+ return glowingPoint.texture;
+ }
+ // existing texture not found, creating new one
+ return createTexture(color);
}
- public static Texture getTexture(final Color color) {
+ private static Texture createTexture(final Color color) {
final Texture texture = new Texture(TEXTURE_SIZE, TEXTURE_SIZE, 1);
for (int x = 0; x < TEXTURE_SIZE; x++)
for (int y = 0; y < TEXTURE_SIZE; y++) {