草 被一个坑爹bug浪费了两天
之前用RenderGraph用的有点惯性思维了。。。绝大多数对资源的使用都是在CommandBuffer提交后随着命令的执行才开始的,但host对device内存的映射和访问都是立即执行的,所以访问的时候可能之前记录的命令还没有执行,总之不要把这类操作放在RenderGraph里。。。。
又花了一下午捣鼓HLSL的反射
原来DXC把HLSL编译到SPIRV后,反射信息里只包含当前shader stage(或者说entry point)用到的,草,难怪之前我从顶点着色器里反射不到图像和采样器信息
草 原来对RpsRenderGraphUpdateInfo的参数如何传递一直理解不正确
RpsParameterDesc graph_params[] = { { .typeInfo = rpsTypeInfoInitFromType(RpsResourceDesc), .attr = &present_attr, .name = "back_buffer", .flags = RPS_PARAMETER_FLAG_RESOURCE_BIT}, { .typeInfo = rpsTypeInfoInitFromType(bool), .name = "use_msaa" }, { .typeInfo = rpsTypeInfoInitFromType(void *), .name = "p_this" } }; ... auto p_this = this; const RpsRuntimeResource *arg_resources[] = {back_buffers}; RpsConstant arg_data[] = {&back_buffer_desc, &use_msaa, &p_this}; ... auto p_this = *static_cast<RPSSample * const *>(pp_args[2]);
this指针一直传递不正确,搞了一下午才明白原来rps库是把参数全部复制了一遍,而非直接传递指针。。。
sol2是一个用于在C++和Lua之间绑定的库,最近尝试将Lua集成到自己的渲染器里作为脚本语言,所以了解了一下Lua和sol2。在CMake中配置Lua和sol2其实略微有些麻烦,所以在这里记录一下。 首先新建一个目录(我这里命名为lua-sol2),将sol2和Lua分别clone到其中的ext/sol2和ext/lua目录下(个人习惯将第三方…
clangd好强
之前一直用vscode + 微软的C++和CMake插件来写C++,体验还不错,就是IntelliSense有点慢。。。最近尝试了下llvm官方的clangd,几乎全方位吊打微软的C++插件,智能感知飞快,代码静态检查也更强。
CMake Generator必须是Ninja或Makefile,才能导出compile_commands.json使clangd正常工作。