RFC : support attachments and offscreen pipeline
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Lĩnh vực
- computer-graphics, game-dev
Hướng nghiên cứu
Bắt đầu bằng cách đọc các thay đổi của offscreen-branch trong render.lua và cách xử lý pass và attachment hiện có được mô tả trong pull request 55. Kiểm tra ví dụ deepfuture và các lỗi xác thực định dạng của Sokol. Công việc được xem là hoàn tất khi một interface quản lý pipeline rõ ràng hỗ trợ attachment và kết xuất offscreen mà không làm hỏng kết xuất swapchain thông thường hoặc các interface hiện có.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
From https://github.com/cloudwu/soluna/pull/55
为了支持 offscreen 管线,所以需要给 pass 的 lua 封装增加 attachments 的支持。目前 master 上已经提交,不影响之前的接口。
在实现时遇到的几个问题:
当 pass 的 target 是 attachment view 时,需要保证 pipeline 里的 pixel format 和 depth format 都和 pass 的相同。不然 sokol 的校验层会报类似 VALIDATE_APIP_SWAPCHAIN_COLOR_FORMAT: sg_apply_pipeline: the pipeline .colors[0].pixel_format doesn't match the sg_pass.swapchain.color_format 这样的错误。
由于目前 soluna 只处理 2d 图片,所以实际上不使用深度图。在创建渲染 pass 时,如果 attachment 里不绑定 depth ,就需要在渲染管线里指定 .depth.pixel_format = SG_PIXELFORMAT_NONE 。但这会导致直接向 swapchain 渲染时出错,因为几乎所有 swapchain 都是有 depth 的。
暂时没有找到好的方法解决这个兼容问题:即无论是否使用 offscreen pipeline ,正常渲染的 pass 都不需要修改。可能的方法是在初始化 pass 的时候根据 pipeline 配置做不同的构造;或者干脆建两套 pass 适应不同的 pipeline 。这些对于 lua 这种的动态语言环境倒不是大问题。
但目前我倾向于直接在 offscreen pipeline 创建时也创建一个 depth view ,哪怕不用它。这是 sokol 官方教程推荐的方法。而且以后加 3d 渲染,深度总会用得上的。毕竟 2d 只是个特例。
不光是深度通道,颜色通道也有类似问题:
- for the Metal, D3D11 and WebGPU backends: SG_PIXELFORMAT_BGRA8
- for GL backends: SG_PIXELFORMAT_RGBA8
所以如果在 offscreen 管线下,给 attachment 设置固定的 SG_PIXELFORMAT_RGBA8 也会有问题。目前的解决方法是在创建 attachment 用的 image 时,把 pixel_format 填 0 ,这样 sokol 就会使用 swapchain 的格式。
现在在 offscreen 分支上,修改了 render.lua 增加了一个硬编码的 offscreen pipeline 。是纯 lua 写的,buffer 写死为 640x480 。目前跑 deepfuture 看起来没问题。暂时没想好以后怎样在运行时切换管线。
我希望有一个更完善的管线管理接口,不光是 offscreen 这一个需求。
- Ngôn ngữ chính
- C
- Star
- 384
- Fork
- 24
- Merge trung bình
- 10 giờ 11 phút
- Pull request đã merge (30 ngày)
- 2
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của cloudwu/soluna
-
RFC : support touch messagesĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
Tất cả issue của cloudwu/soluna
Issue tương tự
-
runtime: lf_f128_mod is documented as fmodq (truncating) but implements floor-based modulo; unusedĐang mởinternal correctness low priority rt_lib
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Unreachable code warningĐang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
SanderMertens/flecs#2395 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Memory leak: "Add to Playlist" (`CMD_EVENT_ADD_TO_PLAYLIST`) never frees the playlist it loadsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Signed/unsigned mix in the EOCD backward scan rejects valid archives with a 65535-byte commentĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
OpenXiangShan/NEMU#1287 ·
Maintainer thường phản hồi trong vòng 1 ngày