Opengl 我可以重新解释GLSL中的演员阵容吗? C++中,可以取一个无符号int的指针,并将其转换为一个指向已签名int的指针( RealTytCase< /COD>)。 无符号整数a=200; int b=*(重新解释演员阵容(&a));

Opengl 我可以重新解释GLSL中的演员阵容吗? C++中,可以取一个无符号int的指针,并将其转换为一个指向已签名int的指针( RealTytCase< /COD>)。 无符号整数a=200; int b=*(重新解释演员阵容(&a));,opengl,casting,glsl,Opengl,Casting,Glsl,我需要将着色器中生成的int存储为unsigned int,以写入具有无符号整数内部格式的纹理。GLSL中的C++重新解释转换有没有类似的替代方法?GLSL不支持这种转换(也不支持指针)。相反,在GLSL中,您可以使用构造函数样式语法构造不同类型的值: int a = 5; // set an int to a constant uint b = uint(a); // "cast" that int to a uint by constructing a uint from it.

我需要将着色器中生成的
int
存储为
unsigned int
,以写入具有无符号整数内部格式的纹理。GLSL中的C++重新解释转换有没有类似的替代方法?

GLSL不支持这种转换(也不支持指针)。相反,在GLSL中,您可以使用构造函数样式语法构造不同类型的值:

int a = 5;    // set an int to a constant
uint b = uint(a);   // "cast" that int to a uint by constructing a uint from it.

GLSL不支持这种类型的强制转换(也不支持指针)。相反,在GLSL中,您可以使用构造函数样式语法构造不同类型的值:

int a = 5;    // set an int to a constant
uint b = uint(a);   // "cast" that int to a uint by constructing a uint from it.
<>在C++(Prime20)中,允许符号和无符号整数以非常不同的方式表示。C++不要求符号整数为二元补码;实现允许使用一个或多个表示形式。C++对签名与无符号的唯一要求是将所有非负(或陷阱)签名值转换为未签名的值。 仅供参考:您的代码因违反严格的别名规则(通过指向不相关的Y类型对象的指针访问X类型对象)而生成UB。虽然在低级代码中这是很常见的,但是C++对象模型并不真正允许它。但我离题了

我提出了所有有符号和无符号的东西,因为GLSL实际上定义了有符号整数的表示。在GLSL中,有符号整数是2的补码。因此,GLSL可以定义如何从整个无符号值范围转换为有符号值,反之亦然,只需保留值的位模式即可

这正是它所做的。因此,不必使用铸造体操,只需进行无符号到有符号的转换,就像浮球到有符号的转换一样:

int i = ...
uint j = uint(i);
此转换保留位模式

在C++(Prime20)中,C++和20的符号是允许的,而符号和无符号整数则以不同的方式表示。C++不要求符号整数为二元补码;实现允许使用一个或多个表示形式。C++对签名与无符号的唯一要求是将所有非负(或陷阱)签名值转换为未签名的值。 仅供参考:您的代码因违反严格的别名规则(通过指向不相关的Y类型对象的指针访问X类型对象)而生成UB。虽然在低级代码中这是很常见的,但是C++对象模型并不真正允许它。但我离题了

我提出了所有有符号和无符号的东西,因为GLSL实际上定义了有符号整数的表示。在GLSL中,有符号整数是2的补码。因此,GLSL可以定义如何从整个无符号值范围转换为有符号值,反之亦然,只需保留值的位模式即可

这正是它所做的。因此,不必使用铸造体操,只需进行无符号到有符号的转换,就像浮球到有符号的转换一样:

int i = ...
uint j = uint(i);
此转换保留位模式


哦,C++20似乎是这样。

说“保证[int和uint]之间的转换可以保留位模式”,这能满足您的需要吗?@vu1p3n0x啊,我觉得没有抓住这一点很愚蠢。是的,这就是答案。因为答案很简单,我应该把这个问题留起来还是记下来?@Spektre在我的程序中是一个未签名的int。。。我不知道为什么要在示例中添加char,我将对其进行编辑。说“保证[int和uint]之间的转换可以保留位模式”,这能满足您的需要吗?@vu1p3n0x-Ah没有捕捉到这一点,我觉得很傻。是的,这就是答案。因为答案很简单,我应该把这个问题留起来还是记下来?@Spektre在我的程序中是一个未签名的int。。。我不知道为什么要在示例中添加char,我将对其进行编辑。