#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 (третий треугольник), но тогда как мне индексировать в однородный буфер, чтобы получить xPosition, yPosition и radius? Нет ли простого способа просто иметь единый буферный массив или символы или короткие строки в glsl?
Ответ №1:
Вам придется сделать математику самостоятельно. Вам нужно будет прочитать одно или несколько 32-разрядных целых чисел без знака и выполнить маскировку / сдвиг в бит, чтобы извлечь интересующие вас значения.
Не делая это встроенной функцией GLSL, API не создает у вас впечатления, что более короткие чтения переменных будут такими же быстрыми, как чтение 32-разрядных целых чисел.
При этом, вероятно, было бы лучше для вас просто использовать буфер вершин (хотя данные вершин, которые не выровнены по 4 байта, вероятно, не являются хорошей идеей).