- FreeType: add the cff/psaux/pshinter modules (from the pinned 2.13.3
tarball, same sha256). Android's only CJK font is the CFF2
NotoSansCJK-Regular.ttc, which the TrueType-only build could not open,
so every Chinese glyph drew as a box.
- Font oversample rounds the UI density up: Android's 1760x800 UI on a
2376x1080 screen is 1.35, which rounded to 1x bilevel glyphs stretched
1.35x. Now 2x anti-aliased glyphs are scaled down. macOS 2.0 unchanged.
- MainActivity: a launcher start (no intent args) opens the login screen
against 192.168.21.203 instead of auto-logging into the in-process fake
server; explicit args still select the fake-server smoke flow.
- build-android-native.sh: ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON for SDL3
and libmain (LOAD alignment 0x1000 -> 0x4000), with a stamp that
rebuilds a cached pre-flag SDL3. Clears Android's 16 KB compat warning.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CGraphicFontTexture rasterises glyph pages at the swapchain density
(UISetFontOversample, MT_FONT_OVERSAMPLE) with anti-aliased coverage;
metrics, packing and UVs stay the 40250 1x values. Default 1 keeps the
verbatim bilevel path (Godot unchanged).
- native.frag: sharp-bilinear sampling for magnified UI textures.
- Multisampled colour/depth with a resolve into the swapchain (MT_MSAA,
default 4); stats line reports msaa=N.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DXT DDS textures upload the file's own mip levels like 40250
CGraphicImageTexture::CreateDDSTexture (max(1, dwMipMapCount), level i read
at sum(dwLinearSize>>2k), Copy of dwLinearSize>>2i bytes) instead of a
regenerated chain. Non-DDS images keep the D3DX_DEFAULT full chain and mem:
textures get one level. The invented is_ui_tex no-mip rule (icon/, ui/,
locale/, <=128px) is deleted. dxt_decode_test is registered in ctest with
mip-level cases.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SetGamma, RenderCoolTimeBox, RenderUp/DownButton and GetAvailableMemory are
transliterated from 40250 in place of stubs. The cooldown fan is emitted as
untextured polygon UI commands (native_render + python_ui_surface.gd draw
Bar+quad as a polygon); D3D8 shim gains SetGammaRamp/D3DGAMMARAMP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Texture coordinates: TEXCOORDINDEX generation (camera-space normal /
position / reflection vector, LOCALVIEWER) and D3DTS_TEXTUREn under
TEXTURETRANSFORMFLAGS (incl. PROJECTED) now run in native.vert; the
RecordingDevice CPU uv baking and the sphere-map / multiplicative-shadow
shader hacks are removed. Godot consumer uses Render3DStageTexcoords.
- Lighting: 8 D3D lights in camera space, 1/(a0+a1d+a2d^2) without clamp,
spot cone theta/2 phi/2 with falloff, diffuse/ambient/emissive material
sources, NORMALIZENORMALS, inverse-transpose normal matrix.
- Alpha test compares 8-bit alpha against ALPHAREF with ALPHAFUNC.
- Back-buffer Clear() is recorded in draw order and executed with
vkCmdClearAttachments; render pass clears to 0xff000000.
- D3DVIEWPORT8 (incl. MinZ/MaxZ) is dynamic per-draw state.
- Missing vertex diffuse is opaque white; alpha blend mirrors SRC/DESTBLEND.
- CScreen::ms_clearDepth / ms_diffuseColor initialised to 40250's
1.0f / 0xffffffff (were zero; exposed once clears were executed).
- Capture format v8; --screenshot-out FILE.bmp swapchain readback.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>