mirror of
https://github.com/spoopyghosty0/frameport.git
synced 2026-10-24 09:02:04 +02:00
Add opt-in swapchain_pool with private GLES images and up to two packed runtime atlases. Start at eight live app runtime swapchains to reserve headroom before the session cap. Preserve image ownership, GL state, source fences, crops and the existing cylinder/equirect layer ordering. Enable for 4XVR, add count-limit triage without unknown suggestions for older apps, and document the pending headset menu check. Leave default recipes and adapter revisions unchanged. Rebuild arm64/arm32 artifacts. Validation: 132 targeted tests passed (2 skipped), including the native runtime/GL harness; Ruff and generated docs pass. Full host suite: 2095 passed, 137 skipped, 12 failures and 16 setup errors, all denied socket creation in this sandbox. No headset validation or push.
27 lines
963 B
C
27 lines
963 B
C
// First-fit edge packer. Removing a live rectangle immediately frees its space.
|
|
#pragma once
|
|
#include <stdint.h>
|
|
typedef struct {
|
|
int x, y, w, h;
|
|
} PoolRect;
|
|
static int pool_place(const PoolRect *used, int n, int side, int w, int h, PoolRect *out) {
|
|
if (w <= 0 || h <= 0 || w > side || h > side) return 0;
|
|
for (int yi = -1; yi < n; ++yi)
|
|
for (int xi = -1; xi < n; ++xi) {
|
|
int x = xi < 0 ? 0 : used[xi].x + used[xi].w;
|
|
int y = yi < 0 ? 0 : used[yi].y + used[yi].h;
|
|
if (x > side - w || y > side - h) continue;
|
|
int fits = 1;
|
|
for (int i = 0; i < n; ++i)
|
|
if (x < used[i].x + used[i].w && x + w > used[i].x && y < used[i].y + used[i].h && y + h > used[i].y) {
|
|
fits = 0;
|
|
break;
|
|
}
|
|
if (fits) {
|
|
*out = (PoolRect){x, y, w, h};
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|