在对结构体进行哈希时虽然直接对相应大小的字节进行哈希更方便,但要注意不能有编译器添加的padding,它们会影响哈希的结果。

210 日 , 2024 18:14

在关闭深度测试的情况下,同一个drawcall中primitive id较大的三角形会覆盖primitive id较小的(也就是“新的”会覆盖“旧的”),imgui的blend依赖于这一点

117 日 , 2024 21:50

左: forward render 右: Visibility Buffer 但没有正确使用NonUniformResourceIndex

1210 日 , 2023 18:05
草 被一个坑爹bug浪费了两天

之前用RenderGraph用的有点惯性思维了。。。绝大多数对资源的使用都是在CommandBuffer提交后随着命令的执行才开始的,但host对device内存的映射和访问都是立即执行的,所以访问的时候可能之前记录的命令还没有执行,总之不要把这类操作放在RenderGraph里。。。。

130 日 , 2023 18:08
又花了一下午捣鼓HLSL的反射

原来DXC把HLSL编译到SPIRV后,反射信息里只包含当前shader stage(或者说entry point)用到的,草,难怪之前我从顶点着色器里反射不到图像和采样器信息

126 日 , 2023 10:05
草 原来对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库是把参数全部复制了一遍,而非直接传递指针。。。

110 日 , 2023 17:47
麻了,花了一下午在HLSL和反射上

一整个下午都在研究为什么HLSL编译到SPIRV后得到的反射信息有问题,突然想起来貌似不需要用HLSL。。。用GLSL重写一遍就好了。。。

1226 日 , 2022 19:17
Live++使用不同编译器的表现差距很大

因为msvc的编译速度似乎比clang要快不少,让Live++的热重载时间几乎缩短了一半。

1208 日 , 2022 18:33
CMake中配置sol2
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正常工作。

908 日 , 2022 21:59