在 Metal Shading Language 中创建全局可访问的常量缓冲区

2024-03-10


我有一个关于 Metal 中的常量缓冲区的问题。 假设我有类似的东西:

...list of includes goes here...

using namespace metal; 

struct ConstantBuffer {
     float ANY_VALUE;
};

struct VS_INPUTS { 
    float4 i_pos_ms [ [ attribute ( 0 ) ] ] ; 
} ; 

struct V2P_STRUCT { 
    float4 v_pos_out [ [ position ] ] ;  
} ; 

float3 CalcSomething() {
    return float3(ANY_VALUE, ANY_VALUE, ANY_VALUE); // !!!!!!!!
}

vertex V2P_STRUCT VertexFunc(VS_INPUTS vs_inputs [ [ stage_in ] ] , 
                             constant ConstantBuffer& cb [ [ buffer (1) ] ] )
{
    V2P_STRUCT vs_outputs;

    vs_outputs.v_pos_out.xyz = CalcSomething();
    vs_outputs.v_pos_out.w = cb.ANY_VALUE; // that's OK

    return vs_outputs;
}

是否可以在不传递 ANY_VALUE 作为输入参数的情况下调用 CalcSomething() ?
例如,在 DX11 或 OpenGL 中,您创建常量缓冲区,可以从着色器代码中的每个位置访问它。

我考虑将“cb”的内容复制到临时全局对象,但我不知道如何做到这一点(因为地址空间恒定)。

另一个想法是以某种方式在全局范围内声明“cb”(但不幸的是 [[buffer]] 仅为参数而设计)。有什么技巧吗?


我的问题的解决方案:

#include <metal_stdlib> 
#include <metal_graphics> 
#include <metal_texture> 
#include <metal_matrix> 
#include <metal_math> 
#include <metal_geometric> 
#include <metal_common> 

using namespace metal; 

constant float MyVariable = 4;

struct ConstantBuffer 
{
    float ANY_VALUE;
};

struct VS_INPUTS { 
    float4 i_pos_ms [ [ attribute ( 0 ) ] ] ; 
}; 

struct V2P_STRUCT { 
    float4 v_pos_out [ [ position ] ] ;  
}; 

struct VertexShader 
{
    thread VS_INPUTS& vs_inputs;
    thread texture2d<float> img;

    constant ConstantBuffer& cb;

    VertexShader(thread VS_INPUTS& inputs, constant ConstantBuffer& b, thread texture2d<float>& texture) 
        : cb(b) 
        , vs_inputs(inputs)
        , img(texture)
    {}

    float3 CalcSomething() {
        return float3(cb.ANY_VALUE, cb.ANY_VALUE, cb.ANY_VALUE); // !!!!!!!!
    }

    V2P_STRUCT majn()
    { 
        V2P_STRUCT vs_outputs;

        vs_outputs.v_pos_out.xyz = CalcSomething();
        vs_outputs.v_pos_out.w = cb.ANY_VALUE * vs_inputs.i_pos_ms.x * MyVariable; // that's OK

        return vs_outputs;
    }
};

vertex V2P_STRUCT VertexFunc(VS_INPUTS vs_inputs [ [ stage_in ] ] , 
                         constant ConstantBuffer& cb [ [ buffer (1) ] ] ,
                         texture2d<float> img [[ texture(0) ]]
                         )
{
    VertexShader vs(vs_inputs, cb, img);
    return vs.majn();
}

我创建了一个包含我的整个原始着色器的结构。参数作为构造函数的引用传递。任何函数都可以从常量缓冲区中读取数据,而无需接收大量参数。 为了解决 ANY_VALUE 现在是 cb 一部分的问题,我使用宏:

#define ANY_VALUE cb.ANY_VALUE.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Metal Shading Language 中创建全局可访问的常量缓冲区 的相关文章

  • 如何在ios上定义可达性超时

    我使用 Reachability 类来了解我是否有可用的互联网连接 问题是当wifi可用但不能上网时 NetworkStatus currentReachabilityStatus方法花费太多时间 my code Reachability
  • 滚动视图下的iOS swift 4 imageview:双击缩小

    我已经应用了图像视图来通过捏合来放大 缩小 那很容易 当在图像视图上应用双击时 无法检测到选择方法 我使用 Xcode 9 和 swift 4 您能告诉我滚动视图是否应该应用双击手势吗 var previewImage UIImage ni
  • cocos2d 2.0-rc2:结束director并重新启动

    我有一款由 cocos2d 驱动的游戏 它使用 UIKit 菜单 所以我只使用一个视图控制器的框架 即游戏本身 而且 它只有一个场景 从cocos2d 2 0开始 director本身就是一个UIViewController子类 所以我只是
  • UITextInputMode currentInputMode 已弃用。建议更换?

    在我们的应用程序中 我们想检测当前的键盘语言 例如 如果用户在 设置 gt 常规 gt 键盘 gt 键盘 下设置了多种语言键盘 我们想知道他们正在输入什么语言 并在发生变化时从 NSNotificationCenter 收到通知 void
  • 使用 Swift 3 和 Realm 同步 Apple Watch 和 iPhone

    我需要从 Apple Watch 和 iPhone 显示和修改我的数据结构 数据库 我目前正在使用一个简单的领域结构 其中有一个对象 A 和一个可以容纳大量 A 的对象 B 因此 在 iPhone 上 用户可以创建 B 并添加 A 当然还可
  • 手动设置时间和日期时,iOS 10 中的重复每日本地通知不会被触发?

    我正在尝试通过触发每日通知来测试 iOS 10 中的本地通知 我正在使用以下示例项目 通知UI 演示 https github com appcoda NotificationsUI Demo 该应用程序中有以下代码之一 let calen
  • ARKit 演示在 iPhone 6/iPhone 6 Plus 上崩溃

    我正在与ARKit功能 https developer apple com videos play wwdc2017 602 最近发布了主要的 iOS 版本 但我遇到了错误崩溃failed assertion MTLRenderPassDe
  • iOS - iPhone 8、8 Plus 和 iPhone X 的设备平台字符串/内部模型[重复]

    这个问题在这里已经有答案了 是什么设备平台字符串即将推出的 iPhone 8 iPhone 8 Plus 和 iPhone X 列表 根据内部型号识别设备的列表如下 对于斯威夫特 func devicePlatform gt String
  • 将声音图形化地表示为波

    我创建了一个记录和播放声音的应用程序 我正在寻找一种显示简单波形的方法 记录声音的表示 不需要动画 只需一个简单的图表 如果可以选择波的子集也很好 当然更好 也播放该部分 总而言之 我正在寻找什么 一种以图形方式将录制的声音表示为波的方法
  • 检测用户何时清除通知中心的通知

    我的应用程序需要知道用户是否使用清除按钮从通知中心删除 清除应用程序通知 是否可以检测用户何时从通知中心删除通知或抓取通知中心上的一组通知 你 即App 无法与NotificationCenter交互 NotificationCenter与
  • 由于没有系统应用程序而终止

    这个错误让我发疯 我有一个按钮 我想移动到视图控制器 如果我将其设置为初始视图控制器 我可以打开该视图控制器 但现在我通过单击按钮来调用它 视图控制器包含一个自定义视图 我在绘制矩形上放置了一个断点 当绘制矩形完成时 模拟器终止 我在屏幕上
  • 如何使用 Swift Package Manager 将 SwiftLint 与 iOS 应用程序集成?

    我正在使用 Xcode 11 beta 5 创建一个新的 iOS 应用程序 并且我想使用 Swift Package Manager 而不是 CocoaPods 来管理依赖项 使用 SwiftLint 和 CocoaPods 时的常见模式是
  • UITableView 无法一直滚动到底部[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只是好奇 我做了一些UITable
  • 子视图的子层与更高的子视图重叠

    我有一个问题 我正在创建一个UIView这是从方法返回的 这部分很好 但我注意到 当我将子层添加到其中一个子视图时 这些层与子层添加的层次结构中较高的子视图 textView 和 imageView 重叠到testViewCopy出现在这些
  • 沙盒测试帐户反复询问 iOS 应用内购买的密码

    我用 Swift 语言开发了一个应用程序 我添加了应用内购买来删除广告 我还创建了一个沙箱帐户来测试 但后来我忘记了这个账户的信息 我不确定信息 密码输入屏幕仍然以闪烁的屏幕显示方式显示 即使我重置设备并重新加载它 也没有任何好处 实际上一
  • 停止在 iOS Web 应用程序上滚动屏幕边缘?

    正在开发 iOS 网络应用程序 用户可以上下滚动页面内容 但是 有没有办法阻止屏幕被拖动得太远以致灰色背景变得可见 这可以通过在移动 Safari 中打开任何网页并将页面下拉来复制 您可以使用诸如 Pastrykit 或 iScroll 之
  • 如何让应用更新以吸引人的屏幕形式提供给用户? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我最近在使用 Make My Trip 应用程序 我发现每当我启动应用程序时都会出现一个非常有吸引力的应用程序更新弹出屏幕 它说要更新应用程
  • iOS 视频压缩 Swift iOS 8 损坏的视频文件

    我正在尝试压缩用户相机从 UIImagePickerController 拍摄的视频 不是现有视频 而是动态视频 以上传到我的服务器 并花费少量时间来完成此操作 因此较小的尺寸是理想的选择 而不是 30 较新质量的相机为 45 mb 这是在
  • 从 Firestore Swift 获取文档 ID

    我正在尝试从中获取文档IDFirestore通过执行这样的查询 func updateStatusInFirestore let orderid saleOrder first Orderid print orderid let setti
  • 如何快速从解析中加载图像?

    我想知道是否有人可以帮助我 我是应用程序开发的新手 我正在从我的应用程序上传图像以在解析文档的帮助下毫无问题地进行解析 let imageData UIImagePNGRepresentation scaledImage let image

随机推荐

  • 用razor显示编码的html

    我将编码的 HTML 存储在数据库中 我可以正确显示它的唯一方法是 div class content MvcHtmlString Create HttpUtility HtmlDecode Model Content div 它很丑 有没
  • 使用Python将海量数据批量插入SQLite

    我读到了这个 使用 Python 将 CSV 文件导入 sqlite3 数据库表 https stackoverflow com questions 2887878 importing a csv file into a sqlite3 d
  • 如何使用 ruby​​ 将图像文件转换为字节数组

    我需要将图像作为字节数组传递到 NET SOAP Web 服务 谁能举例说明如何使用 ruby 将上传的图像文件转换为字节数组 如果我正确理解您的问题 您将获得某种格式的图像 例如 jpeg 或 png 但您需要像素数组才能发送到 SOAP
  • 在带有选项卡的 Winforms 的模型视图演示器中应该使用多少个演示器?

    我有一个带有与业务实体相关的选项卡的表单 例如一个人有传记数据 地址数据等 每个选项卡处理一类个人数据的输入 编辑 并且每个选项卡可以独立保存 应该为所有选项卡使用一名演示者 还是每个选项卡使用一名演示者 还可能有一个主选项卡 它可以导航到
  • 出现 Axios 错误:拨打大量电话时连接 ETIMEDOUT

    从我的 Azure Function 进行大量调用时出现此错误 这个错误是什么意思 如何排除故障 我猜我的 TCP 套接字用完了 我真的不知道如何在功能应用程序菜单中检查它 不过 我检查了 Azure Maps API 的日志 没有错误或掉
  • git 中带有子模块的浅克隆,如何使用指向提交而不是最新提交? [复制]

    这个问题在这里已经有答案了 我知道可以使用浅层子模块 depth选项与git submodule update 但是 如果我跑 git submodule update init recursive depth 1 在我的带有多个子模块的项
  • 如何更改动态 SQL 中的序列?

    我正在尝试创建一个脚本来将数据从一个数据库迁移到另一个数据库 我当前无法做的一件事是将序列的 nextval 设置为另一个数据库中序列的 nextval 我从 user sequences 中得到了值的差异 并生成了以下动态 SQL 语句
  • 如何从 NSArray 中选择 UIImgeView

    I have UIImageView用作可拖动对象 它们位于NSArray所以 当拖动它们时它们工作得很好 但我想要的是当我拖动它们并完成拖动方法而不是将图像放在UIImageView我只想在拖动完成时将其替换为自定义图像 所以我的问题是如
  • 具有相同高度的 SwiftUI HStack 元素

    我希望两个按钮具有相同的高度 类似于Equal HeightUIKit 中的约束 不想指定框架 让 SwiftUI 处理它 但 HStack 中的元素应该具有相同的高度 按钮应具有相同的宽度和高度 并适应较长的文本并增加其框架大小 两个按钮
  • AssemblyInstaller 中的服务类型

    我想通过编程方式安装 Windows 服务example https stackoverflow com questions 1195478 how to make a net windows service start right aft
  • 在广播接收器中检测 USB - 我缺少什么?

    我的代码遗漏了一些东西 需要你的眼睛来定位 我创建了一个 USBOnReciever 广播接收器 public class USBOnReceiver extends BroadcastReceiver Override public vo
  • wc_countries - 国家选择下拉菜单 - woocommerce

    我正在努力设置一个带有默认 WooCommerce 国家和州选择下拉列表的表单 基本上 我想显示国家 地区选择 然后根据国家 地区选择显示州选择 因此 如果用户选择英国 则会显示包含州选择的新下拉列表 我到目前为止
  • 如何保留setTimeout参数值直到执行?

    我有一些在按键时执行的代码 并在用户键入时将数据保存到数据库中 我添加了一个 setTimeout 函数 前面有一个clearTimeout 因此并非用户输入的每个字符都会发送 Ajax 请求来保存数据 虽然 setTimeout 对于一个
  • 浏览器中的 HTTP PATCH 支持

    我正在为我的应用程序设计 REST 端点 并且我需要对一些端点使用 PATCH 所有支持 HTTP 1 1 的浏览器都能够支持 PATCH 吗 HTTP 1 1 没有定义PATCH method HTTP 1 1 确实为客户端和 或服务器添
  • MySQL 中的 CAST 为 DECIMAL

    我正在尝试在 MySQL 中转换为 Decimal 如下所示 CAST COUNT 1 5 AS DECIMAL 2 我正在尝试将表中的行数 乘以 1 5 转换为该点后带有两位数字的浮点数 SQL代码 SELECT CONCAT Guard
  • Boost::序列化和 MFC Doc/View 架构

    我正在移植现有的 MFC C 应用程序以对 XML 文件使用 Boost Serialization 我的 CDocument 对象包含应用程序的所有数据 我已将序列化函数实现为 template
  • 是否可以从同一包中的模块访问 __init__.py 中的变量?

    我有一个 hello1 包 其中包含 good py 模块 hello1 init py good py The init模块有一个变量A 1 我需要访问good py中的变量hello1 A import hello1 class Goo
  • 如何使用brew cask指定版本?

    安装某些东西时如何指定版本号brew cask install 对于最新版本的 Homebrew 下面是杰思罗的指示 https stackoverflow com a 58373705 8280495可能不起作用 因为我们会收到如下错误
  • 将 DateTime 值作为参数传递给 OleDbCommand

    我在将 DateTime 值作为 DbParameter 传递给查询时遇到问题 看来 DateTime 值的时间部分被剥夺了 下面是 C 中的示例代码 DbProviderFactory factory OleDbFactory Insta
  • 在 Metal Shading Language 中创建全局可访问的常量缓冲区

    我有一个关于 Metal 中的常量缓冲区的问题 假设我有类似的东西 list of includes goes here using namespace metal struct ConstantBuffer float ANY VALUE