В конце концов, «двойник» - это просто способ интерпретации 64-битных данных. Ваша цель - получить правильные 64-битные значения в вашем буфере.
Что касается очистки буфера , то формат изображения и параметры передачи пикселей - это простообъяснение того, как интерпретировать данные, которые вы передаете. Если внутренний формат операции очистки - GL_RG32UI
, то каждый «пиксель» в буфере - это 64-битные данные.
Учитывая это, все, что вам нужно сделать, это заставить функцию очистки принять64-битный блок и скопируйте его точно так, как вы его предоставили. Чтобы сделать это, вы должны использовать правильные параметры передачи пикселей .
Смотрите, операции переноса пикселей могут выполнять преобразование данных, принимая пройденный указатель data
и преобразовывая его в соответствии свнутренний формат. Вы не хотите этого;Вы хотите прямую копию. Таким образом, ваши параметры передачи пикселей должны точно соответствовать внутреннему формату. Что довольно просто.
Формат GL_RG_INTEGER
представляет двухкомпонентный пиксель, который хранит целочисленные данные в красно-зеленом порядке. А тип GL_UNSIGNED_INT
означает, что каждый компонент представляет собой 32-разрядное целое число без знака. Это точно соответствует внутреннему формату GL_RG32UI
, поэтому алгоритм копирования не будет связываться с байтами ваших данных.
Итак, учитывая некоторое 64-битное значение double
в C или C ++, очисткабуфер для этого double
должен быть таким простым:
void clear_buffer_to_double(GLuint buffer, double dbl)
{
glClearNamedBufferData(buffer, GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT, &dbl);
}