update dependencies, fix some crashes, cleanup
This commit is contained in:
parent
05706efecc
commit
117b5eb51e
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,6 +1,3 @@
|
|||||||
[submodule "src/VulkanRenderer"]
|
|
||||||
path = src/VulkanRenderer
|
|
||||||
url = https://git.sleepy.day/sleepy-day/VulkanRenderer.git
|
|
||||||
[submodule "src/dlib"]
|
[submodule "src/dlib"]
|
||||||
path = src/dlib
|
path = src/dlib
|
||||||
url = https://git.sleepy.day/sleepy-day/dlib.git
|
url = https://git.sleepy.day/sleepy-day/dlib.git
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
2
build.sh
2
build.sh
@ -15,6 +15,4 @@ for shader in src/shaders/*.glsl; do
|
|||||||
$shader_compiler $shader_flags $shader_out${base_name}.spv $shader
|
$shader_compiler $shader_flags $shader_out${base_name}.spv $shader
|
||||||
done
|
done
|
||||||
|
|
||||||
/bin/bash src/VulkanRenderer/build.sh build
|
|
||||||
|
|
||||||
/bin/bash src/dlib/build.sh build
|
/bin/bash src/dlib/build.sh build
|
||||||
|
|||||||
20
dub.json
20
dub.json
@ -9,16 +9,16 @@
|
|||||||
"targetPath": "build",
|
"targetPath": "build",
|
||||||
"sourceFiles-linux": ["build/libvma.a", "build/libstb.a", "build/libm3d.a"],
|
"sourceFiles-linux": ["build/libvma.a", "build/libstb.a", "build/libm3d.a"],
|
||||||
"sourceFiles-windows": [],
|
"sourceFiles-windows": [],
|
||||||
"importPaths": ["src/editor", "src/dlib", "src/dlib/external/xxhash", "src/VulkanRenderer"],
|
"importPaths": ["src/editor", "src/dlib/dlib", "src/dlib/vulkan"],
|
||||||
"sourcePaths": ["src/editor", "src/dlib", "src/dlib/external/xxhash", "src/VulkanRenderer"],
|
"sourcePaths": ["src/editor", "src/dlib/dlib", "src/dlib/vulkan"],
|
||||||
"libs-linux": ["X11", "vulkan", "stdc++", "xfixes", "freetype"],
|
"libs-linux": ["X11", "vulkan", "stdc++", "xfixes", "freetype"],
|
||||||
"libs-windows": [],
|
"libs-windows": [],
|
||||||
"versions": ["VULKAN_DEBUG", "ENABLE_RENDERER", "DLIB"],
|
"versions": ["VULKAN_DEBUG", "ENABLE_RENDERER", "DLIB"],
|
||||||
"preGenerateCommands-linux": ["./build.sh"],
|
"preGenerateCommands-linux": ["./build.sh"],
|
||||||
"preGenerateCommands-windows": [],
|
"preGenerateCommands-windows": [],
|
||||||
"dflags": ["-P-I/usr/include/freetype2", "-Jbuild", "-Jassets", "-P-DDLIB_INCLUDE_VULKAN"],
|
"dflags": ["-P-I/usr/include/freetype2", "-Jbuild", "-Jassets", "-P-DBUILD_VULKAN"],
|
||||||
"dflags-ldc2": ["-link-debuglib"],
|
"dflags-ldc2": ["-link-debuglib", "--Xcc=-DBUILD_VULKAN"],
|
||||||
"dflags-dmd": []
|
"dflags-dmd": ["-Xcc=-DBUILD_VULKAN"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "editor-test",
|
"name": "editor-test",
|
||||||
@ -27,16 +27,16 @@
|
|||||||
"targetPath": "build",
|
"targetPath": "build",
|
||||||
"sourceFiles-linux": ["build/libvma.a", "build/libstb.a", "build/libm3d.a", "build/libcglm.a"],
|
"sourceFiles-linux": ["build/libvma.a", "build/libstb.a", "build/libm3d.a", "build/libcglm.a"],
|
||||||
"sourceFiles-windows": [],
|
"sourceFiles-windows": [],
|
||||||
"importPaths": ["src/editor", "src/dlib", "src/dlib/external/xxhash", "src/VulkanRenderer"],
|
"importPaths": ["src/editor", "src/dlib/dlib", "src/dlib/vulkan"],
|
||||||
"sourcePaths": ["src/editor", "src/dlib", "src/dlib/external/xxhash", "src/VulkanRenderer"],
|
"sourcePaths": ["src/editor", "src/dlib/dlib", "src/dlib/vulkan"],
|
||||||
"libs-linux": ["X11", "vulkan", "stdc++", "xfixes", "freetype"],
|
"libs-linux": ["X11", "vulkan", "stdc++", "xfixes", "freetype"],
|
||||||
"libs-windows": [],
|
"libs-windows": [],
|
||||||
"versions": ["VULKAN_DEBUG"],
|
"versions": ["VULKAN_DEBUG"],
|
||||||
"preGenerateCommands-linux": ["./build.sh"],
|
"preGenerateCommands-linux": ["./build.sh"],
|
||||||
"preGenerateCommands-windows": [],
|
"preGenerateCommands-windows": [],
|
||||||
"dflags": ["-P-I/usr/include/freetype2", "-Jbuild", "-Jassets", "-unittest"],
|
"dflags": ["-P-I/usr/include/freetype2", "-Jbuild", "-Jassets", "-unittest", "-P-DBUILD_VULKAN"],
|
||||||
"dflags-ldc2": ["-link-debuglib"],
|
"dflags-ldc2": ["-link-debuglib", "--Xcc=-DBUILD_VULKAN"],
|
||||||
"dflags-dmd": []
|
"dflags-dmd": ["-Xcc=-DBUILD_VULKAN"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
Subproject commit 245db6ea6fe787e91839dd78f92dda007e234f7c
|
|
||||||
2
src/dlib
2
src/dlib
@ -1 +1 @@
|
|||||||
Subproject commit 6ae59dab5bca9d44fdf4a7f517654b1c0f8545f1
|
Subproject commit 53eb211a1e227d1cf3d8036a0e8ecfb79f514eed
|
||||||
@ -24,7 +24,6 @@ struct RenderCtx
|
|||||||
Descriptor[FS] font_descs;
|
Descriptor[FS] font_descs;
|
||||||
Descriptor default_tex;
|
Descriptor default_tex;
|
||||||
Descriptor sampler;
|
Descriptor sampler;
|
||||||
Descriptor msdf_texture;
|
|
||||||
Pipeline pipeline;
|
Pipeline pipeline;
|
||||||
Pipeline slug_pipeline;
|
Pipeline slug_pipeline;
|
||||||
DescSetLayout desc_set_layout;
|
DescSetLayout desc_set_layout;
|
||||||
|
|||||||
@ -48,7 +48,6 @@ void main(string[] argv)
|
|||||||
SetExtent(window.w, window.h);
|
SetExtent(window.w, window.h);
|
||||||
g_ctx.pc.resolution = current_res;
|
g_ctx.pc.resolution = current_res;
|
||||||
Ortho(&g_ctx.pc.projection, 0.0, 0.0, current_res.x, current_res.y, -10.0, 10.0);
|
Ortho(&g_ctx.pc.projection, 0.0, 0.0, current_res.x, current_res.y, -10.0, 10.0);
|
||||||
UpdateMSDFShaderInfo(&g_ctx.pc, g_ctx.pc.resolution);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(inputs.first == null)
|
if(inputs.first == null)
|
||||||
|
|||||||
@ -662,6 +662,7 @@ TokenizeD(FlatBuffer* fb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.end = tk.pos;
|
t.end = tk.pos;
|
||||||
|
tk.pos += 1;
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
238
src/editor/ui.d
238
src/editor/ui.d
@ -293,19 +293,6 @@ struct UIPanel
|
|||||||
alias item this;
|
alias item this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
UpdateMSDFShaderInfo(PushConst* pc, Vec2 resolution)
|
|
||||||
{
|
|
||||||
const f32 AA_PIXEL_SIZE = 1.0;
|
|
||||||
|
|
||||||
f32 aa_in_em = AA_PIXEL_SIZE * resolution.x / MSDF_INFO.pixels_per_em;
|
|
||||||
|
|
||||||
pc.antialias_per_em = 1.0 / aa_in_em;
|
|
||||||
pc.aem_range = MSDF_INFO.aem_range;
|
|
||||||
pc.threshold_em = 0.0;
|
|
||||||
pc.distance_range = MSDF_INFO.distance_field_range;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Window
|
struct Window
|
||||||
{
|
{
|
||||||
Window* next, prev;
|
Window* next, prev;
|
||||||
@ -396,184 +383,6 @@ struct UIKey
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum MSDFType
|
|
||||||
{
|
|
||||||
None,
|
|
||||||
HardMask,
|
|
||||||
SoftMask,
|
|
||||||
SDF,
|
|
||||||
PSDF,
|
|
||||||
MSDF,
|
|
||||||
MTSDF,
|
|
||||||
}
|
|
||||||
|
|
||||||
enum MSDFYOrigin
|
|
||||||
{
|
|
||||||
None,
|
|
||||||
Left,
|
|
||||||
Bottom,
|
|
||||||
Right,
|
|
||||||
Top,
|
|
||||||
}
|
|
||||||
|
|
||||||
struct MSDFInfo
|
|
||||||
{
|
|
||||||
MSDFGlyph[] glyphs;
|
|
||||||
MSDFType type;
|
|
||||||
Vec2 aem_range;
|
|
||||||
u32 distance_field_range;
|
|
||||||
u32 distance_field_range_middle;
|
|
||||||
f32 pixels_per_em;
|
|
||||||
u32 texture_width;
|
|
||||||
u32 texture_height;
|
|
||||||
MSDFYOrigin y_origin;
|
|
||||||
f32 line_height; // EM
|
|
||||||
f32 ascender; // EM
|
|
||||||
f32 descender; // EM
|
|
||||||
f32 underline_y; // EM
|
|
||||||
f32 underline_thickness; // EM
|
|
||||||
}
|
|
||||||
|
|
||||||
struct MSDFBounds
|
|
||||||
{
|
|
||||||
f32 left = 0.0, bottom = 0.0, right = 0.0, top = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct MSDFGlyph
|
|
||||||
{
|
|
||||||
dchar glyph = 0;
|
|
||||||
f32 advance = 0.0;
|
|
||||||
MSDFBounds plane; // EM
|
|
||||||
MSDFBounds atlas; // Pixels
|
|
||||||
}
|
|
||||||
|
|
||||||
const u8[] MSDF_ATLAS = cast(u8[])import("msdf-atlas.rgba");
|
|
||||||
|
|
||||||
const MSDFInfo MSDF_INFO = GenerateMSDF();
|
|
||||||
|
|
||||||
static MSDFInfo
|
|
||||||
GenerateMSDF()
|
|
||||||
{
|
|
||||||
import std.json;
|
|
||||||
|
|
||||||
string msdf_json = import("msdf.json");
|
|
||||||
|
|
||||||
JSONValue jsonv = parseJSON(msdf_json);
|
|
||||||
|
|
||||||
static T GetJSONValue(T)(JSONValue jsonv, string name)
|
|
||||||
{
|
|
||||||
static if(is(T == string))
|
|
||||||
{
|
|
||||||
T result = "";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
T result = cast(T)0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(const(JSONValue)* value = name in jsonv)
|
|
||||||
{
|
|
||||||
switch(value.type())
|
|
||||||
{
|
|
||||||
static if(is(T == u32) || is(T == u64) || is(T == f32))
|
|
||||||
{
|
|
||||||
case JSONType.float_: result = cast(T)value.floating; break;
|
|
||||||
case JSONType.uinteger: result = cast(T)value.uinteger; break;
|
|
||||||
case JSONType.integer: result = cast(T)value.integer; break;
|
|
||||||
}
|
|
||||||
static if(is(T == string))
|
|
||||||
{
|
|
||||||
case JSONType.string: result = cast(T)value.str; break;
|
|
||||||
}
|
|
||||||
default: assert(false, "Unable to retrieve value");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
MSDFInfo result = {
|
|
||||||
distance_field_range: GetJSONValue!(u32)(jsonv["atlas"], "distanceRange"),
|
|
||||||
distance_field_range_middle: GetJSONValue!(u32)(jsonv["atlas"], "distanceRangeMiddle"),
|
|
||||||
pixels_per_em: GetJSONValue!(f32)(jsonv["atlas"], "size"),
|
|
||||||
texture_width: GetJSONValue!(u32)(jsonv["atlas"], "width"),
|
|
||||||
texture_height: GetJSONValue!(u32)(jsonv["atlas"], "height"),
|
|
||||||
line_height: GetJSONValue!(f32)(jsonv["metrics"], "lineHeight"),
|
|
||||||
ascender: GetJSONValue!(f32)(jsonv["metrics"], "ascender"),
|
|
||||||
descender: GetJSONValue!(f32)(jsonv["metrics"], "descender"),
|
|
||||||
underline_y: GetJSONValue!(f32)(jsonv["metrics"], "underlineY"),
|
|
||||||
underline_thickness: GetJSONValue!(f32)(jsonv["metrics"], "underlineThickness"),
|
|
||||||
};
|
|
||||||
|
|
||||||
result.aem_range = Vec2(
|
|
||||||
(result.distance_field_range_middle - result.distance_field_range/2) / result.pixels_per_em,
|
|
||||||
(result.distance_field_range_middle + result.distance_field_range/2) / result.pixels_per_em
|
|
||||||
);
|
|
||||||
|
|
||||||
string type_string = GetJSONValue!(string)(jsonv["atlas"], "type");
|
|
||||||
string y_origin_string = GetJSONValue!(string)(jsonv["atlas"], "yOrigin");
|
|
||||||
|
|
||||||
assert(type_string.length);
|
|
||||||
assert(y_origin_string.length);
|
|
||||||
|
|
||||||
final switch(type_string) with(MSDFType)
|
|
||||||
{
|
|
||||||
case "hardmask": result.type = HardMask; break;
|
|
||||||
case "softmask": result.type = SoftMask; break;
|
|
||||||
case "sdf": result.type = SDF; break;
|
|
||||||
case "psdf": result.type = PSDF; break;
|
|
||||||
case "msdf": result.type = MSDF; break;
|
|
||||||
case "mtsdf": result.type = MTSDF; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
final switch(y_origin_string) with(MSDFYOrigin)
|
|
||||||
{
|
|
||||||
case "top": result.y_origin = Top; break;
|
|
||||||
case "left": result.y_origin = Left; break;
|
|
||||||
case "right": result.y_origin = Right; break;
|
|
||||||
case "bottom": result.y_origin = Bottom; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
MSDFGlyph[] glyphs = new MSDFGlyph[128];
|
|
||||||
|
|
||||||
JSONValue[] glyph_json = jsonv["glyphs"].array;
|
|
||||||
|
|
||||||
foreach(i; 0 .. glyph_json.length)
|
|
||||||
{
|
|
||||||
u64 ch = cast(u64)glyph_json[i]["unicode"].integer;
|
|
||||||
MSDFGlyph glyph = { glyph: cast(dchar)ch };
|
|
||||||
glyph.advance = GetJSONValue!(f32)(glyph_json[i], "advance");
|
|
||||||
if("planeBounds" in glyph_json[i])
|
|
||||||
{
|
|
||||||
glyph.plane.left = GetJSONValue!(f32)(glyph_json[i]["planeBounds"], "left");
|
|
||||||
glyph.plane.right = GetJSONValue!(f32)(glyph_json[i]["planeBounds"], "right");
|
|
||||||
glyph.plane.bottom = GetJSONValue!(f32)(glyph_json[i]["planeBounds"], "bottom");
|
|
||||||
glyph.plane.top = GetJSONValue!(f32)(glyph_json[i]["planeBounds"], "top");
|
|
||||||
|
|
||||||
glyph.atlas.left = GetJSONValue!(f32)(glyph_json[i]["atlasBounds"], "left");
|
|
||||||
glyph.atlas.right = GetJSONValue!(f32)(glyph_json[i]["atlasBounds"], "right");
|
|
||||||
glyph.atlas.bottom = GetJSONValue!(f32)(glyph_json[i]["atlasBounds"], "bottom");
|
|
||||||
glyph.atlas.top = GetJSONValue!(f32)(glyph_json[i]["atlasBounds"], "top");
|
|
||||||
}
|
|
||||||
|
|
||||||
glyphs[ch] = glyph;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach(i; 0 .. glyphs.length)
|
|
||||||
{
|
|
||||||
if(glyphs[i].glyph == 0xFFFF)
|
|
||||||
{
|
|
||||||
glyphs[i].glyph = 0;
|
|
||||||
glyphs[i].plane = MSDFBounds(left: 0.0, right: 0.0, top: 0.0, bottom: 0.0);
|
|
||||||
glyphs[i].atlas = MSDFBounds(left: 0.0, right: 0.0, top: 0.0, bottom: 0.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.glyphs = glyphs;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum bool KeyType(T) = (StringType!(T) || is(T == UIKey) || is(T == const(UIKey)));
|
enum bool KeyType(T) = (StringType!(T) || is(T == UIKey) || is(T == const(UIKey)));
|
||||||
enum bool ItemAndKeyType(T) = (KeyType!(T) || is(T == UIItem*));
|
enum bool ItemAndKeyType(T) = (KeyType!(T) || is(T == UIItem*));
|
||||||
|
|
||||||
@ -611,12 +420,17 @@ InitUI(Ctx* ctx)
|
|||||||
|
|
||||||
version(ENABLE_RENDERER)
|
version(ENABLE_RENDERER)
|
||||||
{
|
{
|
||||||
InitRenderer(handles, MB(16), MB(8));
|
VulkanBuildInfo build_info = {
|
||||||
|
platform_handles: handles,
|
||||||
|
application_name: "ScratchPad",
|
||||||
|
engine_name: "ScratchPad",
|
||||||
|
};
|
||||||
|
|
||||||
DescLayoutBinding[3] layout_bindings = [
|
InitRenderer(build_info, MB(16), MB(8));
|
||||||
|
|
||||||
|
DescLayoutBinding[2] layout_bindings = [
|
||||||
{ binding: 0, descriptorType: DT.Image, descriptorCount: FONT_SIZES, stageFlags: SS.All },
|
{ binding: 0, descriptorType: DT.Image, descriptorCount: FONT_SIZES, stageFlags: SS.All },
|
||||||
{ binding: 1, descriptorType: DT.Sampler, descriptorCount: 1, stageFlags: SS.All },
|
{ binding: 1, descriptorType: DT.Sampler, descriptorCount: 1, stageFlags: SS.All },
|
||||||
{ binding: 2, descriptorType: DT.Image, descriptorCount: 1, stageFlags: SS.All },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
ctx.desc_set_layout = CreateDescSetLayout(layout_bindings);
|
ctx.desc_set_layout = CreateDescSetLayout(layout_bindings);
|
||||||
@ -655,20 +469,6 @@ InitUI(Ctx* ctx)
|
|||||||
|
|
||||||
CreateGraphicsPipeline(&ctx.pipeline, &ui_info);
|
CreateGraphicsPipeline(&ctx.pipeline, &ui_info);
|
||||||
|
|
||||||
CreateDescriptor(
|
|
||||||
&ctx.msdf_texture,
|
|
||||||
DescInfo(
|
|
||||||
type: DT.Image,
|
|
||||||
format: FMT.RGBA_UNORM,
|
|
||||||
usage: IU.Texture,
|
|
||||||
w: MSDF_INFO.texture_width,
|
|
||||||
h: MSDF_INFO.texture_height,
|
|
||||||
ch: 4,
|
|
||||||
binding: 2,
|
|
||||||
),
|
|
||||||
cast(u8[])MSDF_ATLAS[12 .. $]
|
|
||||||
);
|
|
||||||
|
|
||||||
for(u32 i = 0; i < ctx.font_descs.length; i += 1)
|
for(u32 i = 0; i < ctx.font_descs.length; i += 1)
|
||||||
{
|
{
|
||||||
CreateDescriptor(&ctx.font_descs[i], DescInfo(
|
CreateDescriptor(&ctx.font_descs[i], DescInfo(
|
||||||
@ -704,7 +504,6 @@ InitUI(Ctx* ctx)
|
|||||||
{
|
{
|
||||||
Write(ctx.desc_sets[i], ctx.font_descs);
|
Write(ctx.desc_sets[i], ctx.font_descs);
|
||||||
Write(ctx.desc_sets[i], &ctx.sampler);
|
Write(ctx.desc_sets[i], &ctx.sampler);
|
||||||
Write(ctx.desc_sets[i], &ctx.msdf_texture);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SetClearColors([0.0, 0.0, 0.0, 1.0], [0.0, 0.0, 0.0, 0.0]);
|
SetClearColors([0.0, 0.0, 0.0, 1.0], [0.0, 0.0, 0.0, 0.0]);
|
||||||
@ -2204,6 +2003,8 @@ DrawText(T, U, V)(Ctx* ctx, T text_param, U col_param, V text_size_param, Rect r
|
|||||||
|
|
||||||
AnimateReady(ready, &col);
|
AnimateReady(ready, &col);
|
||||||
DrawGlyph(rect, g, &x, rect.p0.y, fs.line_height, fs.size, col);
|
DrawGlyph(rect, g, &x, rect.p0.y, fs.line_height, fs.size, col);
|
||||||
|
|
||||||
|
if(x > rect.p1.x) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else static if(is(U == Vec4))
|
else static if(is(U == Vec4))
|
||||||
@ -2216,6 +2017,8 @@ DrawText(T, U, V)(Ctx* ctx, T text_param, U col_param, V text_size_param, Rect r
|
|||||||
u8 ch = text[j];
|
u8 ch = text[j];
|
||||||
Glyph* g = ch < fs.glyphs.length ? fs.glyphs.ptr + ch : null;
|
Glyph* g = ch < fs.glyphs.length ? fs.glyphs.ptr + ch : null;
|
||||||
DrawGlyph(rect, g, &x, rect.p0.y, fs.line_height, fs.size, hl_char == j ? InvertCol(col) : col);
|
DrawGlyph(rect, g, &x, rect.p0.y, fs.line_height, fs.size, hl_char == j ? InvertCol(col) : col);
|
||||||
|
|
||||||
|
if(x > rect.p1.x) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else static assert(false, "invalid input parameter, U must be TokenStyle[] or Vec4");
|
else static assert(false, "invalid input parameter, U must be TokenStyle[] or Vec4");
|
||||||
@ -2546,8 +2349,6 @@ DrawGlyph(Rect rect, Glyph* glyph, f32* x_pos, f32 y, f32 line_height, u32 size,
|
|||||||
{
|
{
|
||||||
if(glyph)
|
if(glyph)
|
||||||
{
|
{
|
||||||
const(MSDFGlyph)* msdf_glyph = &MSDF_INFO.glyphs[glyph.ch];
|
|
||||||
|
|
||||||
Ctx* ctx = GetCtx();
|
Ctx* ctx = GetCtx();
|
||||||
Vertex* v = null;
|
Vertex* v = null;
|
||||||
f32 advance = glyph.advance;
|
f32 advance = glyph.advance;
|
||||||
@ -2562,19 +2363,20 @@ DrawGlyph(Rect rect, Glyph* glyph, f32* x_pos, f32 y, f32 line_height, u32 size,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
f32 w = glyph.plane_right-glyph.plane_left;
|
f32 w = glyph.plane.right-glyph.plane.left;
|
||||||
f32 h = glyph.plane_bottom-glyph.plane_top;
|
f32 h = glyph.plane.bottom-glyph.plane.top;
|
||||||
|
|
||||||
|
|
||||||
v = GetVertex(ctx);
|
v = GetVertex(ctx);
|
||||||
|
|
||||||
f32 y_pos = y + glyph.plane_top;
|
f32 y_pos = y + glyph.plane.top;
|
||||||
|
|
||||||
// Need to change how the quads are calculated, i had changed it so they were all same height and same top/bottom placement as it was easier to draw rasterized glyphs that way but doesn't work when the SDFs are not generated in a similar way
|
// Need to change how the quads are calculated, i had changed it so they were all same height and same top/bottom placement as it was easier to draw rasterized glyphs that way but doesn't work when the SDFs are not generated in a similar way
|
||||||
v.dst_start = Vec2(*x_pos+glyph.plane_left, y_pos);
|
v.dst_start = Vec2(*x_pos+glyph.plane.left, y_pos);
|
||||||
v.dst_end = Vec2(*x_pos+glyph.plane_left+w, y_pos+h);
|
v.dst_end = Vec2(*x_pos+glyph.plane.left+w, y_pos+h);
|
||||||
v.cols = col;
|
v.cols = col;
|
||||||
v.src_start = Vec2(glyph.atlas_left, glyph.atlas_top); // Vec2(msdf_glyph.atlas.left, msdf_glyph.atlas.top);
|
v.src_start = Vec2(glyph.atlas.left, glyph.atlas.top);
|
||||||
v.src_end = Vec2(glyph.atlas_right, glyph.atlas_bottom); // Vec2(msdf_glyph.atlas.right, msdf_glyph.atlas.bottom);
|
v.src_end = Vec2(glyph.atlas.right, glyph.atlas.bottom);
|
||||||
v.has_texture = true;
|
v.has_texture = true;
|
||||||
|
|
||||||
f32 end_x = *x_pos + advance;
|
f32 end_x = *x_pos + advance;
|
||||||
|
|||||||
@ -65,20 +65,6 @@ Median(vec3 v)
|
|||||||
return max(min(v.r, v.g), min(max(v.r, v.g), v.b));
|
return max(min(v.r, v.g), min(max(v.r, v.g), v.b));
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
|
||||||
GetMSDFTexel()
|
|
||||||
{
|
|
||||||
vec2 dx = 0.25 * dFdx(FD.uv);
|
|
||||||
vec2 dy = 0.25 * dFdy(FD.uv);
|
|
||||||
float center = Median(texture(MSDFAtlas, FD.uv).rgb);
|
|
||||||
float s0 = Median(texture(MSDFAtlas, FD.uv - dx - dy).rgb);
|
|
||||||
float s1 = Median(texture(MSDFAtlas, FD.uv + dx - dy).rgb);
|
|
||||||
float s2 = Median(texture(MSDFAtlas, FD.uv - dx + dy).rgb);
|
|
||||||
float s3 = Median(texture(MSDFAtlas, FD.uv + dx + dy).rgb);
|
|
||||||
|
|
||||||
return mix(center, 0.25 * (s0+s1+s2+s3), 0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec2
|
vec2
|
||||||
Square(vec2 x)
|
Square(vec2 x)
|
||||||
{
|
{
|
||||||
@ -126,17 +112,7 @@ void main()
|
|||||||
vec4 tex_color = vec4(1.0); // ToLinear(FD.color);
|
vec4 tex_color = vec4(1.0); // ToLinear(FD.color);
|
||||||
if(FDF.has_texture != 0)
|
if(FDF.has_texture != 0)
|
||||||
{
|
{
|
||||||
// old:
|
|
||||||
tex_color = texture(SpriteAtlas, FD.uv);
|
tex_color = texture(SpriteAtlas, FD.uv);
|
||||||
|
|
||||||
/*
|
|
||||||
float sd = Median(texture(MSDFAtlas, FD.uv).rgb);
|
|
||||||
float px_range = ScreenPxRange();
|
|
||||||
float screen_px_dist = ScreenPxRange() * (sd-0.5);
|
|
||||||
float opacity = clamp(0.5 + screen_px_dist/fwidth(screen_px_dist), 0.0, 1.0);
|
|
||||||
|
|
||||||
color.a *= opacity;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 color = FD.color * tex_color;
|
vec4 color = FD.color * tex_color;
|
||||||
|
|||||||
@ -4,7 +4,6 @@ layout(rgba16f, set = 0, binding = 0) uniform image2D DrawImage;
|
|||||||
|
|
||||||
layout(set = 1, binding = 0) uniform texture2D SpriteAtlasArray[24];
|
layout(set = 1, binding = 0) uniform texture2D SpriteAtlasArray[24];
|
||||||
layout(set = 1, binding = 1) uniform sampler SamplerNearest;
|
layout(set = 1, binding = 1) uniform sampler SamplerNearest;
|
||||||
layout(set = 1, binding = 2) uniform texture2D MSDFAtlasTexture;
|
|
||||||
|
|
||||||
layout (push_constant) uniform Constants {
|
layout (push_constant) uniform Constants {
|
||||||
mat4 projection;
|
mat4 projection;
|
||||||
@ -17,7 +16,6 @@ layout (push_constant) uniform Constants {
|
|||||||
} PC;
|
} PC;
|
||||||
|
|
||||||
#define SpriteAtlas sampler2D(SpriteAtlasArray[PC.atlas_index], SamplerNearest)
|
#define SpriteAtlas sampler2D(SpriteAtlasArray[PC.atlas_index], SamplerNearest)
|
||||||
#define MSDFAtlas sampler2D(MSDFAtlasTexture, SamplerNearest)
|
|
||||||
|
|
||||||
#ifdef VERT_SHADER
|
#ifdef VERT_SHADER
|
||||||
# define FragData out struct FragDataOut
|
# define FragData out struct FragDataOut
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user