One in two BitmapFont lose transparency on Android

Found a bug? Post information about it here so we can fix it!

Moderator: Moderators

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

One in two BitmapFont lose transparency on Android

Post by Ats » Tue May 04, 2021 7:55 am

There is a bug on Android with fonts. It was hard to track down.
So I made a simple test to show it up:

Code: Select all

<?xml version="1.0" encoding="iso-8859-1" ?>
<ZApplication Name="App" Caption="Test Font" ClearColor="0.251 0.502 0.502 1" FileVersion="2" AndroidPackageName="com.txori.test_font">
  <OnRender>
    <UseMaterial Material="BlackMaterial"/>
    <RenderText Text="BLACK0" X="-0.3" Y="0.8" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="BLACK1" X="-0.3" Y="0.4" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="BLACK2" X="-0.3" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="BLACK3" X="-0.3" Y="-0.4" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="BLACK4" X="-0.3" Y="-0.8" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <UseMaterial Material="AlphaMaterial"/>
    <RenderText Text="ALPHA5" X="0.3" Y="0.8" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="ALPHA6" X="0.3" Y="0.4" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="ALPHA7" X="0.3" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="ALPHA8" X="0.3" Y="-0.4" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
    <RenderText Text="ALPHA9" X="0.3" Y="-0.8" Scale="0.52">
      <RenderCharExpression>
<![CDATA[//Modify current character before render.
//CharX,CharY : current coordinate
//CharI : current character index (read only)
//CharRotate : current character rotation in radians
//CharScale : current character scale

//CharY=sin(App.Time+CharI*0.5)*0.5;]]>
      </RenderCharExpression>
    </RenderText>
  </OnRender>
  <Content>
    <Group Name="FontBlack">
      <Children>
        <Bitmap Name="BlackBitmap" Width="529" Height="165">
          <Producers>
            <BitmapFromFile Comment="Imported from Pixel_LCD7_bold_double_black.png" Transparency="1" HasAlphaLayer="1" DataWidth="529" DataHeight="165">
              <BitmapFile>
<![CDATA[789CED5C5B92ED360EBB7BCAFED736F9989ACA89C796F800294882ABF0D3DDA64090A078BA6FF2E7CF9FFFFC11044110044110FE85BFFEFAEB15AB790982200882C08BAFFD417B842008822060C174C7CEEEFFD95EF0FBB5E733CB11AD43245E34FFCE1A769E89D2A393E30E3A647A72856E2BF367E62208ABC1D4CF483F7E3D5FF9A17588C4DB6126759EB9C3ACDE59874C4F76EAB6327F662E82B01ABFBD6BFDACDEC9C5FA3C7D68F9D94A1D22F132F98FF4E8AA11FA4CA41E9D1C77D0C1CAB52A3F4FDC95F933D5421018D1751F587964FC69797F36A7103A58EE594F2DA24F450DADFA32F4C34C932CCF8E7DAA4A07AB1E15F979FDB132FFCE5AFCF241CF5741A8C2C80F5D7BC4D39B557B4464567A7598F1EFDC21BCDCB3FD32CB6F453F7C6991D525B3AFAED6C1A3077A3E44FDB12AFFAE5A3C3955CE5B4140A2E34EF072A8D823AC3322A383E75E89BE9FD10251C7CE1DE22D07840E59AED67B24AB7D850E5E3D907B12933FBCFD50598BB79895F356109060DC21B21EFDFACC30CA23AB83952F2A4E4607F67EA9EC872CD72F4D2BB48FEAE0B9F7677A787A7A177F44FA01DD93234E95B35610D060DD21A21E1DED0F553B84773ECEF4AC9A938839B56A87F8CA29A24394EB4C53B4F6111D3CBB8D450F446F33F923DA0FC89E1CC5A89CB3825001E61DE2E92F0FBC3E8DEA809E8F6F713340CFAB953B04B21FBC5C3DF7364AFB0A1D227A647A9CD51F9EFCAB6B81F08C20AC42C79D80E290990F9919F1F56ED57C7C8B8F9A93D99A76F40B433F78EBEC3DD373AE5707EBF73D7A447A9DD51F99FCBD795B51395F05A1121D774217878E19F1FCF9AAF9C8A0E7AA7E61E8874C9D513D11B9B7223F63D563A516AB7DC1968B20B0403B44EC5DE699A21D0213277A67A27AC3BB43A07ECEA2A935BFAC062CBE60DC89048101DA2162EF7AE6F64935BD6587C8DC19A8FB867187B0E6C7E88F153B65B7F705A11BDA2162EF8E7E7EF50CD10E51DF0FB33A7BEF9B0CFFEE1D6296DFECBC55FE40E4AF3D4210FE0DEFFC99A19243651CB40E15B3C37B7E56CFCA5A9DD40F967A5573E8DE21BEF29BF562853FBA7DA13D4210FEC1C80B917B33E2172B076B9C592C561DACB965E7E5CE3B045B3F3070F0EE10C8BEF0EC0C0CFB032A7F8BEECFFC91F3401058F0E503AB47107EB170F0C61AC563D52192938583478768AD10B177EB07060ED11D02D917D6B895FB83F541E61FD11E95BB20B060F6D9C1FBA0666CC67791780C3A58794538A07859EF8ACA9E64E8874E0E5F1A7BF602CBCF23FA62D68B99BE60F4C58CC79BE6280D048105D67914F1A8D5375F1CD039B1EBF0C503C981ED8EDFAD1FBA38CCEEFFAF9FFBAABD376E24B7591FA27B82C1175F7CD01A0B022B3AEE4EF679CDAE039203B25FDECEA9EC49867EE8E2A01D82CB9B117E4F8EDA2384D3309B3D196F5A7D83BE932A3830E890E150D92FE8F376E8874E0E5F1A5BEE54CFCFB3EE100CDEF4F21C71D31E219C04CBECC978F3F9BD28076F3E151C18748870E8E8174B7EC89E64E807060E96DEF0EE1BD17A59F9EE38A3505ABCF140FA5310BA61DD973D18C5CA70B0E652C98141070F3AFB65961FBA2719FA8181436487F072B1E4F7161FD1970CDE8C6A327A2A7D2A085D88CC1FAF3767FE44DD4B1D1C187458B53F206BD571C66D3D89FA396F9D2C3BC3DBF7779A51D11ED61E219C8E9D66A538AC9F35DA21F838ACD82146F166E779EF4D865A64FA587B84703218FC290E580E3BF48B7A12C7A17B87F0C4B270DAA11FB2BDAC3D4238150CFE14072C871DFA453D89E3D0B94378EF44CBCF58CFCCF05EE92FED11C2C960F0A7386039ECD02FEA491C87AE1D22721722EE4D865AA07C63D563A5C705C103EFFC9921E20D71A8E1F044A63F667922CF66B83376E280FEB9591F8C1EAF1F9EEFB0D6C2EB8B8AF920088C18F534D21FD119712387B777B3332B329B50677ACF66B83376E2E0ED1B2F17CBBBCFB310EF32D5A2C217190E82C002CBECB13E9659260EE319F1F66E84C38893A72F3C7718FAEC59BCCA38BB7198F54D940B720788C660A88537176B9ED15C0481056FBD9CF1C9D7BBDE597923872717EB1D1DE1643DDF1A1375F6572DDE6255C6D991C357DF64B864F7076F4F31EF10555E8CE422082C78F671D59EED9995B77278E3839A596F9C66E7A21FEF0E338BE3ED6D4F9C5D397CED0FD978B377BC3D5DC1A1A316555EF4E622082C78CE9C8A3DDB736FDDCC61C409F964EEADCAB32D1C9077565407760EB3AF7BB8A07460E050558BCC93990F82C002F4BDF9E50F71F0CF874A3EA3F3AA9ECC0E81BEB3223AECCA21CAE5340EE85A201EED0FC209A8BE3BC5213E1F909C665C2AF2B79E3DE280BEB3223AECCE2112F7440EA85AA01EED0FC22978EEC32888437E3E7472A9CADFA3035A43A40E3B7388C43D91C3AEBE10047630F8421C6A39ADC83FA2035A43840E277088C43D91C3AEBE1004411004411004411004411004411004411004613F30FCBDF3EBDD9DFFFD8374887363FABB35531FACF4264A17D5221FEF241D2271550B1EA0F3C8C463A801BA1FA4839F1B93B718FB80C1EB2B7A53B5384F87485CD58207BF9C57FDF7DFA377BBFF7B6F04872CB7DB7540F724DA1FD5F9337A13A9CB8A33B35C986A71920E91B8AA0517BEF28FE431D27316EBF7DD6C3D10336AD50E211D6AFEFF8C196F54CE084B2F2074C878D3C3CDAB816AE1D3A5438748DDD177F8488F9B6AB1C31E31CADF93C74C4BCB9D51757F7ABCB1D2A3D53A783DB55A07443E595FA075F88ACBEACD488D7E63CEBEAF5AD875E9D0A1EBBEC8E8714B2DBA661D6A56CE72AA8CF37C1751136F2D2A38BCC5F26858A183B78E0C3A7CC5E9F405BA16965C18BC19896999AB9E334FA98585F7CA39D9795F64E231F882A12759C0588F6C4D46B5E8E2603DB74B87CCFDCDA0C35BAC6E5FA07B72960B8337BD31BF7A2E73E609B5B0F25D3527BBEF8B4C3C065F30F4240B58EB11AD49746E2139BCBD8B9ACB91B33D7C987578C65BE10B869EF4EA50A1E7ACBFAC5FBBA116569E335DAA7458715F64E231F882A12759C05C8FA7BE1E307040FA09A543744EB1E830AB63872F187AD2A343959E919E63F545552D6667BEE5D1A9C3AAFB22138FC1170C3DC902F67A446AC2C021527BE95033A72A7DC1508B957A7AF33CDD175FDA8C1EAB2E681D2A7D51190FC1816D4EA2F45C018639751207D5824707060E0CB5E8D0B3F20C061DBCEFA2F787D37C918997E580B8BF197A92050C5A9CC441B5E0D1818103432DB443F4D6A2627F38CD179978883A6A87E0EB89DDEBC1504BE9701E07865A6887E8AB45D5FE709A2F32F1A21C9EB5B9C59BD560D0E2240EAA058F0E0C1C186AA11DA2AF1655FBC369BEC8C4CBBCF3FBDE2DDEAC86D71B3354D6838103432D2AE3A06BC1D0939DB538CD17DDBD7B8A2F2C3FC7A471972F10F1BCEF7CD585E1BE60A869654F78679425D6EE1C186A618DF3166B16A7A2160C3DD9518B137D81D02B7B46872F2A6A91E17AD28C1A793152130F076B3DAC6733F5240BA2FACEB443D4838D03432DBCB17EE359E254D582A1272B6B119D55ECBEC8EA8538A3DA17E85A3CEFCC2718E64317078B06DE9A5839CC7CF2E484EE87EA9E64C1CC03DE277277EDC081A1169978D63895B560E8C98A5A58B8EDEA8B8C5EA8332A7D51558B88F7BA75A8E6B0F267BD9E44F7C38EB545F54566468D6A33D3819903432D50F156F703434F226BE1E1B6AB2F227A65745FE18B8A5A54CC905D66D4481FCB3BB3DC463F6BF5C9D73BD97ED8B9B668EE9D738A9903432D50F156F703434F226BE1E116A92B832F227A657447F632D267DE5A54CC901D6654541B4F6EA39FB578E4EB9D95F705436DB3BCDFF4F53E9139B20307865A74F464652D187AB2A21655F709832F325CD167ACF499B71615F7C10E33CAD39FB3F73C7EF39CFF8CCB705F30D436DB13239DAD8FC5533B7360A845754F56D582A1272B6B61BD4F1874F8FA5E45EF22CF407AAC72467DDD8D590D769951D1BEB4D624C3E1A915C37D51EDCD553DF156132B46B176E7C0500B444F76D682A1273B6AB1830EA35855BD8B3A03E5AFAE1965ED9BEEF95055E799BE9177463EF3C67B6AC4705F7478B3CB575F0F624665EAC1C681A1169571D0B560E8C9CE5A30EB10E987EEDE65F597B716969FDB51632B07EB13C929C2E14D7786FB82A1A62B7DD5EDCF1D38A8163C3A88435F2E0C7A31F8C2728746F708068DA33B84F7EBA39CBC1CBEF46698930C355DE9AB93EAC1504BE9200E6CFDB0935E0CBEA8DC2318348EEC10235DAA778891CE0C7392A1A62B7D75523D186A291DC481AD1F76D28BC517557B0483C6DE1DE26DB77AFBBE2727EB3B337D19E624434D57FAEAA47A30D4523A88035B3FECA417932F2AF608068D3D3BC45B6E4F5D3A7608867E60AE69574F5851598F9D38446A2F1DCEE550E9CD9573CADB73153391C9175FBC468F5597CA3A56FAC252AF88AE2BF544CF870807168C7288CE6A643D501C667D55C1C15B7FE9703687AA79DD15E72BAEA7E7327A7838787D31D321AAE1ECCC378DBAEB58D193D65C223931F8A2623E647259098BEFAD8F658EACE090F1678483E75CE9703E07EFD94CB37216F3ABBFAC5F43CCAE9533CAF3EE8CE74C978A3AA2EE0B6B0E5E5DDE6231F882E1DE64C11B77D4ACB66A51C9C1DAD3680E6F3156D6E2661D183844EE4D8659E98DF9D5738833DFCE5F39A33CF958F9463944FA0B755F6438CC74798B87E21039BB633E5839B0E0C91B3DAB2D5A547388CC590487B7582B6B71B30E0C1CBC331675F7A3E244E678643E6767BFE5C9CEA8483E16DE110E5DFB431587912E9E1D22C2C17B76D77CB07060C1D3EF15B37A56DB0A0ED1798DD6C1C3473A9CCFC1530FEB3D9D9993BFB122736396E7ECFB9979957D22336A16A7B2166FEF45EE4DC47D81E6F0A5CB5B5C3407CFD99DF3A1BBB688BEA89CD5331D56DE9BD53A78784987F339783D117DDF32277FE3457A24AB41B42F518F754631D4E2F9CE8A3BA692C39B2E961DA26A8761980F3BEC0F5DFEECE290D57EF5BD251DCEE790393B535764BC8C2E2BCECC7261A8C5F36E5971C75473B0C4AFE21089CB706F32E14BC32C567060D4C1C34D3A9CCFA16AAE75C55BD19BB7D7027536722EAC885FC561B7F9C008061D18B467E80BE9702E87CCD9E89AAEE80FA69EDCAD16487F6779AF8C5FC561B7F9200882200882200882200882200882200882B00B4EFC9B0AC3DF96227F6B5CC981A1164CF9337038D117A7D6A2F22C546CE6DE14F604D3CCAECA69A50E160ED567AFAC09930EF2058F2F4EAB45E559A8D8CCBD29EC89DFFE39E5BF318DF8A34207AB1E5D67AFA889A7162B6BF0C5652587937D11DD61D0E7A36A31E2983D0B15BB92A370279EB3A4C29F2BEFAC279F6E1DDEF4B072AE38BBBB1EDE5A5469F0A6837CB1CFFF0B8F818395E3ECBC95B12B390AF7E1EB3349F6897CD6A9C8C9EA8D2A1DDEF48870479DBD532DD08F4707F9825307060E167EB33357C6D60E2120F1EC278447DF6274F5E588BFE7DEAA9A55D91C32673FBFC65E8BAA3DCAC361F47E3507A65A30E9C0C0C13A4FBFCE5D195B3B8480C4E87349C4A35FEF76F4E58CB767566675788B81CCC57BF6DBD7596B81CA3FA3837CC1AD030307AB5EA83376DC214EDF474ECFCFA381D567A367F44EE7AC8C7803A9C3DBBB997C907372A603432D10F96775902FF87560E0E0E1849A07B3DCBAE278B438F19E3D3D3FAF0E33BF7950D997D15C661C2A7440CFA45B6A81CC3FAA837CB1870E0C1CBC9C583C958D13D1A0B2CF3B717A7E112D66FD94F126D29F885C3A7440E68B9C933BD402953F533FEC5A8B1D7460E060E5C4E0A96A1DDEB4EEE8F34E7CE577528E512D58FBB23A1706FE0C3A88837C211DEA3830F0EFDAE776D216518B5BF7881DFAB2231706FE0C3A88837C211DEA3830F0AFD2E16B7FD8415B542D6EDC23D8FBB22B1706FE0C3A88837C211DEA3830F0AFD061B43FECA02DB216B7ED11CC7DD9990B037F061DC441BE900E751C18F8A375B0EE0FCCDA466B7153CEBBF565772ED677ADA8EE5B0B2A6A710B07743F54E8B0A32F2A7460E0D001C6593DD3B57A2632D4E3C6DCADFDE4D1C0AA27434D333A7850955B765E46F9DDC4A1A21F903AECEC8B1DFB810123EE1EFEE83896FE58ADDD6A6FDDA00122F7919E5D3A46395874B03EE8BEC97240D4E2360E55FD80D0E1045F207460E0D009A61D4277A7B418E59FC9191DAF2BA7D93BDE0795338A4386D78D1C2AFB21A343452FEDA80303876E58F61FCF0E118D73FB9D294DC6F9237245C74372B07A2333A3DEFA26A2411507EF9CB99543473F4474E8F63AAB0E151C5073AA2AF65BEE91F8D13833ED57CD7B06DCAC0DBADF2BBD99E5109997E83985EAC92A0E0C77460787680F3170E8F4E62DFD809A53A3D8D9F86FB9A3668B25CE4CFB55F39E01B76A83EAC9AA782B73CACCAA5D39CCDED99D03AA871838207CF11BF3C67EB07240F8357B062A7636CEAD776554D3D33541F6BBA53757D632C22132AB76E660E9875D39A07DC1C0A1DA1727F7838743B666883350B111716EBE33A585BD9F3CB95B7564A86526AE073B72B0F6C36E1CAA7CC1C0A1D217A7F6839703A266D93350B1D171103DBA2BA4015F5F32E432EB95E88CDA8183F5DD9D3854F6120387CA3827F64356CFD533281B1BC971A66BD603CCB83977F6BE5C9DCBCD1C18FA61770DD93830D462770E0C7DC3AAC38D77E98D39EFD6972B73B99903433FECAE211B07865AECCEC15BB3B773B2F70AB30ED63BB5D22F9DD0FEB0475FAECAE5660E0CFDB0BB866C1C186AB13B8748DDBEB0733F58F3AED29605557BE28E60EFCB15B9DCCC81A11F76D7908D03432D76E710AD1D6A7FD84587AF3DE2B47B7594E3497946B5F8D2C5820E7F667389C45CA9432707863985EEC9C81C4773D8D59BE2C003066F7AE7D52EDA666B91F5FACE18F513F2EEEAD017ED8DEC5DB52307863955D1934FACF0C58EDE14071E3078333BB7566B88AEC5A9F945B41879D3FA8CDEE9D018E98D48FE681D5670609853C89E1CC558E18BDDBC290E3C60F066842FBBAECA0FA343D69BB3773B77882FDE5E8FA1EEAA9D3858F443F0F77240E8E1C9A3D2173B79531C78B0DB0EF17BD66AEDAA6BB29A078306086F8E6274693DE26FE1507557EDC261A65DE40EF4D6A2A227BDF954FB62176F8A030F76DC2184F3F1EBA5AABB2B72FFA072F278A3FAAEB2E8B09AC348B748FD22B5A8EAC92F5D56F962076F8A030FB44308ACA89AD52BBDE9FD9CD17157ADD81FA21CDEDEEBAA45654FBE69B2D2173B78531C38A01D4260C6EA59599D93E7B30EFA89CC49060EC8FA45E2B2E9D17DB638F071588951FED1BD74673D043E7CCDF92C98725A917F744EB27058510B663D56F8421C7838AC042A8F53F410F870A237755FC439ACAC05A31E2B7D210E3C1C560295C7297A088220088220088270076EFBEC2708822008421EB7FE0E59100441D81FBA9338B467FFB7F0EA13411018A059C4037DB6E5D19E7987509F0882C000CD221E8CEE2FD5A44FFBCC1E61AD53C66BEA13411018A059C485D9BDA57AF4691FD92332FB83B5B6165EF2AE20081DD09DC505D5834B7BCF1E91DD032CEF7FF199715FADAD2054427DBE5E7BDD591C503DF8B4AFF8DC1FFDDDDFEC3DF58B701BF4B7770EFD75677140F5E0D47EF4B787CCBF67989D657D4F3B847023B23E147035D09DC581D1675E79A447FB991710732BFA7B0DED1082F05F44FF1E28D4D741F5E0A98976EC7EDD67F77AC7595FFED30E2108BAB7D8A03B8B0FAAC53ACD3B7708EF1EA11D4210F4FB7346E8CEE282EAB14EF3AEB914D923B44308827608411841BF175AAB7BE75C42ED11A3AFA96784D3A01D4210DEA1BFF3ADD7DE738F236A82FC7D847A45B801DA2104E11DF206A7F6B3FD81698FD0FE209C0ECD49417887BCC1A77DD7E77EEF39FA9B97703A663D1EF5C9EABCAA75392D5FC1DF1BDA2138B4B7FE7EA06B8FD0CC106E81B5D76FF388777FD83D5F21D61FDA21D66BEFD91F3AF608CD07E116787FD7E0F1ECCEBE593593847DA01D62BDF6B3CF391D7EB57EEED27C104E43F4777FDDBF3364D6E5847C855C9FCC7A6135CF53B16A7F88FEDE56F3413809D9CFD9A77E3ECFEC0F3BE62BE47B65D607AB799E8CEE7964DD1F4EFDFDAC20FC0FDA2170BAEC9CAF90EF95591FACE6793A3CF73A6A7F1879DE323F34238413A0BF65E47539215F21D727B35E58CDF306ACDC1F463352B342381D5E6F8CBE7692474EFF7D8B80EB91593FACE62960EAFCACF5E86BDA23849B60DDDD47FD8FDCF959D0F53B52614F6887B803B3F967998BDA2384D3E1DD1FAC7BC4EABCAA75392D5FC1DF1BDA21CE467487F87D577B84702B342705E11DF2C61DC8EC10BFEF5BF788D5F90A02129A9382F00E79E30E647788DF18EA17E136A8EF05E11DF2C61D40EC10BF71BE7A46FD229C08CD49417887BC7107503BC46F2CEF7B82B02B342705E11DF2C61DF8BAF7475F1BD5FD2D9EFE4DA5702A2C7BB3FA5EB811DA21EE81E7DF33586AFEFBB39AA3C2E9D0DE2C08FF0FED107701FD794AFB837013B4370BC2BFA11DE23E7CCD41D55A10E6905F04E11FE8EF7C7742FB8320C421BF08C23FD0DFF9044110044188429F4B05411004418842FB83200882200851687F10044110044110044110847DF03730E944E0]]>
              </BitmapFile>
            </BitmapFromFile>
          </Producers>
        </Bitmap>
        <Font Name="BlackFont" Bitmap="BlackBitmap" FirstChar="32" CharPixelWidth="32" CharPixelHeight="40" BorderPixels="1"/>
        <Material Name="BlackMaterial" Blend="2" ZBuffer="0" Font="BlackFont"/>
      </Children>
    </Group> <!-- FontBlack -->

    <Group Name="FontAlpha">
      <Children>
        <Bitmap Name="AlphaBitmap" Width="529" Height="165">
          <Producers>
            <BitmapFromFile Comment="Imported from Pixel_LCD7_bold_double.png" Transparency="2" HasAlphaLayer="1" DataWidth="529" DataHeight="165">
              <BitmapFile>
<![CDATA[789CED5AD96E25B90EBBFFFFD3B983011A53A9F6A285B269170DF0E5F4B144518B95A47F7E7EFEF723088220088220FCC23FE7A785DDBC0441100441E0456F7FD01E21088220085830BDB1B3F77FB617BC3EFB756631A27588D88BC6BF32872B7DA2F458C9F1041D3235B943B79DF133731184DD60AA67703F364F2F3EB40E117B27CCA4953E4F98D527EB90A9C995BAED8C9F998B20ECC6AB76FF3DBBEAB9C5C57A1A7D38FD6EA50E117B99F8477A78B97BE3AAF289D46325C71374B072AD8ACF637767FC16DEBBB808020356BD07561E99FEB4DC9FCD29840E967776740F752A7268D517E5A752932CCF15FB54950E563D2AE2F3F6C7CEF87B3C2AB83CF98C7808021346FDB06A8F78F766D51E1199955E1D66FC57EE105EEE16ACD82190F5D0D322AB8B8517D2C78A7D6AF47EA3E28BF6C7AEF85BFE57EC342D0E82C088156F829743C51E619D11191D3CEF4AF4BEF720DECB16C7487C511F085D463511E5E7D921327E903A78F540EE494CFDE1AD87CA5C746CA6FA54105681718778FA8DF468EF6786511C591DAC7C51762CC7AB81053B7688772C191DB25C079A767D46B58FEAE07CF7877A786AFA94FE88D403BA26279C207355105680758778FAF6F4E8687FA8DA21BCF371A667D59C44CCA95D3B442FA6880E51AE064DAD9F95E9D0A8F7941E88DA66EA8F683D206B7262033657056105987788A77F2F4676903AA0E763CB6E06591E289D503E503A78B97ADE6D94F6153A44F4C8D4386B7F78E2FF29CE05A26704611756BC09280E99F9308B2572B76A3EB6ECA3E6E44C072BA70ADB5E1FAB74F0D8F27CAF4A07EBBF7BF488D43A6B7F64E2F7C6EDE054365F05A1122BDE84551C56CC88F7F7ABE6630695395D512F0CF5F0B6E17D3BADDF45F01FF945BDA13F9BB540A0723EAC8E451058A01D22769779A66887C0D889BE99A8DAF0EE10A8EFF5F8FC0434B17C67557F20E6035B4C82B01BDA2162773D731BA19107DA2170F510793350EF0DE30E618D8FB13FB2F16B8F1084BFA11D227677F4FDDD33443B447D3D3CEFB76C78DF9B0CFFD53BC42CBE99BF5DFD81885F7B8420FC8677FECC50C9A1D20E5A878AD911F09FD213ADF16A1FABEA61E67F554DA2BED78BC712DFAC162BFA63755F586C55C52A086C18F542E4DD8CF48B9583D5CECC16AB0ED6D8B2F332C30FFD0E6572E1D1CCCBF5240ED69C54D4C5ACEEAA7B63575F58747FC78F8A591098D0EB036B8F0CEEA039B86C8DECB1EA1089C9C8A1F96F192E33BF8878273131D4C3760ED11D02591756BB95FB83F520E38F688F8A5D1058D0EA83486F76EEA238A063A2D4C1CA2BC801C2CBFA56A06326AC87651C7A1A7BF602CBF71175D13B0CFB434B93CE67301E1DCD211A08020BACF3C87A227D33E0808E895A871E0F2407B637DEAA01513D2CE16078FF9BDFEBE5DE6B37125BEFA0EB8EA92F7A7CD01A0B022B56BC9DECF3FA001D601C46FE2D98BD5759FB131D18EA610907EB5BDFAB15EBF791EF68EF146A173AAB72FBE688EE1341D80DC37BE03A91F705FD26157160D021C3A1AC5ED0FE0EA987651C7A1A5BDE54CFF733B99BD528C2F6CEDEF4F21C71ABE84B41D805E37B603A965996E0E08AA78803830E110EE5F562892FEB83B01EB673B0D48677DFB0C6D58ACFC2376A7F64D77A2AE2F768D1E101EB4F41580DEBBEECC1C856868335964A0E0C3A38392CAB97597C081F6CF5C0C0C1F35E45B958E26BD947D425436F4635199DCA3E15845588CC1F6F6F3EED6438A062395D0707876DF5C2E0E36B3589FADE2CA637BFA7CD593F44EA93A137BDB0F88BEA21084C3869568AC3FE59A31D828FC38E1D62646FE6CFFB6E32E42202ED11C217C0D09FE280E55009ED107C1C56EF104E5B534E567F28DE593B1E688F106E07437F8A03964325B443F07158B94378DF44CB77AC3E33BC9176BCD01E21DC0C86FE14072C874A6887E0E3B06A8788BC858877932117590476AF6D3D2E081E78E7CF0C333BE2B08E438353B83E6671227D33BC192771407F6FC4C5FA065A7DBEEF8C7C477857D879EB11ECC534074160C0A8A691FD119D115FE4D0BA9B9D5991D984F2E9F58D9AB3193B2771F0D68D978BE5EEDB17E2AE5787F7BD6A3B807E087310041658668FF5586699388C6744EB6E84C38493B92E3C6F18DAF7CC5EA59DD33818EA26C4C55A7BA31C676D30E4C21B8B23CE502C82C082562D67FAA477D73B2BBFC8E1CDC5FA46073999FC5B6DA27CFF7472D1F15966E7440E83BA0973C9EE0F2D6E165B191D661CA2760A7BD11D8B20B0E05DC7883E69D9F0CCCAAF7268F141CDAC0EA7A15FF4F1EE30333B231B593BA772E8ED0F597BB33BDE9AAEE060F51FB1B3A0175DB108020BDE33A762CFF6BC5B5FE630E2843C9977ABD2B78503F2CD8AEAC0CE61F6B9870B4A07060E55B9C89CCC7C100416A0DFCD3FC7D317E230E784E633F25775323B04FACD8AE8702A872897DB38A0738138DA1F841B50FD768A437C3E2039CDB854C46FF53DE2807EB3223A9CCE2162F7460EA85CA08EF607E116BCF76114C4213F1F5672A98ADFA3035A43A40E277388D8BD91C3A97D2108EC60E80B71A8E5B423FE880E680D113ADCC02162F7460EA7F6852008822008822008822008822008822008822008E781E1EF9DBDBB3BFEBEC9F0B7D7AFEBC0F4776BA63A40C7B24317E5226FEF261D2276950B1EA0E3C8D863C801BA1EA4839F1B536F31D6C18EDE44EBA25CEC9F0F0C3A44EC2A173C7871FEF764E2C8D86BDDF59E6C0E101CB2DCBEAE03BA2633A8D0215307BB7A13A9CB0E9F592E4CB9B84987885DE5820BBDF823718CF49CD97ADECDE60331A376BC9D680EA7EA80ACC90CAA7468D8A5EE4D0F37AF0611FE5FCEC50A1D2CDC113AB462EAD9ADE2C09E8B55B32E8351FC9E38665A5ADE8CAAF7D3D31B3B7BB45A879EDF6A0E5E3EA89ACCA04A87815DCADE9CD99CC569F877E5C2A8CB0A1DACFCB376327A7C2517AB665D16A85ECFD879DF45E4C49B8B0A0E1D5B660D2B7418F9AFE2D0B1555E931954E7C2120B436F466C5AE6AAC7E72DB9B0F0DE392747DC7B1C3CFC51F618FA82A12659C0988F9E9ED633CAC52A0E56BF951CDEB3DC33E7501C3A3696CEA90856D4E42C1686DEF4DA1CD45CD8E70DB9B0F2DD38275379B7F047D963E80B869A64016B3E46BA8E4E746E213974EE867381D2C1C2875987B73D8BAD28986BD2AB43859E86FAB27E767D2EAC3C67BA14EA90EE0B8B0E287B0C7DC150932C60CEC7F39E170C1C90FD84D2213AA7587478F2B0DA8B80BD263D3A54E919A939D6BE98E910D570E6B315C7621D607D31D310658FA12F186A9205ECF978DECDE462358748EEA543CD9C8AE0A45CA062C9E8E4D52BE2C36A9B2517169F6FFE8B7528EB8B4A7B080E6C733213CB6E30CCA99B3864201DEEE3C0908B157A56FA60D0C17BD7F23E3CEFB1E471358788BD2C07C4FBCD50932C60D0E2260E194887FB3830E462859E953E1874F0DCB5BC4FCF3B565D6EEA8B8C3D441E2D39BAA537ABC1A0C54D1C32900EF77160C8C50A3D2B7D30E860BD6B799BDEDF5FAD4306680E117B510EEFDC7CA537ABC1A0C54D1C32900EF77160C8C50A3D2B7D30E860BD5BB53F2075C8E0D41DA2959BAFF46635BCBD3143448B9338B4EEA2C0509705B960A8C965B9B8AD2FAAF55A697B652E2CDFDBA54306D9BE40D8F3DEE9E565453DB4EE56D8D989510CDE1965B1753A07B4FE151C463ACCEC14E582A126CB7371635F20F4CAFA58D117338E915C64B856EA9001A22F7AFF36B219E5E0C887C9774687919DCADEAC46545F8376662D0EE2C0900B97ADA73D8B9DC25C30D464592EA2B38ABD2FAC98F1C9F8A8EE0B0B474F2E9E9FB580D69879465934F0E6C4CA61D6270D4E53DF511D2C9A56F56635663DE03D067BA77260C845D89ED54E712E186A129E0B0BB753FB22A317CA47655F58ED797311E9BDD53A5473D8F95D6F4F16D4C371B9CD6050EFA113E91F720E0CB980D84B7248E702A0030387E6773C1C4EEA8B885E2D7F28DB157D51918B8A1972CA8C1AE963B9338B6DF45D6B9FF4EE00EAE1D8DC16700F9D536725430EABEB32C9219D0B800E0C1C9ADFF170B07261E88B885E2D7F48FB597B2B6654C50C39614645B5F1C436FAAEA5477A7740F5706C6EB3BC3BFABA4E648E1CC2812117E535599C0B869A84E7223A3337EB10E665E58AF681C28A1955F11E9C30A33CF539BBE7E9378FFFB7DDA27A382EB75118FBDE742C3D753807865C94D664612E186AB22C1796BA23D2A1F96F1E6E56AE481F08AC9851EFB7EC0DB4C66C332A5A97D69C6438BCB562782FAA7BB31A56BD3D18D93A9D035AFF0A0E969A5C9C0B869A2CCFC5213A746D79F959B9A27C64B17A468DBE87D6987046994E2427510E6F8D56D443EB6ECB4E656F56C3DAFB991935D3E2240EADBB28A03890E582A12697E5825C07572C2BF45A89957D61F9DE4AFE283838984E24A6088796EE0CEF05434EB360D0E2260E19480771A8E0A01D625D5F58DED0E81EC1A0717487F07E3E8AC9CBA1A737C39C64C869160C5ADCC42103E9200E151CB443ACEB8BCA3D8241E3C80E31D2A57A8718E9CC302719729A0583163771C8403A88430507ED106BFBA26A8F60D0D8BB43BCF787DEBF7B62B2DE99E9CB302719729A0583163771C8403A88430507ED10EBFBA2628F60D0D8B343B4627BEBB2628700C472746F56C39B8F19225ADCC821927BE9702F078F6F2F87557646B6BD7A457C5939ECEC8B1EAFD1B1EA5299472B227DD1B311CD8987032216940EE89A64C12886C4AC7669B182C3ACAE2A3878F32F1DEEE660F56DE1F0E4B1CA4ECFAEA7E6327A783878FB62A64354C399CF9646B358BD1C90B072B0C6128989A12F8AE64338969DB0F4BDF558E6C80E0E99FE8C70F0F8ADE2201D7838787DCF38BCEDAEB2D3B239A82FEB67E9D9B5734679EECE78CE74A9C8A317560E9EBAF4C6C4D017D5B3DA1BCB4EB4B80367B5498B4A0ED69A4673E8D8D8968B2FEBC0C0C1E37BC4A16573951D8BCD41CDA57DB6FCEF9C519E78AC7CA31C22F515019AC34C97963D148788EF1187D535C98237EF82593DD5A29A4364CE2238746C6DCBC5977560E0E09DB1D9770B6DC76AB35173109F6FDF3B6754241E0BEF08076F5D6550C161A44BCB269283D7778FC38E9A64C1BBDF2B66F52CB7151CA2F31AAD83878F74B89F83271F239F113B335B333B566E2F9B309F96583C2732A36676B2FCBD1CBCFD9D4515879E2E2DBB680E1EDFAD3BBB6A92092B66F54C072487A8F6553A78784987FB39787B227ABF174BCF9ED5D6889B578388CF1D338A2117EF3B3BDE984A0E2D5D5AB62B38587DF7EEEC7A3799B07356223964B5DFFD6EA13848075E0E19DF99BC22ED6574D9E133CB852117EFB765C71B53CDC162BF8A43C42EC3BBC9849E8659ECE0C0A883879B74B89F43C6373AA73BEA83A9264FC905CA7706D51C2CF6AB389C361F18C1A00383F60C75211DEEE590F18DCEE98EFA60AAC9D37281ECEF2CEF9DF6AB389C361F0441100441100441100441100441100441104EC18D7F5361F8DB52E46F8D3B3930E482297E060E37F6C5ADB9A8F485B2CD5C9BC299609AD95531EDD4C1C2A1DAF7CE9C30E9A0BEE0E98BDB7251E90B659BB9368533F1AA1FC8D95D9391FEA8D0C1AAC72ADF3B72E2C9C5CE1CF4B8ECE48006535F4472C13CA3461CB3BE50B62B390ADF446396400ECB9BF5E6B35A87961E56CE15BE57E7C39B8B2A0D5A3A5879AB2FF6EBC0C0C1CA71E66FA7ED4A8EC2F7D07A5B103D3AB0BB34A616A7953AB4F4887047F93E2917E8E3D1417DC1A90303070BBF99CF9DB6B5430848BCEB09D1A32D1BABEA72C4DFF36E55CDAA6C0C49DFBF3EB370C9209B8BAA3DCAC36174BF9A03124C7D91D58181C38CDBCCEF4EDBDA2104245AF594E9D1DEDD157539E3ED9995591D3A3660B1047CFFF5B9878F17995CA0E2CFE8A0BEE0D68181C388D7CCF74EDB2B7788DBF791DBE3736AF0EB447A747467E5AC9CF1ABD6A173371C0F724E3EFF2DC2C9CB7DC6AF2AFEAC0EEA0B7E1D18387838A1E6C12CB655763C5ADCF8CEDE1E9F5787D6796B64C5C8D6AE58661C2A7440CFA4AFE402197F5407F5C5193A3070F072CADAED1D6F4F65ED4434C86ACB82DBE38B68D13B88DE7CDA618865850EC8789173F2845CA0E267AA07840E51DCAE0303072B2784CD2CFF6A1D5A5AAFA8F395E8C577538C512DDE87A52EAB6361E0CFA08338A82FA4431D0706FEABF6B993B48DC6D98AF1A638A35AB474596567572C0CFC19741007F58574A8E3C0C0BF4A87DEFE7082B6D1587B71DE146B548BB726ABECEC8A85813F830EE2A0BE900E751C18F857E830DA1F4ED0D60B4BAC37C51BD5E2A9C72A3BBB6261E0CFA08338A82FA4431D0706FE681DACFB03B3B65E7C31E69916BDF3951961BD6B45657C0E0EF05C7C8543413DC075F0EA75AB0E0C1C5600C51FA9C34CD7EA99B8135F8EBDA5435603AB9E2B628970B0EAE09C5525B165E76594DF973814D5034C87A866B7E9C0C0611546DC3DFCD1762CF5B15BBB2A48837E3D45621FE9B94AC72807A30EA683AE1B0087E6BF89C3967A307340E2461D1838AC04D30EA1B7535A8CE2CFC48CB6B72A26C31DD741C50CE410E6F5450EC5F560E280468FFF893A3070588D51CC1EFE593B5F7F33A5C9387E44AC687B480ED6DEC8CCA83F27AB411507EF9CF92A8715F510D161F6FD604CC7E950C10135A7AA6CB7628FD88FDA99698FD6F1247C591B74BD57F6669643645E464F56875D1C18DE8C151C46FE0FE0B0AC37BF520FA83935B29DB5DF8A1D355B2C7666DA23753C0D5FD506559355F676C6949955A77230DC399D03AA861838A4FBE26973830EA69818385831E295F581B29DB533D37EF5BC67C0973541D6BBA53657C583E2109955277330D6C3A91CD07DC1C0A1B42F2EAF0733072B667C323E50B61176BEFC664A0B7B3D7962B7EAB822163487A75D0F4EE460AD87033994F4050307AB1DA25C1CC7C18A91FDAC0F946DB41D448D9E0A69C057970CB18C6C6766D4091CAC770FE350564B0C1C2AED5C5A0F6E0E56ACE8FFAC6D24C799AED91E60C697636FE9D03B3BEA72772C5FE6C0500FA76BC8C6812117A773B0E26B3BC4D3DE97DED22FC63CD3A27798FA531CEA3930D4C3E91AB27160C8C5E91CAC18BD2DD977855907EB9B1A899B11DA1FCEA8CB5DB17C9903433D9CAE211B07865C9CCEC183E71BD242D62EAB0E96FD29AB2D0BAAF6C413C15E973B62F93207867A385D43360E0CB9389D8317E8FDE1141D7A7BC46DEFEA28C69BE28C6AD1D3C582991D8658223677EAB09203C39C42D764648E17F4C591BD290E3C60E84D0FCFA70F766DB3B9C8F6FAC918D5536246776DED8A25C221F34EA17458CD81614E55D46443971D7D715C6F8A030F187AD3CB35DB03ACB83DBE8816EF33EBB7D619DD59A131B23722F1A375D8C181614E216B726263475F1CD59BE2C00386DE8CF065D755F16174789E8AB76BE50ED1E3EDED31E05B750C078B7E08FE5E0E083D3C7114F7C531BD290E3C386D8778F9DAAE5F714EB67321D0E0DF53F576ADD27AC4DFC2A1F0AD3A82C34CBBC81BE8CD45454D7AE359D01747F4A638F0E0C41D42B81FCF5EAA7ABB22EF0F2AA61627EFBD953AECE630D22D92BF482EAA6AB2A7CB4A0E1E2D197A531C78A01D426045D5ACDED99BAD78AC730A7D76EE0F510EAD7BBD3B337873F1BE53A1C74E0E993DA282C38C873870403B84C08CDDB3B23AA6199755EFB7952F030764FE2276D9F458ED5B1CF838ECC428FEE85E7AB21E021F7A733E0BA69876C41F9D932C1C76E482598F1D7D210E3C1C760215C72D7A087CB8B1373D5C18661413879DB960D463675F88030F879D40C5718B1E82200882200882207C035FFBD94F10044110843CBEFA3B64411004E17CE84DE2D03E7A56E54C7522080203348B78A09F6D79B48F9E15F9529D0882C000CD221E8CDE2FE5649DF6993DC29AA74CAFA94E0441608066111766EF96F2B14EFBC81E91D91FACB9B5F052EF0A82B0027AB3B8A07C7069EFD923B27B80E57E8F8F81FB767D05A10AAA730AED9B47B9513EBE02E3EFE38679B1E626FABBBFD9BDC1E7DBF515840A44FF1E2860F5EF1DE545F9F80A46DA8FFEF610995F565FD67BDA21842F22DB87022E07BDA39CECC947E4675401A37DEFA0F607AF2FCB3DED10C2D7D09A959A911C79503E7872A21D7BBDEEBD83D47FE6EBE9EFE9533B8420E8DD6283DE2C3E2817FB34EF9D8A1DC2BB4768871004FDFE9C117AB3B8A07CECD3BC77D03988EC11DA2104413B84208CA0DF0BEDD5BD772AF447ED11A3CF5433C26DD00E21086DE8EF7CFBB5EF9DAADD0EF9FB88D67777EB2A08686887108436D41B9CDACFF607A63D42FB83703B342705A10DF5069FF6AB7EEEF7FAD1DFBC84DB61A8F1E6B9BD373C73E08678057F6DF48E6A62ADF6D6DF0F34BE9BE2B0EBF72182C00247ADFF3AB7F788777F383D5E21561FBDA37A58A7BD677FE8DC49F118ED339A0FC2CDF0FEAE61F4D9E4DEF658D1BADC14AF10AF91DE512DD46B3FFB39677450FD6AFDB94BF341B80DD1DFFD45EFED8EB742971BE2157275D23BAA8335FAAFDE1F1CBF8F84FA150426647FCEBEF5E7F3CCFE7062BC42BE567A4735B02E07ABE691757FB8F5F7B382F007DA2170BA9C1CAF90AF95DE510DACCD8317193FBD5C5BE787668470033CEFA577D76EDDDB1D6F852E37C42BE4EAA4775407EB73B1637F78E75B7B84F025047EF7D6FD6C726F7BAC685D6E8A5788D748EFA816EE406F168C3ED31E217C098EDDFDD7A9DAF959E0FDD9E6F47885587DF48EEAE10ECCE65FEF73ED11C297E0DD1FFE9CDBDF53ED0FC2AC367A47357107A23BC4F3AEF608E1ABD09C148436D41BDF40668778DEB7EE11BBE3150424342705A10DF5C63790DD219E36542FC2D7A0BA178436D41BDF00628778DAE9D58CEA45B8119A9382D0867AE31B40ED104F5BDE7B82702A342705A10DF5C637D07BF7479F8DF2DEB2A7FF5329DC0ACBDEACBA17BE08ED10DF81E7FF335872FEFCAEE6A8703BB4370BC2DFD00EF12DA07F9ED2FE207C09DA9B05E137B4437C0FBD39A85C0BC21CEA1741F80FFA3BDF37A1FD4110E250BF08C27FD0DFF9044110044188423F970A822008821085F6074110044110A2D0FE2008822008822008822008E7E0FF3A4C7AF4]]>
              </BitmapFile>
            </BitmapFromFile>
          </Producers>
        </Bitmap>
        <Font Name="AlphaFont" Bitmap="AlphaBitmap" FirstChar="32" CharPixelWidth="32" CharPixelHeight="40" BorderPixels="1"/>
        <Material Name="AlphaMaterial" Blend="2" ZBuffer="0" Font="AlphaFont"/>
      </Children>
    </Group> <!-- FontAlpha -->

  </Content>
</ZApplication>
On Windows and Linux, everything is fine. But on Android, one in two font is losing his background transparency, in the order of apparition of the fonts:
Screenshot_20210504-094527.png
Screenshot_20210504-094527.png (118.24 KiB) Viewed 1100 times
The Font on the left has Black background, the one on the right uses alpha layer. I tried with and without ZBuffer. I also tried to call the font material between two RenderText.
This is really clear when there is no background. When there is a background (Omeganaut), the font lose its transparency when an object is getting closer to the camera...

User avatar
VilleK
Site Admin
Posts: 2174
Joined: Mon Jan 15, 2007 4:50 pm
Location: Stockholm, Sweden
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by VilleK » Tue May 04, 2021 10:54 am

Ats wrote:
Tue May 04, 2021 7:55 am
I also tried to call the font material between two RenderText.
Are you sure it doesn't help to have the UseMaterial before each RenderText?

It could be a problem with the glPush/Pop routines that are emulated in ZOpenGL because they are missing in GLES.

You could try commenting out this block in ZOpenGL.pas line 1748:

Code: Select all

  if A.Blend=0 then
    glDisable(GL_BLEND)
  else
    glEnable(GL_BLEND);

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by Ats » Tue May 04, 2021 12:11 pm

Yes I'm sure. And I tried again one more time in order to verify again.

With this change, the fonts appears correctly on Android :wink:

User avatar
VilleK
Site Admin
Posts: 2174
Joined: Mon Jan 15, 2007 4:50 pm
Location: Stockholm, Sweden
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by VilleK » Tue May 04, 2021 12:55 pm

Ats wrote:
Tue May 04, 2021 12:11 pm
With this change, the fonts appears correctly on Android :wink:
Good, but the code looks correct so this could be a bug/oddity in Android GL-driver.

I don't want to commit this change just yet, please keep trying with it commented out for now.

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by Ats » Tue May 04, 2021 1:18 pm

All right. Otherwise, this could be hidden behind an {$IFDEF ANDROID}

Does this block of code affect targets other than Android? (in order to run tests)

User avatar
VilleK
Site Admin
Posts: 2174
Joined: Mon Jan 15, 2007 4:50 pm
Location: Stockholm, Sweden
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by VilleK » Tue May 04, 2021 1:54 pm

That part is Android only anyway.

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by Ats » Wed May 05, 2021 7:13 am

I made some tests regarding that bit of code.

Here's the result for when there's only "glDisable(GL_BLEND);"
Screenshot_20210505-090424.png
Screenshot_20210505-090424.png (121.86 KiB) Viewed 1053 times

And only "glEnable(GL_BLEND);"
Screenshot_20210505-090957.png
Screenshot_20210505-090957.png (113.48 KiB) Viewed 1053 times

So A.Blend could be switching on/off for no reason somewhere?

User avatar
Kjell
Posts: 1776
Joined: Sat Feb 23, 2008 11:15 pm

Re: One in two BitmapFont lose transparency on Android

Post by Kjell » Wed May 05, 2021 10:28 am

Hi Ats,

Can you try this project on your Android device?

Code: Select all

<?xml version="1.0" encoding="iso-8859-1" ?>
<ZApplication Name="App" Caption="ZGameEditor application" ClearColor="0 0.502 1 1" FileVersion="2">
  <OnLoaded>
    <ZExternalLibrary ModuleName="opengl32">
      <BeforeInitExp>
<![CDATA[//

if(ANDROID)
{
  ModuleName = "libGLESv1_CM.so";
}]]>
      </BeforeInitExp>
      <Source>
<![CDATA[//

const int GL_BLEND = 0x0BE2;

//

void glDisable(int cap){}
void glEnable(int cap){}
//byte glIsEnabled(int cap){} // Can't use this in ZGE due to byte return-type :-(
void glGetBooleanv(int pname, xptr params){}
void glGetIntegerv(int pname, xptr params){}]]>
      </Source>
    </ZExternalLibrary>
  </OnLoaded>
  <OnRender>
    <ZExpression>
      <Expression>
<![CDATA[//

byte blend;

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.8;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaRedMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.7;
Print.Text = "UseMaterial(DinaRedMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.6;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.5;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaRedMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.4;
Print.Text = "UseMaterial(DinaRedMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaRedMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.3;
Print.Text = "UseMaterial(DinaRedMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.2;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.1;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.0;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.1;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.2;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glDisable(GL_BLEND);
glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.3;
Print.Text = "glDisable(GL_BLEND) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.4;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.5;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glEnable(GL_BLEND);
glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.6;
Print.Text = "glEnable(GL_BLEND) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.7;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.8;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);]]>
      </Expression>
    </ZExpression>
  </OnRender>
  <Content>
    <Group Comment="Dina">
      <Children>
        <Font Name="DinaFont" Bitmap="DinaBitmap" FirstChar="32" CharPixelWidth="8" CharPixelHeight="16"/>
        <Bitmap Name="DinaBitmap" Width="128" Height="128" Filter="1">
          <Producers>
            <BitmapFromFile Transparency="1" DataWidth="128" DataHeight="128">
              <BitmapFile>
<![CDATA[78DAED5DDB96E3200CE3FF7F7AF66DCF9C6930B27C011AF969A64D49A2185F844DC69048241289E42DF2F34BC0837FFF810FFEF91364846628F69EF1FFBF8F57F2F9EDF282ED038EC21F57C29EC7F1792538EC20C8E7E03F9BA48FF3F76722E9F6C7981DAE93CE0E93FEBB9493B03FCBD14E7B04D583FFB9EB6AFB8F18B7D3BC7027FE5BE29FA5A1FB02908DF97E9497CFB263F6C1C1994BF8115BC93FCD4EB5E90323AB443FCED9D88DDA58743D360E2ECD37F09F6994EBABB7E5DDEF71BE1289E48BED18EE2C246D79AB2B2E92D0544C1CFF59724A8CEF4A7E0745A6E1F11B411212D444B5FED7E16F2F88C42968EF1C8FD3B915B4460A7F9BA27B89CA530DDAD5F82FCF5884FF2DFACFADBC18A11AB838FB6709A6E81164017894FE0F3FF1D5B0049912FF544FA52CFF8B78D8A0816AB0EA9D2705D785B3F0C7EB19885BDB5EDDD1A0FF5CF07C54FC7F35FE83E2759BD75FFA53E966FBCF39C7E6F517C999CCCFB1DE3CD1950BFF2B6E53F86FC71FA94B4CF4B0C2BFCDEFBBF29DD95776F18F51D7EA4AA9F038D3F87776FD447D7E29FEAEB411BC129CD705D352BBBE6579523026BC177F6F5ABA7C5E46F15204FF41D5E75F813FC7EBC6F1B727858BF6897FEEE5AB8BEC0F8DFFA3A2DAD5A45EFD373C05E1BE677E0D9C2004FECB7B8FD81F64F014FC47C6BAFFAEF86779BCD728D1F873FA734EFCF3E6DCF304FF2BFC85BFF097ECE27F24122254131AF229C23F328984E15EFD3FFF1120FC39629F91922A90325AAE47CC4E8D132048C083B73947FAEEB3F27DD7E72033839717562C5810F8D37577DCF8DE719078FB55F87BE73B81BF8B076BC0DF360EFDF877EAFF39F6E73BF097FDCFB53FCB602631FEF1AE472CEB2E1092875E2F8BE3D31936A7971B55575C77E60B445C2AFC9B33CAB6063170AAD207B80CF217F70BEC9AD4A28024128944C2C5E79DEB716FF05674F84D34A51A5BB3CEB23C246DA7F97CFC368375B606EF57877F303C23EAEA693EA701FFEA54A2223CF6F24811FCED1D6BC1FE0B425DAFC31FD7A514FC87A7FF221DFFA2B72A80C630B2FE5B8DFF58EDBF9D62C641FC830E258BCFA7F1AFE8BF08CE0BD7DD7D37FEF66DBA0C51A26B8EECB37DF27A16DD7FC1297C965FF6E2EFB2E759C7EFC29F88FF89B848E46A5628C82565C23F8BFFE1FAFD2512894422915CE4F7BDFDE3AEF8DF3829BDBF8777FF1FEF38E075D2EB2359FCB3972F0D76DAD2F59FCD75F5F8E7C1E75B5166BC0BFF7EFD8CD7F1DE823FC2639C807F90CFF1DA557C7CD77E6E2EFC233BA2180072F66724EDAB56A4FFA07921F4DF85BF519FC0BD7758F8BBECCF0CFFACBE0C6EDFA493E31F047F504F1EF704E3F607C3FB471AE2FF94B8DD7BA90D7D6DE24B2512894422919C268A4C4E7804BB9E3BD76FEE8A6F893E77049FE538B8AA2FA740B01FD64BCF8EBC82F3B1A38FC0F815817FBC453A8EFFA8E91349E7F3D30D4BD1FB37973432DDF1B4B45717E1EFEA63F2CEC4E16F61589AE2A5CD89BC6733B8EF4A9B5376191357E5B0EB2B57EF4CF0A5E134AFBBFC3C45FF6D83F3F855CA0B6B3E870A1A8A745E7DE97F73ED7F1BFF8F3B1A6E0A14EDF75514FF2C4DB177EA8171FBD2FE2F437722EFA8E0DB7BB6BB9174E6B912894422915CEDDDD2399F6552702F383DE3B7ED4E59340297F4E13C7C967635E0EF852225E08FE3FFB86F06B26340D6456665BE41FCAB8D00B29FBC412E75E24F90BD771961702B98D97E4A0DFA8F932D7B1F41B5FD6FA0C5B8BAD3E07CEFC7DFEE53B3DFE7DE89FF5EFD1F65EB9888FF9D1DD96C7F76D9FFEDF8DF1BFFEC7A04F624F56E31140FFBBFE3FDB0CDF837E4A1D76D329F32DFFBEF2E52DAF42A424682C83F99AF58DD]]>
              </BitmapFile>
            </BitmapFromFile>
          </Producers>
        </Bitmap>
        <Material Name="DinaMaterial" Blend="1" Font="DinaFont"/>
        <Material Name="DinaRedMaterial" Color="1 0 0 1" Blend="1" Font="DinaFont"/>
      </Children>
    </Group>
    <RenderText Name="Print" Text="blend=1" X="-0.9" Y="-0.8" Scale="0.25" Align="1" StretchY="2"/>
  </Content>
</ZApplication>
K

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by Ats » Wed May 05, 2021 10:33 am

Screenshot_20210505-123225.png
Screenshot_20210505-123225.png (19.13 KiB) Viewed 1045 times
By the way, my Android device is a Google Pixel 3A, so pretty standard when it comes to Android :wink:

User avatar
Kjell
Posts: 1776
Joined: Sat Feb 23, 2008 11:15 pm

Re: One in two BitmapFont lose transparency on Android

Post by Kjell » Wed May 05, 2021 10:41 am

:|

Dang-it, didn't know / forgot(?) that Transparency=BlackColor results in white pixels ( instead of black ) on Android. White-on-white text is a little hard to read you know .. please try the same project with a silver Dina font instead of white:

Code: Select all

<?xml version="1.0" encoding="iso-8859-1" ?>
<ZApplication Name="App" Caption="ZGameEditor application" ClearColor="0.502 0.251 0.251 1" FileVersion="2">
  <OnLoaded>
    <ZExternalLibrary ModuleName="opengl32">
      <BeforeInitExp>
<![CDATA[//

if(ANDROID)
{
  ModuleName = "libGLESv1_CM.so";
}]]>
      </BeforeInitExp>
      <Source>
<![CDATA[//

const int GL_BLEND = 0x0BE2;

//

void glDisable(int cap){}
void glEnable(int cap){}
//byte glIsEnabled(int cap){} // Can't use this in ZGE due to byte return-type :-(
void glGetBooleanv(int pname, xptr params){}
void glGetIntegerv(int pname, xptr params){}]]>
      </Source>
    </ZExternalLibrary>
  </OnLoaded>
  <OnRender>
    <ZExpression>
      <Expression>
<![CDATA[//

byte blend;

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.8;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaRedMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.7;
Print.Text = "UseMaterial(DinaRedMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.6;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.5;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaRedMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.4;
Print.Text = "UseMaterial(DinaRedMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaRedMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.3;
Print.Text = "UseMaterial(DinaRedMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.2;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.1;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

@UseMaterial(Material: DinaMaterial);
glGetBooleanv(GL_BLEND, blend);
Print.Y = 0.0;
Print.Text = "UseMaterial(DinaMaterial) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.1;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.2;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glDisable(GL_BLEND);
glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.3;
Print.Text = "glDisable(GL_BLEND) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.4;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.5;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

//

glEnable(GL_BLEND);
glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.6;
Print.Text = "glEnable(GL_BLEND) -> blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.7;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);

glGetBooleanv(GL_BLEND, blend);
Print.Y = -0.8;
Print.Text = "blend="+intToStr(blend);
@CallComponent(Component: Print);]]>
      </Expression>
    </ZExpression>
  </OnRender>
  <Content>
    <Group Comment="Dina">
      <Children>
        <Font Name="DinaFont" Bitmap="DinaBitmap" FirstChar="32" CharPixelWidth="8" CharPixelHeight="16"/>
        <Bitmap Name="DinaBitmap" Width="128" Height="128" Filter="1">
          <Producers>
            <BitmapFromFile Transparency="1" HasAlphaLayer="1" DataWidth="128" DataHeight="128">
              <BitmapFile>
<![CDATA[78DAED5D5B8EDC300C9BFB9F6A6ED6FE2E169B5812494B4E48A040B193A769BD6DE5F3310CC3300CC3302AF87EBFFF7EFEAB9CFBFBFFD57B5F5D237BDD89637CCA73FDFCDBDD735F1D9779D7E8B127F35F95AD2973E2EAB9AB9C57B83D95FF956EBBD37F57BFB1E752E4BA113D813CDBEA1CCB7F9F5DCACA7FF53D57F7397D0E74DFFBAF71ECB6FF59DB73BA1F388DFFC9FE7FC61699DBB5ED3EDD0F55DB97E8B90ABDC7F02FA2B27DA5F3BB6D5425EED8E15FB2ECE50972D6F1FCD1F145E43EC2FF4A2E90630C9EFF6218866118EADC8CEDB9E7001A1F18FBE247766E00E57F957B63DC3FE33BDFC52F48EDA61AFF306A5B8C1C71B7FC77F11F5D6BA1AA01A3FA525513653F6717FF957333F2B463EE7773F366FE33CFD5C1FFD3E59FB5EE2312E354D6DEFDB506A4630EA8B93A59FE11BF536DFF157E8032B650CD03B5FF97F5EB14B662821D9FF66C95F5816AFEABEB77196374D23AE909F2CF8A7D4F8EFFDFCC7F24B794E5B06B7CA7E74E27DB7F96EF3571FD876130E7FDDBE6D874DB6AFE9FE5CB98FF67F29FDD1FB6C3AF33FF33C6AC6BFF5E74EFF8D531D1B5FF91FD91480EA71ADF45FEB67A7FC6FEFB4EFEB3F144B5BE55C9B930EAEB91F5E79967ABC45B6FE53F724F94FF887C477540657D0763FFFD93F967D54755FC47754345FFA87F47EBC71DFA9FC9FF9D2C46F719A2F21FF11B183EE5CA3FAAE80A06FF99F164EBFFECBD95FC67EEF934FF3F733E6A1B98FCB3E6FFA9FEBFF36933DED1FC9B7FF36FFEDF3C466F9803D3F2FF86F116B9B32C19B6A586AAF7AB47F6DDF2FFD43990AD7F67ED6F760F4776ECB3EB1756CF98E1BF5AABFE7D5CA66722BB3FE9DDDFBA7F8F8C29E3FAD5181DA97530F867EE4F62DD1FBD7E367E36FF989D42F427837FA4BE3281FFA8EE9DCAFF34F93F55FF9B7FDBFF27E8FF8CEFBEC3FF47D72F64D627AFC6883957AFBE67C31EFF6931EFCE3D09DDFB92A7E50F18F1A1F93F93FF297B81D0FD55AA3167D8FFACFDD89DE3FB1854FE0DC3300CC378AFDFC0E80F36C547B39FD31753337AC345BE1179175729EACF487FDDE89829F67746EA535DFC2B621AC6FE7866FE7E02FFDD3986DD312D5A5F60F31FFD2E67A5FF034326DFC47F551E94FC67744027FF6C5D52F511B2FC33EA4F9DFCDFE986C8B92C9B5DE15FE16BA8EBF74CFE77F77F50E807649CCCBFAEFF034357A9F98FEAA749FC2BD7EF30FB3FB0645DED1FA2FC23F65B7DFE74FE19F13F233E704EEECCFC1F2B3764FE67F38FE406BD7FD9300CC3300CC350FAA768FF4B24FE8F3C1BB3FF34DAFF1FBD7EE5FD98EB2FD4F55FB47EA8E89BC7DCFF37717F7CF577C5FCDBBD67763AFF53E54FB5BFF4E9FCAF8E3B9DFFACFD56BC1FEBFEC8F77B10FED97DC1235CB1F47F763E9F20FF159DCE907F84FFC8FADBCAFADC6CCF02F3DFA3FF57FCABFB43B0BECFF034FF3FCB7F657EDF7D6F85F5FD956AFF8B09F1BF323E47DF71427F24D70F0DC3300CC3300C631FEC771B93F967F7CF44E24F467FCFECF867AE5F95F18C0E50F4AF436B9AD963ABE74CED2F10B90E837F550F4615FF956766EE95DCDD4B42A9CB91EBA23D33519EAB3A2B537F7D32FF487F19546F45C6141D9768FE1D5D7BB7C3BF98DC431BD1DDC8BE57E418A49F086A7BD4F5D1CCEF4AF98FEAFABB6358FE6B66CFAD4217EFAC8F67FCBF5DF67F52FDBFEA8BB07440C7F7533AFCFF8C8D457554253ECFD8FF4C8CCEC84FECAE9F4FE9496F3C27F7E8F51F866118866118B9F866877FE6B19F7BFF49DF89EBB82E2B3755ADAFABE56402FFE8182B637D15FF77FD99B37D59D5EFA6CEFB29F8EFD6ADD9EFB7476A0FD3F867D44EDF625B2B3DD657DF6F9820FFD5DCF92973A0DBFE4FA8B9B0F6272AF4E754FEA3FD8D2235C16E1FF964F967CAB0D2FF5B9D3751FF4FB7FF27F1FF56FF7FFA1C88EA36F41B04AA985FDD47C4FCEBAE3F21BFF3A4FCAC527F4E1D27F61E09F36F9C8EFFFFBE466F]]>
              </BitmapFile>
            </BitmapFromFile>
          </Producers>
        </Bitmap>
        <Material Name="DinaMaterial" Blend="1" Font="DinaFont"/>
        <Material Name="DinaRedMaterial" Color="1 0 0 1" Blend="1" Font="DinaFont"/>
      </Children>
    </Group>
    <RenderText Name="Print" Text="blend=1" X="-0.9" Y="-0.8" Scale="0.25" Align="1" StretchY="2"/>
  </Content>
</ZApplication>
K

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by Ats » Wed May 05, 2021 10:51 am

Oh, I thought it was part of the bug :lol:
Screenshot_20210505-125032.png
Screenshot_20210505-125032.png (19.23 KiB) Viewed 1033 times

User avatar
Kjell
Posts: 1776
Joined: Sat Feb 23, 2008 11:15 pm

Re: One in two BitmapFont lose transparency on Android

Post by Kjell » Wed May 05, 2021 10:57 am

:|

Alright, seems like glGet(GL_BLEND) simply returns the opposite of what the current blend state actually is. So it returns FALSE when blending is enabled and TRUE when blending is disabled. This could be a Android OpenGL driver issue rather than a ZGE issue ( not 100% sure though ). I'll try to test this project on a couple of Android devices myself to see if i get the same results .. if anyone else wants to help out please be my guest ~

K

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by Ats » Wed May 05, 2021 11:18 am

Here's the last GL_BLEND test if that can avoid you to setup the entire Android environment :wink:
Attachments
Test GL_BLEND-debug.apk
(342.33 KiB) Downloaded 14 times

User avatar
Ats
Posts: 445
Joined: Fri Sep 28, 2012 10:05 am
Contact:

Re: One in two BitmapFont lose transparency on Android

Post by Ats » Wed May 05, 2021 3:33 pm

Here's the result on the old Galaxy SII (2011):
Screenshot_20210505-173054_Test_GL_BLEND.png
Screenshot_20210505-173054_Test_GL_BLEND.png (20.75 KiB) Viewed 1016 times

User avatar
Kjell
Posts: 1776
Joined: Sat Feb 23, 2008 11:15 pm

Re: One in two BitmapFont lose transparency on Android

Post by Kjell » Wed May 05, 2021 4:07 pm

Hi guys,
Ats wrote:
Wed May 05, 2021 3:33 pm
Here's the result on the old Galaxy SII (2011)
That looks correct :) I just tested on 2 Android devices myself and had similar results; it worked properly on one of them and i had the same issue as Ats on the other.

@Ville - Maybe it would be easiest to ditch the glGet calls in fakePushAttrib and store the current state locally instead? Or just cache the current texture(s) in RenderText itself instead of using the attribute stack.

K

Post Reply