Skip to content

Commit adca5e1

Browse files
committed
[js] fontsystemの最適化
1 parent 2b3f391 commit adca5e1

File tree

5 files changed

+24
-61
lines changed

5 files changed

+24
-61
lines changed

src/hsp3dish/emscripten/fontsystem.cpp

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
#define USE_JAVA_FONT
6464
#define FONT_TEX_SX 512
6565
#define FONT_TEX_SY 128
66-
int hgio_fontsystem_get_texid(void);
6766
#endif
6867

6968
#if defined(HSPLINUX) || defined(HSPEMSCRIPTEN)
@@ -753,7 +752,6 @@ static int fontdata_size;
753752
static int fontdata_color;
754753
static int fontsystem_size;
755754
static int fontsystem_style;
756-
static int fontsystem_texid;
757755

758756
static int Get2N(int val)
759757
{
@@ -765,11 +763,6 @@ static int Get2N(int val)
765763
return res;
766764
}
767765

768-
int hgio_fontsystem_get_texid(void)
769-
{
770-
return fontsystem_texid;
771-
}
772-
773766
void hgio_fontsystem_term(void)
774767
{
775768
// フォントレンダリング解放
@@ -811,10 +804,11 @@ int hgio_fontsystem_exec(char* msg, unsigned char* buffer, int pitch, int* out_s
811804
}
812805
d.style.setProperty("font", $1 + "px 'sans-serif'");
813806

814-
const t = document.createTextNode(UTF8ToString($0));
815-
if (d.hasChildNodes())
816-
d.removeChild(d.firstChild);
817-
d.appendChild(t);
807+
//const t = document.createTextNode(UTF8ToString($0));
808+
//if (d.hasChildNodes())
809+
// d.removeChild(d.firstChild);
810+
//d.appendChild(t);
811+
d.innerText = UTF8ToString($0);
818812
HEAP32[$2 >> 2] = d.clientWidth | 0;
819813
HEAP32[$3 >> 2] = d.clientHeight | 0;
820814

@@ -854,33 +848,22 @@ int hgio_fontsystem_exec(char* msg, unsigned char* buffer, int pitch, int* out_s
854848
int sx = Get2N(fontsystem_sx);
855849
int sy = Get2N(fontsystem_sy);
856850

857-
GLuint id;
858-
glGenTextures( 1, &id );
859-
glBindTexture( GL_TEXTURE_2D, id );
860-
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, sx, sy, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL );
861-
862-
glBindTexture( GL_TEXTURE_2D, id );
863-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
864-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
865-
866-
glPixelStorei( GL_UNPACK_ALIGNMENT, 1);
867-
868851
EM_ASM_({
869852
var canvas = document.getElementById('hsp3dishFontCanvas');
870-
if (canvas) {
871-
document.body.removeChild(canvas);
853+
if (!canvas) {
854+
//document.body.removeChild(canvas);
855+
canvas = document.createElement("canvas");
856+
canvas.id = 'hsp3dishFontCanvas';
857+
canvas.style.setProperty("visibility", "hidden");
858+
canvas.style.setProperty("position", "absolute");
859+
canvas.style.setProperty("top", "0");
860+
canvas.style.setProperty("left", "0");
861+
canvas.width = $2;
862+
canvas.height = $3;
863+
document.body.appendChild(canvas);
872864
}
873-
canvas = document.createElement("canvas");
874-
canvas.id = 'hsp3dishFontCanvas';
875-
canvas.style.setProperty("visibility", "hidden");
876-
canvas.style.setProperty("position", "absolute");
877-
canvas.style.setProperty("top", "0");
878-
canvas.style.setProperty("left", "0");
879-
canvas.width = $2;
880-
canvas.height = $3;
881-
document.body.appendChild(canvas);
882-
883-
var context = canvas.getContext("2d");
865+
866+
var context = canvas.getContext("2d", { willReadFrequently: true });
884867
context.font = $1 + "px 'sans-serif'";
885868

886869
var msg = UTF8ToString($0);
@@ -889,12 +872,11 @@ int hgio_fontsystem_exec(char* msg, unsigned char* buffer, int pitch, int* out_s
889872
context.fillText(msg, 0, $1);
890873
//console.log(msg);
891874

892-
GLctx.texImage2D(GLctx.TEXTURE_2D, 0, GLctx.RGBA, GLctx.RGBA, GLctx.UNSIGNED_BYTE, canvas);
893-
}, msg, fontsystem_size, sx, sy);
894-
875+
//GLctx.texImage2D(GLctx.TEXTURE_2D, 0, GLctx.RGBA, GLctx.RGBA, GLctx.UNSIGNED_BYTE, context.getImageData(0, 0, $2, $3));
876+
var imageData = context.getImageData(0, 0, $2, $3);
877+
HEAPU8.set(imageData.data, $4);
895878

896-
glBindTexture(GL_TEXTURE_2D, 0);
897-
fontsystem_texid = (int)id;
879+
}, msg, fontsystem_size, sx, sy, buffer);
898880

899881
//Alertf( "Init:Surface(%d,%d) %d destpitch%d",fontsystem_sx,fontsystem_sy,fontdata_color,pitch );
900882
*out_sx = fontsystem_sx;

src/hsp3dish/emscripten/hgiox.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
#define USE_JAVA_FONT
6464
#define FONT_TEX_SX 512
6565
#define FONT_TEX_SY 128
66-
int hgio_fontsystem_get_texid(void);
6766
#endif
6867

6968
#if defined(HSPLINUX) || defined(HSPEMSCRIPTEN)
@@ -493,9 +492,11 @@ void hgio_reset( void )
493492
//ポイントの設定
494493
glEnable(GL_POINT_SMOOTH);
495494

495+
#if !defined(HSPEMSCRIPTEN)
496496
//前処理
497497
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
498498
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
499+
#endif
499500

500501
//テクスチャ設定リセット
501502
TexReset();
@@ -2163,9 +2164,6 @@ void hgio_fontsystem_delete(int id)
21632164

21642165
int hgio_fontsystem_setup(int sx, int sy, void *buffer)
21652166
{
2166-
#if defined(HSPEMSCRIPTEN)
2167-
return hgio_fontsystem_get_texid();
2168-
#else
21692167
GLuint id;
21702168
glGenTextures( 1, &id );
21712169
glBindTexture( GL_TEXTURE_2D, id );
@@ -2175,7 +2173,6 @@ int hgio_fontsystem_setup(int sx, int sy, void *buffer)
21752173
ChangeTex( tid );
21762174
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, sx,sy, GL_RGBA, GL_UNSIGNED_BYTE, (char *)buffer);
21772175
return tid;
2178-
#endif
21792176
}
21802177

21812178

src/hsp3dish/emscripten/hgtex.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
#define USE_JAVA_FONT
6262
#define FONT_TEX_SX 512
6363
#define FONT_TEX_SY 128
64-
int hgio_fontsystem_get_texid(void);
6564
#endif
6665

6766
#if defined(HSPLINUX) || defined(HSPEMSCRIPTEN)

src/hsp3dish/texmes.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,8 @@ void texmes::reset(int width, int height, int p_texsx, int p_texsy, void *data)
7777
texsy = p_texsy;
7878

7979
#ifdef HSPDISHGP
80-
#ifdef HSPEMSCRIPTEN
81-
TextureHandle texid;
82-
texid = hgio_fontsystem_setup( texsx, texsy, data);
83-
Texture* texture = Texture::create(texid,texsx, texsy, Texture::Format::RGBA);
84-
#else
8580
Texture* texture = Texture::create(Texture::Format::RGBA, texsx, texsy, NULL, false, Texture::TEXTURE_2D);
8681
texture->setData((const unsigned char*)data);
87-
#endif
8882
// Bind the texture to the material as a sampler
8983
_texture = Texture::Sampler::create(texture); // +ref texture
9084
_texture->setFilterMode(Texture::Filter::NEAREST, Texture::Filter::NEAREST);

src/hsp3dish/win32gp/hgiox.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
#ifdef HSPEMSCRIPTEN
3939
#include <emscripten.h>
4040
#include <unistd.h>
41-
int hgio_fontsystem_get_texid(void);
4241
#define GL_GLEXT_PROTOTYPES
4342
#include <GL/gl.h>
4443
#include <GL/glext.h>
@@ -2047,14 +2046,6 @@ int hgio_font(char* fontname, int size, int style)
20472046
}
20482047

20492048

2050-
#if defined(HSPEMSCRIPTEN)
2051-
int hgio_fontsystem_setup(int sx, int sy, void *buffer)
2052-
{
2053-
return hgio_fontsystem_get_texid();
2054-
}
2055-
#endif
2056-
2057-
20582049
void hgio_editputclip(BMSCR* bm, char *str)
20592050
{
20602051
// クリップボードコピー

0 commit comments

Comments
 (0)