【发布时间】:2021-07-11 11:26:09
【问题描述】:
有没有办法在 GLSL 中检查目标机器的字节顺序?例如在 OpenCL 中我可以使用
#ifdef __ENDIAN_LITTLE__
uint x = v << 1;
#else
uint x = v >> 1;
#endif
【问题讨论】:
-
您可以在 CPU 端检查并将其作为制服传递。在渲染循环开始之前,您不需要传递每一帧,一次就足够了。
-
目标机器是指GPU吗?是否存在影响任何结果的情况?如果您提供
v作为统一或顶点属性,大概只有 CPU 的字节序起作用,即使在那里,如果它是像GLuint这样的GL...类型,它应该按预期传递值. -
是的,我指的是 GPU。是的,它可以有所作为。例如,我试图将字节缓冲区传递给 GLSL,但当然没有字节数据类型,并且根据字节序,我的
char * cpu_data将以不同的方式映射到uint * glsl_data。我需要知道该 uint 的形式是0xZ000还是0x000Z(其中 Z 是char的原始值)。 -
@AndreiDespinoiu 我也想过,但是我找不到任何可以让我查询 GPU 字节序的函数。
-
@alagris 你真的可以吗?几乎每个消费级 GPU 要么通过 PCIe 连接到 x86 处理器(都使用小端序),要么集成到 CPU(嵌入式图形),要么是 PCB 硬件的一部分(嵌入式)。
标签: opengl glsl endianness