knowledge
2025年6月30日
bool OutletBeh::GetAirCleanSwitch()
{
float emissionRate = 0.0f;
CallParticleFunction(mTree, std::bind(&OutletBeh::GetParticleEmissionRateImpl, this, std::placeholders::_1, emissionRate));
return emissionRate > 0.0f;
}
std::ref(emissionRate) 创建了对变量 emissionRate 的引用包装器。在这个上下文中,它的作用是允许 GetParticleEmissionRateImpl 函数修改 emissionRate 变量的值。
在 C++ 中,使用 std::bind 时,参数默认是按值传递的。如果需要传递引用以便被调用函数可以修改原始变量,就必须使用 std::ref 或 std::cref(常量引用)。
查看代码,GetParticleEmissionRateImpl 方法接收参数为 float&(引用类型),它需要修改这个参数的值:
void OutletBeh::GetParticleEmissionRateImpl(std::shared_ptr<SceneNode> particleNode, float& emissionRate)
{
// ...
emissionRate = particle->GetSystem().GetParticleEmitter()->GetModules().GetEmissionModule().GetEmissionRate();
}
如果不使用 std::ref,std::bind 会创建一个 emissionRate 的副本,对副本的修改不会影响原始变量。使用 std::ref 确保了函数能修改调用者作用域中的原始 emissionRate 变量。
2025年6月12日
关于KTX格式
KTX格式是Khronos Texture格式,它提供了几个关键优势:
- 直接GPU加载 - KTX是为GPU设计的格式,可以直接被GPU加载,无需像JPEG那样先解码到CPU内存再传输到GPU
- 支持压缩纹理 - 可以存储已压缩的GPU纹理格式(如ETC, ASTC, BC),减少GPU内存占用和带宽需求
- 保留完整的纹理元数据 - 包括mipmap级别、纹理类型等信息
- 跨平台兼容性 - 由Khronos Group(OpenGL/Vulkan标准组织)定义的标准格式
- 虽然文件大小可能与JPG相近,但主要优势在于渲染性能和加载速度。对于序列帧动画的首尾帧,使用KTX可能是为了减少这些关键帧的加载延迟,因为这些帧在视觉过渡中最为关键,需要更快的加载速度以确保流畅的用户体验。
此外,KTX格式可以保持更高的图像质量而不引入JPG的压缩伪影,这对于静态展示的首尾关键帧特别重要。
怎么那么爱用函数回调?
双重逻辑非运算符
代码中的 !!mSlider 是C/C++中常见的双重逻辑非运算符用法,主要用于:
- 类型转换:将任意类型的值强制转换为严格的布尔值
- 运算逻辑:
- 第一层 ! 将原值转为逻辑非值(0变1,非0变0)
- 第二层 ! 再次反转得到等效布尔值

浙公网安备 33010602011771号