区块链技术博客
www.b2bchain.cn

自定义配置渲染通道求职学习资料

本文介绍了自定义配置渲染通道求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

Customizing Render Pass Setup | Apple Developer Documentation

通过创建一个自定义渲染通道,渲染成离屏纹理。

翻译术语表

概述

渲染通道是一连串的渲染命令,用于绘制成一组纹理。本示例执行了一对渲染通道来渲染视图的内容。对于第一个通道,示例创建了一个自定义的渲染通道,将图像绘制成纹理。这个通道是一个离屏渲染通道(offscreen render pass),因为示例渲染到一个正常的纹理,而不是由显示子系统创建的纹理。第二个渲染通道使用MTKView对象提供的渲染通道描述符来渲染和显示最终图像。该示例使用来自离屏渲染通道的纹理作为第二个渲染通道中绘制命令的源数据。

离屏渲染通道是大型或更复杂的渲染器的基本构件。例如,许多光照和阴影算法需要一个离屏渲染通道来渲染阴影信息,并需要第二个通道来计算最终的场景光照。当对不需要在屏幕上显示的数据进行批量处理时,离屏渲染通道也就派上用场。

为离屏渲染通道创建纹理

一个MTKView对象会自动创建可绘制的纹理来渲染。该示例还需要一个纹理来渲染到离屏渲染通道中。为了创建该纹理,首先创建一个MTLTextureDescriptor对象,并配置其属性。

MTLTextureDescriptor *texDescriptor = [MTLTextureDescriptor new]; texDescriptor.textureType = MTLTextureType2D; texDescriptor.width = 512; texDescriptor.height = 512; texDescriptor.pixelFormat = MTLPixelFormatRGBA8Unorm; texDescriptor.usage = MTLTextureUsageRenderTarget |                       MTLTextureUsageShaderRead;

示例配置了usage属性,来准确地说明它打算如何使用新的纹理。它需要在离屏渲染时把数据渲染到纹理中,并在第二次渲染时从纹理中读取数据。该示例通过设置MTLTextureUsageRenderTargetMTLTextureUsageShaderRead标志来指定这种用法。

精确设置用法标志可以提高性能,因为Metal可以只为指定的用法配置纹理的底层数据。

创建渲染管线

渲染管线指定了如何执行一个绘图命令,包括要执行的顶点和片元函数,以及它所作用的任何渲染目标的像素格式。之后,当示例创建自定义渲染通道时,必须使用相同的像素格式。

本示例为每个渲染通道创建一个渲染管线,使用以下代码创建离屏渲染管线:

pipelineStateDescriptor.label = @"Offscreen Render Pipeline"; pipelineStateDescriptor.sampleCount = 1; pipelineStateDescriptor.vertexFunction =  [defaultLibrary newFunctionWithName:@"simpleVertexShader"]; pipelineStateDescriptor.fragmentFunction =  [defaultLibrary newFunctionWithName:@"simpleFragmentShader"]; pipelineStateDescriptor.colorAttachments[0].pixelFormat = _renderTargetTexture.pixelFormat; _renderToTextureRenderPipeline = [_device newRenderPipelineStateWithDescriptor:pipelineStateDescriptor error:&error];

为可绘制渲染通道创建管线的代码与Using a Render Pipeline to Render Primitives的代码类似。为了保证两种像素格式相匹配,示例将描述符的像素格式设置为视图的colorPixelFormat属性值。同样,在创建离屏渲染管线时,示例将描述符的像素格式设置为离屏纹理的格式。

设置离屏渲染通道描述符

为了渲染离屏的纹理,本示例配置了一个新的渲染通道描述符。它创建了一个MTLRenderPassDescriptor对象并配置了它的属性。本示例渲染一个单一颜色的纹理,所以设置colorAttachment[0].texture指向离屏的纹理:

_renderToTextureRenderPassDescriptor.colorAttachments[0].texture = _renderTargetTexture;

本示例还必须为这个渲染目标配置一个加载动作(load action)和存储动作(store action)。

_renderToTextureRenderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionClear; _renderToTextureRenderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(1, 1, 1, 1);  _renderToTextureRenderPassDescriptor.colorAttachments[0].storeAction = MTLStoreActionStore;

在GPU执行任何绘图命令之前,加载动作会在渲染通道开始时确定纹理的初始内容。同样,存储动作在渲染通道完成后运行,并决定了GPU是否把最终图像写回纹理。该示例配置了一个用于擦除渲染目标内容的加载动作和一个用于将渲染数据存储会纹理的存储动作。存储动作是必要的,因为第二个渲染通道中的绘图命令将对这些数据进行采样。

Metal使用加载和存储动作来优化GPU管理纹理数据的方式。大型纹理会消耗大量的内存,而在这些纹理上工作会消耗大量的内存带宽。正确设置渲染目标可以减少GPU用于访问纹理的内存带宽,提供性能和电池寿命。参阅Setting Load and Store Actions来获得指导。

Customizing Render Pass Setup | Apple Developer Documentation

通过创建一个自定义渲染通道,渲染成离屏纹理。

翻译术语表

概述

渲染通道是一连串的渲染命令,用于绘制成一组纹理。本示例执行了一对渲染通道来渲染视图的内容。对于第一个通道,示例创建了一个自定义的渲染通道,将图像绘制成纹理。这个通道是一个离屏渲染通道(offscreen render pass),因为示例渲染到一个正常的纹理,而不是由显示子系统创建的纹理。第二个渲染通道使用MTKView对象提供的渲染通道描述符来渲染和显示最终图像。该示例使用来自离屏渲染通道的纹理作为第二个渲染通道中绘制命令的源数据。

离屏渲染通道是大型或更复杂的渲染器的基本构件。例如,许多光照和阴影算法需要一个离屏渲染通道来渲染阴影信息,并需要第二个通道来计算最终的场景光照。当对不需要在屏幕上显示的数据进行批量处理时,离屏渲染通道也就派上用场。

为离屏渲染通道创建纹理

一个MTKView对象会自动创建可绘制的纹理来渲染。该示例还需要一个纹理来渲染到离屏渲染通道中。为了创建该纹理,首先创建一个MTLTextureDescriptor对象,并配置其属性。

MTLTextureDescriptor *texDescriptor = [MTLTextureDescriptor new]; texDescriptor.textureType = MTLTextureType2D; texDescriptor.width = 512; texDescriptor.height = 512; texDescriptor.pixelFormat = MTLPixelFormatRGBA8Unorm; texDescriptor.usage = MTLTextureUsageRenderTarget |                       MTLTextureUsageShaderRead;

示例配置了usage属性,来准确地说明它打算如何使用新的纹理。它需要在离屏渲染时把数据渲染到纹理中,并在第二次渲染时从纹理中读取数据。该示例通过设置MTLTextureUsageRenderTargetMTLTextureUsageShaderRead标志来指定这种用法。

精确设置用法标志可以提高性能,因为Metal可以只为指定的用法配置纹理的底层数据。

创建渲染管线

渲染管线指定了如何执行一个绘图命令,包括要执行的顶点和片元函数,以及它所作用的任何渲染目标的像素格式。之后,当示例创建自定义渲染通道时,必须使用相同的像素格式。

本示例为每个渲染通道创建一个渲染管线,使用以下代码创建离屏渲染管线:

pipelineStateDescriptor.label = @"Offscreen Render Pipeline"; pipelineStateDescriptor.sampleCount = 1; pipelineStateDescriptor.vertexFunction =  [defaultLibrary newFunctionWithName:@"simpleVertexShader"]; pipelineStateDescriptor.fragmentFunction =  [defaultLibrary newFunctionWithName:@"simpleFragmentShader"]; pipelineStateDescriptor.colorAttachments[0].pixelFormat = _renderTargetTexture.pixelFormat; _renderToTextureRenderPipeline = [_device newRenderPipelineStateWithDescriptor:pipelineStateDescriptor error:&error];

为可绘制渲染通道创建管线的代码与Using a Render Pipeline to Render Primitives的代码类似。为了保证两种像素格式相匹配,示例将描述符的像素格式设置为视图的colorPixelFormat属性值。同样,在创建离屏渲染管线时,示例将描述符的像素格式设置为离屏纹理的格式。

设置离屏渲染通道描述符

为了渲染离屏的纹理,本示例配置了一个新的渲染通道描述符。它创建了一个MTLRenderPassDescriptor对象并配置了它的属性。本示例渲染一个单一颜色的纹理,所以设置colorAttachment[0].texture指向离屏的纹理:

_renderToTextureRenderPassDescriptor.colorAttachments[0].texture = _renderTargetTexture;

本示例还必须为这个渲染目标配置一个加载动作(load action)和存储动作(store action)。

_renderToTextureRenderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionClear; _renderToTextureRenderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(1, 1, 1, 1);  _renderToTextureRenderPassDescriptor.colorAttachments[0].storeAction = MTLStoreActionStore;

在GPU执行任何绘图命令之前,加载动作会在渲染通道开始时确定纹理的初始内容。同样,存储动作在渲染通道完成后运行,并决定了GPU是否把最终图像写回纹理。该示例配置了一个用于擦除渲染目标内容的加载动作和一个用于将渲染数据存储会纹理的存储动作。存储动作是必要的,因为第二个渲染通道中的绘图命令将对这些数据进行采样。

Metal使用加载和存储动作来优化GPU管理纹理数据的方式。大型纹理会消耗大量的内存,而在这些纹理上工作会消耗大量的内存带宽。正确设置渲染目标可以减少GPU用于访问纹理的内存带宽,提供性能和电池寿命。参阅Setting Load and Store Actions来获得指导。

Customizing Render Pass Setup | Apple Developer Documentation

通过创建一个自定义渲染通道,渲染成离屏纹理。

翻译术语表

概述

渲染通道是一连串的渲染命令,用于绘制成一组纹理。本示例执行了一对渲染通道来渲染视图的内容。对于第一个通道,示例创建了一个自定义的渲染通道,将图像绘制成纹理。这个通道是一个离屏渲染通道(offscreen render pass),因为示例渲染到一个正常的纹理,而不是由显示子系统创建的纹理。第二个渲染通道使用MTKView对象提供的渲染通道描述符来渲染和显示最终图像。该示例使用来自离屏渲染通道的纹理作为第二个渲染通道中绘制命令的源数据。

离屏渲染通道是大型或更复杂的渲染器的基本构件。例如,许多光照和阴影算法需要一个离屏渲染通道来渲染阴影信息,并需要第二个通道来计算最终的场景光照。当对不需要在屏幕上显示的数据进行批量处理时,离屏渲染通道也就派上用场。

为离屏渲染通道创建纹理

一个MTKView对象会自动创建可绘制的纹理来渲染。该示例还需要一个纹理来渲染到离屏渲染通道中。为了创建该纹理,首先创建一个MTLTextureDescriptor对象,并配置其属性。

MTLTextureDescriptor *texDescriptor = [MTLTextureDescriptor new]; texDescriptor.textureType = MTLTextureType2D; texDescriptor.width = 512; texDescriptor.height = 512; texDescriptor.pixelFormat = MTLPixelFormatRGBA8Unorm; texDescriptor.usage = MTLTextureUsageRenderTarget |                       MTLTextureUsageShaderRead;

示例配置了usage属性,来准确地说明它打算如何使用新的纹理。它需要在离屏渲染时把数据渲染到纹理中,并在第二次渲染时从纹理中读取数据。该示例通过设置MTLTextureUsageRenderTargetMTLTextureUsageShaderRead标志来指定这种用法。

精确设置用法标志可以提高性能,因为Metal可以只为指定的用法配置纹理的底层数据。

创建渲染管线

渲染管线指定了如何执行一个绘图命令,包括要执行的顶点和片元函数,以及它所作用的任何渲染目标的像素格式。之后,当示例创建自定义渲染通道时,必须使用相同的像素格式。

本示例为每个渲染通道创建一个渲染管线,使用以下代码创建离屏渲染管线:

pipelineStateDescriptor.label = @"Offscreen Render Pipeline"; pipelineStateDescriptor.sampleCount = 1; pipelineStateDescriptor.vertexFunction =  [defaultLibrary newFunctionWithName:@"simpleVertexShader"]; pipelineStateDescriptor.fragmentFunction =  [defaultLibrary newFunctionWithName:@"simpleFragmentShader"]; pipelineStateDescriptor.colorAttachments[0].pixelFormat = _renderTargetTexture.pixelFormat; _renderToTextureRenderPipeline = [_device newRenderPipelineStateWithDescriptor:pipelineStateDescriptor error:&error];

为可绘制渲染通道创建管线的代码与Using a Render Pipeline to Render Primitives的代码类似。为了保证两种像素格式相匹配,示例将描述符的像素格式设置为视图的colorPixelFormat属性值。同样,在创建离屏渲染管线时,示例将描述符的像素格式设置为离屏纹理的格式。

设置离屏渲染通道描述符

为了渲染离屏的纹理,本示例配置了一个新的渲染通道描述符。它创建了一个MTLRenderPassDescriptor对象并配置了它的属性。本示例渲染一个单一颜色的纹理,所以设置colorAttachment[0].texture指向离屏的纹理:

_renderToTextureRenderPassDescriptor.colorAttachments[0].texture = _renderTargetTexture;

本示例还必须为这个渲染目标配置一个加载动作(load action)和存储动作(store action)。

_renderToTextureRenderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionClear; _renderToTextureRenderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(1, 1, 1, 1);  _renderToTextureRenderPassDescriptor.colorAttachments[0].storeAction = MTLStoreActionStore;

在GPU执行任何绘图命令之前,加载动作会在渲染通道开始时确定纹理的初始内容。同样,存储动作在渲染通道完成后运行,并决定了GPU是否把最终图像写回纹理。该示例配置了一个用于擦除渲染目标内容的加载动作和一个用于将渲染数据存储会纹理的存储动作。存储动作是必要的,因为第二个渲染通道中的绘图命令将对这些数据进行采样。

Metal使用加载和存储动作来优化GPU管理纹理数据的方式。大型纹理会消耗大量的内存,而在这些纹理上工作会消耗大量的内存带宽。正确设置渲染目标可以减少GPU用于访问纹理的内存带宽,提供性能和电池寿命。参阅Setting Load and Store Actions来获得指导。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 自定义配置渲染通道求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们