Я использую внеэкранный рендеринг в текстуру для простого вычисления GPU.Я использую
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, texSize, texSize, 0, GL_RGBA, GL_FLOAT, nullptr);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
для выделения памяти для текстуры и
glReadPixels(0, 0, texSize, texSize, GL_RGBA, GL_FLOAT, data);
для считывания вычисленных данных.Проблема в том, что интересующий меня фрагментный шейдер выводит только vec2
, поэтому первые два слота цветового вложения заполнены, а два других - мусор.Затем мне нужно постобработать data
, чтобы взять только два из каждых четырех float
с, что потребует ненужных циклов и памяти.
Если бы это было одно значение, я бы использовал GL_RED
,если бы это было три, я бы использовал GL_RGB
в моем glReadPixels
.Но я не мог найти формат, который будет читать два значения.Я использую GL_RGBA
только для удобства, так как кажется более естественным брать 2 числа с плавающей точкой из 2 × 2, чем из 3.
Есть ли другой способ, который будет читать все полученные vec2
плотно упакованные?Я думал о том, чтобы читать только RED, как-то убедить OpenGL пропустить четыре байта после каждого значения, а затем прочитать GREEN только в тот же массив, чтобы заполнить пробелы.С этой целью я пытался изучить glPixelStore
, но, похоже, не для этой цели.Это вообще возможно или вообще возможно?