Realm/Surface/RealmGraph — Planejamento de Base
Este documento consolida os itens da Fase 0 do replace de arquitetura: contratos, IDs e regras fundamentais para Realm/Surface/RealmGraph.
1. Contratos internos (campos, defaults e lifecycle)
Realmkind:ThreeDouTwoD.output_surface:SurfaceIdprincipal do realm.render_graph: graph ativo do realm.flags: reservado para políticas de execução.
Surfacekind:OnscreenouOffscreen.size: dimensão lógica em pixels.format_policy: opcional; o core define padrões quando ausente.alpha_policy: opcional; o core define padrões quando ausente.msaa_samples: opcional; o core resolve quando ausente.
PresentwindowId -> surfaceId(virtual swapchain).
ConnectorsourceSurfaceIdrectzIndexblendModeclipinputFlags
2. IDs lógicos e generation
Todas as tabelas (Realm, Surface, Connector, Present) usam IDs lógicos com generation.
O objetivo é impedir uso de IDs expirados e garantir remoção segura.
3. Buffering de Surface e `PreviousFrame`
Cada Surface deve manter pelo menos 2 imagens (current/previous) para permitir:
- leitura do
PreviousFrameem efeitos dependentes de histórico; - bloqueio de leitura do output corrente do próprio realm.
4. Composição multi-janela
Uma mesma Surface pode ser apresentada em múltiplas janelas no mesmo frame:
- ordenação por
zIndex; rectcom regras tipoposition: fixed(coordenadas relativas ao viewport);clipaplicado por conector.
5. Regras do `rect` (connector)
rect é definido por conector, seguindo comportamento tipo CSS position: fixed:
- coordenadas relativas ao viewport da janela;
- clipping e alinhamento por height com corte por width.
6. Impacto no profiling e GPU timestamps
O profiling deve refletir execução multi-realm:
- ordem de execução por realm;
- edges cortadas por ciclo;
- surfaces em cache/fallback;
- timestamps por realm/compositor.
7. RealmGraph minimo (Fase B)
- O
RealmGraphPlannerconstroi o grafo a partir deConnectorsePresents. - Edges
Hardprotegem presents; edgesSoftpodem ser cortadas para quebrar ciclos. - O plano registra
cut_edgespara diagnostico e cache deLastGoodSurface/FallbackSurface. - O compositor do Realm aplica
Connectorpor ordem dezIndex, comrectestiloposition: fixed, alinhamento por altura e clip por largura quando necessario. - O output do Realm e sempre renderavel/sampleavel (targets float), com composicao convertendo tamanho e formato conforme o target final.
Documentation Vulfram Core