Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 我怎样才能有一个统一的缓冲区数组的字符或短裤?_Opengl_Glsl - Fatal编程技术网

Opengl 我怎样才能有一个统一的缓冲区数组的字符或短裤?

Opengl 我怎样才能有一个统一的缓冲区数组的字符或短裤?,opengl,glsl,Opengl,Glsl,显然OpenGL没有8位或16位的类型。我需要发送一个统一的数组,数组的每个元素包括: unsigned short (16 bit) xPosition; unsigned short (16 bit) yPosition; unsigned short (16 bit) radius; 每个三角形都引用这些值,所以我可以除以gl_VertexID得到当前正在绘制的三角形。问题是这些值每个都有3个短路(48位,3字节)。例如,如果我画的是8号顶点,我可以做8/3=2,我知道我画的是三角形2(

显然OpenGL没有8位或16位的类型。我需要发送一个统一的数组,数组的每个元素包括:

unsigned short (16 bit) xPosition;
unsigned short (16 bit) yPosition;
unsigned short (16 bit) radius;

每个三角形都引用这些值,所以我可以除以gl_VertexID得到当前正在绘制的三角形。问题是这些值每个都有3个短路(48位,3字节)。例如,如果我画的是8号顶点,我可以做8/3=2,我知道我画的是三角形2(第三个三角形),但是我如何索引到统一缓冲区中,以获得xPosition、yPosition和radius?没有简单的方法可以在glsl中使用统一的缓冲区数组或字符或短字符吗?

您必须自己进行计算。您必须读取一个或多个无符号32位整数,并进行掩码/位移位以提取您感兴趣的值

通过不将其作为GLSL的本机特性,API不会给您这样的印象,即较短的变量读取速度与读取32位整数的速度一样快


也就是说,您最好只使用顶点缓冲区(虽然不是4字节对齐的顶点数据可能不是一个好主意)。

您必须自己进行计算。您必须读取一个或多个无符号32位整数,并进行掩码/位移位以提取您感兴趣的值

通过不将其作为GLSL的本机特性,API不会给您这样的印象,即较短的变量读取速度与读取32位整数的速度一样快

也就是说,只使用顶点缓冲区可能更好(尽管不是4字节对齐的顶点数据可能不是一个好主意)