In the latest version, I only need to hack the shader compilation to get the game running on Android. No slowdown experienced, just some weird mouse controlls.
-- Patch: Transpile to OpenGL ES shaders. -- * Convert "extern Type var = initializer;" to "extern Type var;" -- and send the initializer on load. -- * Convert "1" to "1.0" unless in array subscriptions like "a[1]". do local function load_if_looks_like_filename(code) --> code if code == nil then return nil end if code:match("[\n;]") then -- looks like code, not path return code else -- looks like path, not code -- The parenthesis are important, it keeps only -- the first result of love.filesystem.read(), -- which returns 2 results. return (love.filesystem.read(code)) end end local function extract_extern_variable_initializers_into( code, inits ) --> code if code == nil then return nil end -- Remove comments, but keeps the newline. code = code:gsub("//[^\n]*", "") -- Search for "extern <type> <var> = <initializer> ;" for var, initializer in code:gmatch("extern%s+%S+%s+(%S+)%s*=%s*([^;]+);") do inits[var] = initializer end -- Remove initializers. code = code:gsub("(extern%s+%S+%s+%S+)%s*=%s*([^;]+);", "%1;") return code end local function send_initializers(shader, inits) local sends = {} for var, initializer in pairs(inits) do table.insert(sends, ("send(%q, %s)"):format(var, initializer)) end local sendcode = table.concat(sends, "\n") print("SEND\n", sendcode) local chunk = load(sendcode, "send shader initializers", "t", { send = function(...) shader:send(...) end, vec2 = function(a, b) return {a, b} end, vec3 = function(a, b, c) return {a, b, c} end, vec4 = function(a, b, c, d) return {a, b, c, d} end, }) chunk() end local function various_hacks(code) --> code if code == nil then return nil end -- Convert int literals to float literals. -- * Keep literals like "1.", "1.2" and ".2" intact, -- but replace "1" with "1.0". -- * Should also keep indexing literals like "a[1]" as integers. code = code :gsub("(%f[a-zA-Z0-9_:.][0-9]+%f[^0-9.])", "%1.0") :gsub("%[%s*([0-9]+)[.]0%s*%]", "[%1]") return code end local love_new_shader = love.graphics.newShader function love.graphics.newShader(pixelcode, vertexcode) pixelcode = load_if_looks_like_filename(pixelcode) vertexcode = load_if_looks_like_filename(vertexcode) pixelcode = various_hacks(pixelcode) vertexcode = various_hacks(vertexcode) local inits = {} pixelcode = extract_extern_variable_initializers_into(pixelcode, inits) vertexcode = extract_extern_variable_initializers_into(vertexcode, inits) local shader = love_new_shader(pixelcode, vertexcode) send_initializers(shader, inits) return shader end end