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;
753752static int fontdata_color;
754753static int fontsystem_size;
755754static int fontsystem_style;
756- static int fontsystem_texid;
757755
758756static 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-
773766void 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;
0 commit comments