Skip to content

Commit 9d129e5

Browse files
committed
Extra map now rendering
TODO: make it work with multi-atlases & tidy up
1 parent 3655dad commit 9d129e5

File tree

10 files changed

+75
-15
lines changed

10 files changed

+75
-15
lines changed

examples/assets/fonts/Arial3/Arial.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
124 KB
Loading
53.4 KB
Loading

examples/user-interface/text-outline.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
});
9393

9494
//var fontAsset2 = new pc.Asset('OpenSans-Bold.json', "font", {url: "../assets/fonts/OpenSans-Bold.json"});
95-
var fontAsset2 = new pc.Asset('Arial_2.json', "font", {url: "../assets/fonts/Arial_2.json"});
95+
var fontAsset2 = new pc.Asset('Arial.json', "font", {url: "../assets/fonts/Arial3/Arial.json"});
9696
fontAsset2.on('load', function () {
9797
// Apply the font to the text element
9898
text2.element.fontAsset = fontAsset2;

src/bundles/bundle-registry.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ Object.assign(pc, function () {
104104
var numFiles = asset.data.info.maps.length;
105105
for (var i = 1; i < numFiles; i++) {
106106
urls.push(url.replace('.png', i + '.png'));
107+
if (asset.data.version >= 4)
108+
{
109+
urls.push(url.replace('.png', i + 'A.png'));
110+
}
107111
}
108112
}
109113

src/framework/components/element/system.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ Object.assign(pc, function () {
314314
this.defaultScreenSpaceTextMaterial = new pc.StandardMaterial();
315315
this.defaultScreenSpaceTextMaterial.name = "defaultScreenSpaceTextMaterial";
316316
this.defaultScreenSpaceTextMaterial.msdfMap = this._defaultTexture;
317+
this.defaultScreenSpaceTextMaterial.msdfMapA = this._defaultTexture;
317318
this.defaultScreenSpaceTextMaterial.useLighting = false;
318319
this.defaultScreenSpaceTextMaterial.useGammaTonemap = false;
319320
this.defaultScreenSpaceTextMaterial.useFog = false;
@@ -357,6 +358,7 @@ Object.assign(pc, function () {
357358
this.defaultTextMaterial = new pc.StandardMaterial();
358359
this.defaultTextMaterial.name = "defaultTextMaterial";
359360
this.defaultTextMaterial.msdfMap = this._defaultTexture;
361+
this.defaultTextMaterial.msdfMapA = this._defaultTexture;
360362
this.defaultTextMaterial.useLighting = false;
361363
this.defaultTextMaterial.useGammaTonemap = false;
362364
this.defaultTextMaterial.useFog = false;

src/framework/components/element/text-element.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ Object.assign(pc, function () {
249249
var i;
250250
var len;
251251

252-
var multiPassNeeded = (this._outlineThickness > 1.0 && this._font.textures.length == 1);
253-
var mesh_num_needed = (multiPassNeeded) ? 5 : this._font.textures.length;
252+
var multiPassNeeded = (this._outlineThickness > 1.0 && this._font.textures[0].length == 1);
253+
var mesh_num_needed = (multiPassNeeded) ? 5 : this._font.textures[0].length;
254254

255255
for (i = 0, len = mesh_num_needed; i < len; i++) {
256256
var ti = (multiPassNeeded) ? 0 : i;
@@ -264,11 +264,12 @@ Object.assign(pc, function () {
264264
mi.setParameter("font_sdfIntensity", this._font.intensity);
265265
mi.setParameter("font_pxrange", this._getPxRange(this._font));
266266
mi.setParameter("font_textureWidth", this._font.data.info.maps[ti].width);
267-
this._setTextureParams(mi, this._font.textures[ti]);
268267

269268
if (multiPassNeeded) {
269+
this._setTextureParams(mi, this._font.textures[0][ti], this._font.textures[1][ti]);
270270
mi.setParameter("render_pass", RenderPass.TEXT);
271271
} else {
272+
this._setTextureParams(mi, this._font.textures[0][ti], null);
272273
mi.setParameter("render_pass", RenderPass.ALL_IN_ONE);
273274
}
274275
}
@@ -325,7 +326,7 @@ Object.assign(pc, function () {
325326
var results;
326327
var tags;
327328

328-
if (this._multiPassEnabled != (this._outlineThickness > 1.0 && this._font.textures.length == 1)) {
329+
if (this._multiPassEnabled != (this._outlineThickness > 1.0 && this._font.textures[0].length == 1)) {
329330
this._updateMeshInfos();
330331
this._updateMaterial(this._element._isScreenSpace());
331332
}
@@ -540,7 +541,15 @@ Object.assign(pc, function () {
540541
mi.isVisibleFunc = visibleFn;
541542
}
542543

543-
this._setTextureParams(mi, this._font.textures[ti]);
544+
if (this._multiPassEnabled)
545+
{
546+
this._setTextureParams(mi, this._font.textures[0][ti], this._font.textures[1][ti]);
547+
}
548+
else
549+
{
550+
this._setTextureParams(mi, this._font.textures[0][ti], null);
551+
}
552+
544553
if (this._symbolColors) {
545554
// when per-vertex coloring is present, disable material emissive color
546555
this._colorUniform[0] = 1;
@@ -874,7 +883,7 @@ Object.assign(pc, function () {
874883
} else {
875884
// Move back to the beginning of the current word.
876885
var backtrack = Math.max(i - wordStartIndex, 0);
877-
if (this._font.textures.length <= 1) {
886+
if (this._font.textures[0].length <= 1) {
878887
meshInfo.lines[lines - 1] -= backtrack;
879888
meshInfo.quad -= backtrack;
880889
} else {
@@ -1163,12 +1172,20 @@ Object.assign(pc, function () {
11631172

11641173
},
11651174

1166-
_setTextureParams: function (mi, texture) {
1175+
_setTextureParams: function (mi, texture, textureA) {
11671176
if (this._font) {
11681177
if (this._font.type === pc.FONT_MSDF) {
11691178
mi.deleteParameter("texture_emissiveMap");
11701179
mi.deleteParameter("texture_opacityMap");
11711180
mi.setParameter("texture_msdfMap", texture);
1181+
if (textureA)
1182+
{
1183+
mi.setParameter("texture_msdfMapA", textureA);
1184+
}
1185+
else
1186+
{
1187+
mi.setParameter("texture_msdfMapA", texture);
1188+
}
11721189
} else if (this._font.type === pc.FONT_BITMAP) {
11731190
mi.deleteParameter("texture_msdfMap");
11741191
mi.setParameter("texture_emissiveMap", texture);
@@ -1642,7 +1659,7 @@ Object.assign(pc, function () {
16421659
// make sure we have as many meshInfo entries
16431660
// as the number of font textures and outline passes
16441661

1645-
this._multiPassEnabled = !(this._outlineThickness > 1.0 && this._font.textures.length == 1); // this line forces a call to _updateMeshInfos
1662+
this._multiPassEnabled = !(this._outlineThickness > 1.0 && this._font.textures[0].length == 1); // this line forces a call to _updateMeshInfos
16461663

16471664
this._updateText();
16481665

src/graphics/program-lib/chunks/msdf.frag

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
uniform sampler2D texture_msdfMap;
22

3+
#define MSDFA
4+
#ifdef MSDFA
5+
uniform sampler2D texture_msdfMapA;
6+
#endif
7+
38
#ifdef GL_OES_standard_derivatives
49
#define USE_FWIDTH
510
#endif
@@ -37,11 +42,12 @@ vec4 applyMsdf(vec4 color) {
3742
float sigDist = median(tsample.r, tsample.g, tsample.b);
3843
float sigDistShdw = median(ssample.r, ssample.g, ssample.b);
3944

40-
float tsamplea = texture2D(texture_msdfMap, vUv0).a;
41-
float ssamplea = texture2D(texture_msdfMap, uvShdw).a;
42-
45+
#ifdef MSDFA
46+
float tsamplea = texture2D(texture_msdfMapA, vUv0).r;
47+
float ssamplea = texture2D(texture_msdfMapA, uvShdw).r;
4348
sigDist=mix(sigDist,tsamplea, clamp((0.4-tsamplea)*10.0,0.0,1.0));
4449
sigDistShdw=mix(sigDistShdw,ssamplea, clamp((0.4-ssamplea)*10.0,0.0,1.0));
50+
#endif
4551

4652
#ifdef USE_FWIDTH
4753
// smoothing depends on size of texture on screen
@@ -71,6 +77,7 @@ vec4 applyMsdf(vec4 color) {
7177
vec4 scolor = max(shadow,outline)*mix(vec4(shadow_color.a * shadow_color.rgb, shadow_color.a), vec4(outline_color.a * outline_color.rgb, outline_color.a), outline);
7278
vec4 tcolor = mix(scolor, color, inside);
7379

80+
#ifdef MSDFA
7481
if (render_pass==1.0 && inside==0.0)
7582
{
7683
discard;
@@ -95,6 +102,7 @@ vec4 applyMsdf(vec4 color) {
95102
{
96103
return vec4(0.0);
97104
}
105+
#endif
98106

99107
return vec4(tcolor.rgb,tcolor.a);
100108
}

src/resources/font.js

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Object.assign(pc, function () {
2020
newChars[newKey] = existing;
2121
return newChars;
2222
}, {});
23-
data.version = Math.max(data.version, 3);
23+
data.version = Math.max(data.version+1, 3);
2424
}
2525
return data;
2626
}
@@ -60,7 +60,8 @@ Object.assign(pc, function () {
6060

6161
callback(null, {
6262
data: data,
63-
textures: textures
63+
textures: textures//,
64+
//textures2: textures2
6465
});
6566
});
6667
} else {
@@ -80,12 +81,38 @@ Object.assign(pc, function () {
8081
_loadTextures: function (url, data, callback) {
8182
var numTextures = data.info.maps.length;
8283
var numLoaded = 0;
84+
8385
var error = null;
8486

8587
var textures = new Array(numTextures);
8688
var loader = this._loader;
8789

90+
var textures2 = null;
91+
8892
var loadTexture = function (index) {
93+
if (data.version >= 4)
94+
{
95+
textures2 = new Array(numTextures);
96+
97+
var onLoaded2 = function (err, texture) {
98+
if (error) return;
99+
100+
if (err) {
101+
error = err;
102+
return callback(err);
103+
}
104+
105+
texture.upload();
106+
textures2[index] = texture;
107+
};
108+
109+
if (index === 0) {
110+
loader.load(url.replace('.png', 'A.png'), "texture", onLoaded2);
111+
} else {
112+
loader.load(url.replace('.png', index + 'A.png'), "texture", onLoaded2);
113+
}
114+
}
115+
89116
var onLoaded = function (err, texture) {
90117
if (error) return;
91118

@@ -98,7 +125,7 @@ Object.assign(pc, function () {
98125
textures[index] = texture;
99126
numLoaded++;
100127
if (numLoaded === numTextures) {
101-
callback(null, textures);
128+
callback(null, [textures, textures2]);
102129
}
103130
};
104131

src/scene/materials/standard-material-options-builder.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ Object.assign(pc, function () {
115115
options.refraction = !!stdMat.refraction;
116116
options.useMetalness = stdMat.useMetalness;
117117
options.msdf = !!stdMat.msdfMap;
118+
options.msdfA = !!stdMat.msdfMapA;
118119
options.twoSidedLighting = stdMat.twoSidedLighting;
119120
options.pixelSnap = stdMat.pixelSnap;
120121
options.aoMapUv = stdMat.aoUvSet; // backwards componen

0 commit comments

Comments
 (0)