v0.9.0 — The runtime reaches the original iPhone, and its GPU backend learns a second generation
The runtime reaches the original iPhone, and its GPU backend learns a second generation.
PocketJS 0.9.0 adds an experimental ARMv6 target for the 2007 iPhone1,1
running iPhone OS 3.1.3, generalizes the hardware DrawList backend so it
serves both OpenGL ES 2 and the fixed-function OpenGL ES 1.1 that older
GPUs speak, and hardens what the project accepts as proof that something
ran on hardware. Its performance claim about that GPU path was wrong and is
corrected in 0.9.1 above.
- An ARMv6 UIKit host for the original iPhone. Current Xcode still
emits ARMv6 andld-classicstill links a 2008 sysroot, so the host is
built against an iPhone OS 1.1.4 ABI floor and targets 3.1.3, probing
both UIKit generations at runtime withrespondsToSelector:and
dlsym. It contains no Objective-C: the classic linker crashes on
the ObjC1 relocations current Clang emits, so the view and app delegate
are registered throughobjc_allocateClassPairat startup. The guest
JavaScript and asset pack ride inside the executable as Mach-O sections,
and deployment is a signed transaction with byte-exact readback and
rollback over key-only USB SSH. The target stays deliberately outside
the production registry, with a test asserting it. - The GL backend now serves two GPU generations.
engine/symbian's
renderer split into a generation-independent DrawList walker plus two
pipelines: the existing ES 2 shader program, and a new fixed-function ES
1.1 path for GPUs that predate shaders. The two shader lines turned out
to have exact fixed-function equivalents — the pixel-to-NDC transform is
glOrthof, andtexture2D(…) * v_colorisGL_MODULATE— so the
interleaved vertex layout is reused byte for byte. All ten backend tests
pass on either pipeline, and Symbian's verified ES 2 output is unchanged. - A GPU path measured, and reported wrongly — see 0.9.1. This release
reported the hardware path as 2.4× slower than the software rasterizer. That
conclusion was the product of three stacked measurement bugs and is exactly
backwards; the corrected figures and the two defects behind them are in
0.9.1 above. What stands from this entry: the device record reports which
renderer and which clock actually ran rather than leaving it to be inferred,
and a marker file selects between both paths so they can be measured from
one binary. - Runtime acceptance got harder to fool. A review found that the
first "it runs on hardware" receipt could pass before the finger lifted
and could be re-read from a process that had already died. The record is
now schema 2 and requires a live PID, an advancing heartbeat, a
completed touch release, and an application-reported action — which
arrives through the newreportAppActionframework surface and its
optional host sink, so the evidence path runs through the reactive
graph. Frame-loop timings ride in the same record.
npm: @pocketjs/framework@0.9.0 · @pocketjs/cli@0.9.0 · full changelog