ProtoPie renderer — renderer-resource 개발 문서 원문 텍스트 추출본 / 2026-09-14 # renderer-resource Paint texture 업로드 + LRU 텍스처 캐시 + 바인딩 메타데이터를 관리한다. 백엔드-독립. ## Module layout ``` src/ ├── lib.rs # module declarations + pub use + round_up_texture_tier re-export ├── resource_manager.rs # ResourceManager, TextureSourceResolver, RenderResourceView ├── fill/ │ ├── provider.rs # PaintTextureProvider, PaintTextureResult, PixelData │ └── gradient_provider.rs # GradientTextureProvider (gradient stop → 1D texture) └── cache/ └── texture_cache.rs # TextureCache, TextureEntry, TextureBindingMeta ``` ## Public surface ```rust ResourceManager ::new(device: Arc) -> Self sync_texture_bindings_from_scene_with_strokes(scene, stroke_plans, resolver) -> () sync_display_sizes_with_strokes(scene, stroke_plans) -> () ensure_frame_resources(...) -> () trait TextureSourceResolver { fn resolve_provider(&mut self, request: &TextureSourceRequest) -> Result, String>; } trait RenderResourceView { ... } // read-only access from painters / executors trait PaintTextureProvider { fn poll(&mut self) -> PaintTextureResult; fn as_any_mut(&mut self) -> &mut dyn Any; // downcast 지원 } ``` ## Key types | Type | 역할 | |----------------------------|---------------------------------------------------------| | `ResourceManager` | Paint 바인딩 동기화, 프레임 갱신, 예산 관리 | | `TextureSourceResolver` | `TextureSourceRequest` → `PaintTextureProvider` (백엔드별) | | `RenderResourceView` | 읽기 전용 리소스 접근 (painter / executor 용) | | `TextureCache` | LRU 기반 GPU 텍스처 캐시 | | `PaintTextureProvider` | 소스별 픽셀 데이터 제공 | | `GradientTextureProvider` | gradient stop → 1D 텍스처 픽셀 | | `TextureBindingMeta` | 바인딩 메타데이터 (UV transform 등) | | `round_up_texture_tier` | 텍스처 크기 양자화 (renderer-core 재노출) | ## Design - `renderer-graph` 의존 금지. graph executor 는 `external_views` 로 텍스처 받음. - `TextureSourceResolver` 는 플랫폼별 (예: `renderer-wasm` 의 `WasmTextureSourceResolver`). - Paint binding sync 키 = `(LayerId, paint_slot)` + `TextureSourceRequest.kind`. 같은 source key 라도 media kind 가 바뀌면 provider 재 resolve. - Gradient paint 는 synthetic RuntimeId 로 `GradientTextureProvider` 자동 생성 / 갱신. - Stroke 의 image/gradient paint 도 fill 과 동일 경로로 통합. Frame route 에서는 `renderer-core::stroke::StrokePlanSet` 을 받아 stroke paint/slot/support 를 재해석하지 않는다. ## Hard rules - `renderer-tess` 재노출 X — 소비자가 직접 import. - 텍스처 budget 초과 시 LRU eviction. - `round_up_texture_tier` 의 원본은 renderer-core, 이 crate 는 re-export 만. ## Dependencies - renderer-core (TextureSource, SceneGraph, LayerId, CameraState, round_up_texture_tier) - renderer-gpu (RhiDevice, RhiQueue, RhiTextureView) - log