Fixed and re-optimized static labels
This commit is contained in:
parent
18bac9d2b5
commit
a6c1b914c1
@ -1,5 +1,7 @@
|
||||
package ru.windcorp.progressia.client.graphics.font;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import glm.mat._4.Mat4;
|
||||
@ -11,6 +13,7 @@ import gnu.trove.map.hash.TCharObjectHashMap;
|
||||
import gnu.trove.stack.TIntStack;
|
||||
import gnu.trove.stack.array.TIntArrayStack;
|
||||
import ru.windcorp.progressia.client.graphics.backend.Usage;
|
||||
import ru.windcorp.progressia.client.graphics.model.Face;
|
||||
import ru.windcorp.progressia.client.graphics.model.Faces;
|
||||
import ru.windcorp.progressia.client.graphics.model.Shape;
|
||||
import ru.windcorp.progressia.client.graphics.model.ShapeRenderHelper;
|
||||
@ -18,6 +21,7 @@ import ru.windcorp.progressia.client.graphics.model.ShapeRenderProgram;
|
||||
import ru.windcorp.progressia.client.graphics.model.Renderable;
|
||||
import ru.windcorp.progressia.client.graphics.texture.Texture;
|
||||
import ru.windcorp.progressia.common.util.StashingStack;
|
||||
import ru.windcorp.progressia.common.util.VectorUtil;
|
||||
import ru.windcorp.progressia.common.util.Vectors;
|
||||
|
||||
public abstract class SpriteTypeface extends Typeface {
|
||||
@ -215,9 +219,72 @@ public abstract class SpriteTypeface extends Typeface {
|
||||
* Assembly
|
||||
*/
|
||||
|
||||
private class StaticDrawer implements Drawer {
|
||||
|
||||
private class SDWorkspace extends SpriteTypeface.Workspace {
|
||||
|
||||
private final Collection<Face> faces = new ArrayList<>();
|
||||
|
||||
private final Vec3 origin = new Vec3();
|
||||
private final Vec3 width = new Vec3();
|
||||
private final Vec3 height = new Vec3();
|
||||
|
||||
}
|
||||
|
||||
public final SDWorkspace workspace = new SDWorkspace();
|
||||
|
||||
@Override
|
||||
public void drawChar(char c, Vec3 color, Mat4 transform) {
|
||||
workspace.origin.set(0, 0, 0);
|
||||
workspace.width.set(getWidth(c), 0, 0);
|
||||
workspace.height.set(0, getHeight(), 0);
|
||||
|
||||
drawFace(getTexture(c), color, transform);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawRectangle(Vec2 size, Vec3 color, Mat4 transform) {
|
||||
workspace.origin.set(0, 0, 0);
|
||||
workspace.width.set(size.x, 0, 0);
|
||||
workspace.height.set(0, size.y, 0);
|
||||
|
||||
drawFace(null, color, transform);
|
||||
}
|
||||
|
||||
private void drawFace(Texture texture, Vec3 color, Mat4 transform) {
|
||||
|
||||
workspace.width.add(workspace.origin);
|
||||
workspace.height.add(workspace.origin);
|
||||
|
||||
VectorUtil.applyMat4(workspace.origin, transform);
|
||||
VectorUtil.applyMat4(workspace.width, transform);
|
||||
VectorUtil.applyMat4(workspace.height, transform);
|
||||
|
||||
workspace.width.sub(workspace.origin);
|
||||
workspace.height.sub(workspace.origin);
|
||||
|
||||
workspace.faces.add(Faces.createRectangle(
|
||||
getProgram(),
|
||||
texture, color,
|
||||
workspace.origin, workspace.width, workspace.height,
|
||||
false
|
||||
));
|
||||
}
|
||||
|
||||
public Renderable assemble() {
|
||||
return new Shape(
|
||||
Usage.STATIC, getProgram(),
|
||||
workspace.faces.toArray(new Face[workspace.faces.size()])
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Renderable assemble(CharSequence chars, int style, float align, float maxWidth, int color) {
|
||||
return assembleDynamic(() -> chars, style, align, maxWidth, color);
|
||||
StaticDrawer drawer = new StaticDrawer();
|
||||
draw(chars, drawer, drawer.workspace, style, align, maxWidth, createVectorFromRGBInt(color));
|
||||
return drawer.assemble();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user