分类: <span>DirectX</span>

DirectWrite 文字描边

直接用 rendertarget 的 DrawText 方法显示文字的话无法为文字增加描边,用路径对象配合字体字形进行显示,并在内部用画刷填充的话可以达到描边的效果。


水面效果的2D实现

游戏里需要一个背景,直接贴 2d 图片的话显得有些单调了,打算做个动态的背景。用水面的话视野比较广阔,感觉比较合适。因为游戏是直接用 dx 写的,所以水面的实现也自然是写 shader 来完成了。


XAudio2 Operation Sets 操作集

部分XAudio2的方法中含有OperationSet参数,这个参数能决定是否延迟执行这些方法(仅添加一个挂起的操作)。然后在某个特定的时间通过调用XAudio2::CommitChanges,并将它的OperationSet参数指定为目标操作的ID,这样就能让XAudio2组件真正执行对应的操作。这个ID没有特殊要求,只要互不相同即可,因此可以用一个全局计数器来作为它们的ID,每次使用后增加计数即可。这样一来,不同代码就可以互不冲突地提交修改(全局计数器同时也可用于区分提交修改的时间先后)。

同时,以原子方式提交的多个操作被确保是以采样率匹配方式混音的(一个混合音轨方面的术语,防止混音时因采样率的不准确而导致播放时长的变化,详见这里)。比如,声音的播放将会是同步的。另一方面,如果用XAUDIO2_COMMIT_NOW(值为0)作为OperationSet参数的值,改动将立即生效。如果以XAUDIO2_COMMIT_ALL(值也为0)参数调用CommitChanges,则所有挂起的操作都将生效,这时OperationSet的ID将被忽略。