Buffer and Texture Operations: Blit Command Encoder

  • Copying Data in GPU Memory Between Resource Objects
  • Generating Mipmaps
  • Filling the Contents of a Buffer
  • Ending Encoding for the Blit Command Encoder

  • MTLBlitCommandEncoder 提供 copy data between buffer 和 texture 的方法。data copying 操作对图片处理和一些texture 效果非常必要,比如 blur or reflection。也可以用于access image data that is render off-screen

    要执行 data copying操作,首先通过MTLCommandBuffer 的 blitCommandEncoder 方法创建一个 MTLBlitCommandEncoder object,然后调用 MTLBlitCommandEncoder 的如下方法 将 command encode onto command buffer

    Copying Data in GPU Memory Between Resource Objects

    MTLBlitCommandEncoder 方法在 resources object 之间进行 image data 的copy:between 2 buffer、between 2 texture、between buffer 和 texture

    Copying Data Between Two Buffers

    copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size: 方法在2个buffer之间 copy data。从源buffer 到 目标 buffer toBuffer。如果source 和 destination 是同一个buffer,且copy 的范围有重叠,则返回 undefine

    Copying Data from a Buffer to a Texture

    copyFromBuffer:sourceOffset:sourceBytesPerRow:sourceBytesPerImage:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin: 方法将image data 从source buffer copy 到 destination texture toTexture

    Copying Data Between Two Textures

    copyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin: 方法在2个texture 之间 copy a region of image data;从一个简单的 (cube) slice and mipmap level 的source texture copy 到 destination texture toTexture

    Copying Data from a Texture to a Buffer

    copyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toBuffer:destinationOffset:destinationBytesPerRow:destinationBytesPerImage: 从一个简单的 (cube) slice and mipmap level 的source texture copy 到 destination buffer toBuffer

    Generating Mipmaps

    MTLBlitCommandEncoder 的 generateMipmapsForTexture 方法为指定texture 自动创建 mipmap,从 base level texture image 开始。generateMipmapsForTexture 为所有的mipmap level(一直到最大level)创建scaled image

    Filling the Contents of a Buffer

    MTLBlitCommandEncoder 的 fillBuffer:range:value: 为制定 buffer 的指定range中的每个byte store 8-bit 常数值

    Ending Encoding for the Blit Command Encoder

    调用 endEncoding 来结束 blit command encoder 的 encoding command。在结束了前一个 command encoder后,可以创建任意类型的 command encoder 来 encode 更多command 到该command buffer。

    本节教程就到此结束,希望大家继续阅读我之后的教程。

    谢谢大家,再见!


    原创技术文章,撰写不易,转载请注明出处:电子设备中的画家|王烁 于 2022 年 4 月 26 日发表,原文链接(http://geekfaner.com/shineengine/blog52_MetalProgrammingGuide_7.html)