自定义扩展向量类型:例如float4 b = v.xxyz;

2024-06-28

OpenCL、GCC 和 Clang 都有方便的向量类型扩展 http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors.

我最喜欢的功能之一是能够进行如下的 swizzle:

float4 a(1,2,3,4);
float4 b = a.xxyw;  //1124

我怎样才能制作自己的矢量扩展来做到这一点,例如MSVC 也这样吗?我想出的最好的办法就是float4 b = a.xxyw()(见下面的代码)。所以我的主要问题是如何在没有()符号。

如果有人感兴趣,我想出了一些使用定义创建所有排列的代码

#define DEF_SWIZ4(a,b,c,d)  Vec4 a##b##c##d() const { return Vec4(a, b, c, d); }
#define DEF_SWIZ3(a,b,c)    DEF_SWIZ4(a,b,c,x) DEF_SWIZ4(a,b,c,y) DEF_SWIZ4(a,b,c,z) DEF_SWIZ4(a,b,c,w)
#define DEF_SWIZ2(a,b)      DEF_SWIZ3(a,b,x) DEF_SWIZ3(a,b,y) DEF_SWIZ3(a,b,z) DEF_SWIZ3(a,b,w)
#define DEF_SWIZ1(a)        DEF_SWIZ2(a,x) DEF_SWIZ2(a,y) DEF_SWIZ2(a,z) DEF_SWIZ2(a,w)
#define DEF_SWIZ()          DEF_SWIZ1(x) DEF_SWIZ1(y) DEF_SWIZ1(z) DEF_SWIZ1(w)

class Vec4
{
public:
    double x, y, z, w;
    Vec4() : x(0), y(0), z(0), w(0) {}
    Vec4(double x, double y, double z, double w) : x(x), y(y), z(z), w(w) {}
    DEF_SWIZ()
};

#include <iostream>

int main()
{
    Vec4 v(1, 2, 3, 4);
    Vec4 s = v.yyxw();
    std::cout << s.x << " " << s.y << " " << s.z << " " << s.w << std::endl;
}

None

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

自定义扩展向量类型:例如float4 b = v.xxyz; 的相关文章

  • 如何在 C# 中检查互联网连接是否可用

    我为一家公司开发了一个软件 出于某种许可目的 我使用远程数据库来允许 禁止使用该软件 每次用户登录软件时都会应用此任务 如果互联网连接不存在或对远程数据库的查询失败 用户会收到错误 他无法登录软件并显示远程数据库http地址 我不希望他看到
  • 如何将流写入内存流?

    public void doprocess TcpClient client MemoryStream ms new MemoryStream Stream clStream client GetStream byte buffer 1 n
  • ASP.NET Core处理JSON反序列化问题

    我想更改 ASP NET Core 中无效 JSON 请求处理的默认行为 我有这个模型 public class Model public Guid Id get set 当我用这个 body 发送这个请求时 Id null 它返回此错误消
  • 空别名共享指针是否是无操作删除共享指针的良好替代方案?

    有时我需要shared ptr具有无操作删除器的实例 因为 API 期望shared ptr例如 它想要存储有限的时间 但我得到了一个原始指针 不允许我拥有比我运行的时间更长的时间 对于这种情况 我一直使用无操作删除器 例如 const v
  • 将数据路径数据到树状数据结构

    我有以下数据 root root blue root blue temp root main root main dev root main back root etc init root etc init dev root etc ini
  • 为什么 C# 三元运算符不能与委托一起使用?

    当分支选择函数时 使用三元运算符来选择函数可能是有意义的 但这是不可能的 为什么 public class Demo protected bool branch protected void demo1 protected void dem
  • Json.Net 反序列化 JSON 对象,索引为名称 [重复]

    这个问题在这里已经有答案了 我尝试使用 Json NET 从 Web 服务解析 JSON 该 Web 服务返回以下格式的数据 0 ID 193 Title Title 193 Description Description 193 Orde
  • Asp.net MVC 2 缓存

    我目前正在使用 c 中的 asp net mvc 2 开发一个网站 我从未使用过 MVC 中的缓存功能 并且想将其应用到用户个人资料页面 此页面上的内容很少更改 唯一需要实时的部分是用户最近发布的帖子列表 我使用linq to sql从数据
  • 在 C++ 中调用函数有多少开销?

    许多文献都谈到使用内联函数来 避免函数调用的开销 但我还没有看到可量化的数据 函数调用的实际开销是多少 即通过内联函数我们可以实现什么样的性能提升 在大多数架构上 成本包括将所有 或部分 或没有 寄存器保存到堆栈 将函数参数推送到堆栈 或将
  • C:分段错误:GDB:<读取变量时出错>

    我有一个函数shortestPath 它是Dijkstra算法的修改实现 用于我正在为comp2类开发的棋盘游戏AI 我浏览了网站并使用 gdb 和 valgrind 我确切地知道段错误发生的位置 实际上几个小时前就知道了 但无法弄清楚是什
  • DllImport 名称不完整

    我在 NET 下使用多个 P Invoke 但是 我希望我的库能够在 Windows 和 Linux 上运行 最好使用相同的二进制文件 由于我所依赖的本机库可在多个平台上使用 因此我希望将它们与我的托管库的二进制文件一起使用 现在我正在使用
  • fread 在 C 中如何工作?

    我有内容为的文本文件 12345678901222344567 然后我用这段代码来读取内容 FILE pFile int c char buffer 256 pFile fopen myfile txt r int a 50 0 fread
  • 正确的 C 指针表示法 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 跨 Web 服务列表<国家/地区> 变为国家/地区 []

    我有一个 Web 服务 调用时会返回一个包含多态列表的 Result 对象 但是 当我在客户端应用程序中添加引用时 公共字段将成为客户端应用程序中的国家 地区数组 如何将客户端应用程序中的字段更改为列表 public Result GetC
  • C# / 面向对象设计 - 维护有效的对象状态

    设计类时 维护有效状态的逻辑应该合并在类内部还是类外部 也就是说 属性是否应该在无效状态 即值超出范围等 上引发异常 或者是否应该在构造 修改类的实例时执行此验证 它属于班级 除了类本身 以及它委托的任何助手 之外 没有任何东西应该知道或关
  • 解析日期时间字符串

    我在使用 DateTime ParseExact 解析 DateTime 字符串时遇到一些困难 DateTime result CultureInfo provider CultureInfo InvariantCulture Parse
  • 从构造函数调用虚函数[重复]

    这个问题在这里已经有答案了 我正在阅读有效的C https en wikipedia org wiki Scott Meyers 还有 第 9 条 在构造或销毁期间切勿调用虚函数 我想知道我的代码是否正确 即使它违反了这条规则 using
  • 如何将特殊字符 (0x80..0x9F) 写入 Windows 控制台?

    我想要这段代码 System Console Out WriteLine il display il代替oil正如我的测试程序中所做的那样 The Console OutputEncoding默认设置为Western European DO
  • 如何防止禁用的 ToolStripMenuItem 在鼠标悬停时显示边框?

    Yes exactly same as the title in my project some of toolstripmenuitems were disabled But when i bring the cursor over th
  • “System.Int64”类型的表达式不能用于返回类型“System.Object”

    我正在尝试创建以下形式的表达式 e gt e CreationDate CreationDate属于类型long 但是我希望表达式返回一个object反而 我想用object作为返回类型 因为表达式是在运行时根据查询参数动态构建的 查询参数

随机推荐

  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran
  • Swift 3 和 Xcode8 - init 的使用不明确

    在我安装 Xcode 8 并将项目转换为 Swift 3 之前 以下行没问题 现在转换后看起来像这样 let valueData Data Data bytes UnsafePointer
  • 如何将 NSAppTransportSecurity 添加到 Cordova 项目

    我正在从事一个 ionic cordova 项目 该应用程序需要配置 iOS 9 版本的应用程序传输安全例外 有谁知道如何将以下配置添加到 cordova 项目配置文件中 配置 xml
  • Microsoft SQL 数据库的 WebSocket 侦听器

    我目前正在开发一个项目 该项目必须使用 WebSockets 作为将数据传输到客户端的方式 基础设施看起来像这样 客户端 gt Web 服务器 gt Microsoft SQL 数据库 我想最理想的情况应该是这样的 客户端打开一个到服务器的
  • android.view.WindowLeaked - 使用对话框和新意图时

    我已经尝试了 stackoverflow 上提供的所有可能的解决方案 但我仍然在 logcat 中遇到此错误 活动 com xyz MainActivity 泄露了最初在此处添加的窗口 com android internal policy
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav
  • FCM(Firebase Cloud Messaging)如何发送到所有手机?

    我创建了一个小型应用程序 能够从 FCM 控制台接收推送通知 我现在想做的是向所有使用 API 安装应用程序的 Android 手机发送推送通知 这就是我完全迷失的地方 有没有办法在不收集所有注册ID的情况下将其发送到所有手机 这是否仅适用
  • 在 Python ssl 客户端/服务器的情况下自动输入密码短语

    我需要创建客户端 服务器应用程序以将文件从客户端发送到服务器 我使用简单的 ssl 套接字并使用证书进行身份验证 ms socket socket socket AF INET socket SOCK STREAM ssl sock ssl
  • 使用 CASE 语句的多个条件

    我需要查询一些数据 这是我构建的查询 但对我来说效果不佳 在本示例中 我使用 AdventureWorks 数据库 SELECT FROM Purchasing Vendor WHERE PurchasingWebServiceURL LI
  • 如何排除文件/文件夹以删除[重复]

    这个问题在这里已经有答案了 如何删除文件夹中的所有内容并排除特定文件夹和文件 以 tar 为例 tar exclude folder 编辑 我可以删除文件和文件夹 注意 运行以下命令时请小心 find type f grep v NameT
  • 如何滚动具有 3 个列表视图的布局

    我有一种布局 此布局包含 3 个列表视图 列表视图中的 wrap content 数据的高度不固定 当Listview有一个liitel巨大的数据时 数据会转到下面并且数据无法看到 所以我想用所有三个Listview滚动视图 这是怎么可能的
  • WHQL认证过程有多痛苦?

    您能估计一下 WHQL Windows 硬件徽标 认证过程有多痛苦吗 我看到有一个 43 页的分步指南 其中第一步是安装 Windows Server 2008 R2 x64 提交之前完成整个准备过程大约需要多长时间 然后需要多长时间才能得
  • 数据透视表、页面过滤器 - 使用日期过滤

    我正在尝试过滤具有日期值的页面过滤器 但我在使用时不断出现错误 PivotFilters Add type xlBefore value 5 1 2015 我还尝试了下面的代码 Dim nd As Long nd CLng Date 90
  • 如何扩展现有的 SASS 引导网格类

    我试图让我的代码更干净 所以我有类似的东西 div class col sm 6 col md 6 div class feature list item div class feature list item icon container
  • 张量流错误utf-8 OS X Sierra

    我已经在 OS X Sierra 上安装了 TensorFlow 和 Anaconda 我在安装过程中没有遇到任何问题 写出典型的例子 import tensorflow as tf a tf constant 5 name input a
  • 选择仅属于特定部门的用户

    我有下表 其中包含两个字段 即 a 和 b 如下所示 create table employe empID varchar 10 department varchar 10 插入一些记录 insert into employe values
  • 如何在 Windows 中安装“posix”

    我正在 Windows 7 中使用 WAMP 服务器并尝试使用posixphp 中的函数 但它不起作用并且给出fatal error undefined function 现在我想知道如何在 Windows 上安装它 如果它不适用于 Win
  • 涉及随机数的单元测试算法

    我正在编写一些关于分形和随机地形生成的代码 具体来说 我现在正在使用 Diamond Square 算法 对于那些不知道的人来说 它基本上每一步都会获得四个值的平均值 并添加一个随机数 我将如何测试结果 我应该使用已知的种子并手动计算平均值
  • 如何访问jar中的静态资源(对应于src/main/resources文件夹)?

    我有一个火花流 https spark apache org streaming 使用 Maven 作为 jar 构建并使用spark submit脚本 应用程序项目布局遵循标准目录布局 myApp src main scala com m
  • 自定义扩展向量类型:例如float4 b = v.xxyz;

    OpenCL GCC 和 Clang 都有方便的向量类型扩展 http clang llvm org docs LanguageExtensions html vectors and extended vectors 我最喜欢的功能之一是能