2012-01-20 4 views
0

Я занимаюсь программированием GPGPU с OpenGL."cast" GL_R8 to GL_BGRA

Я хочу, чтобы иметь возможность записывать все мои данные в одномерные текстуры в формате GL_R8, так что я в основном могу рассматривать его как объект std:array.

Затем во время рендеринга я хотел бы иметь возможность установить, как графический процессор должен считывать изображение, например. «отбросить» его до 1024x1024 BGRA.

Возможно ли это?

например. что я хочу:

gpu::array<uint8_t> data(GL_R8, width*height*4); 
gpu::bind(data, GL_TEXTURE0, gpu::format::bgra, width, height); 

ответ

2

Затем используйте buffer texture. Нет правила (что я знаю), который говорит, что вы не можете подключить один и тот же буфер до нескольких разных текстур. Это позволит использовать одну текстуру с внутренним форматом GL_R8. И другая текстура может использовать его в формате GL_RGBA8.

+0

Не мог ли он просто настроить текстуру swizzle от R до RGBA? 'glTexParameteri (GL_TEXTURE _..., GL_TEXTURE_SWIZZLE_ {R, G, B, A}, GL_RED);' – datenwolf

+2

@ datenwolf: На самом деле это не будет делать то, что он хочет. Он передавал бы красный цвет всем четырем компонентам. Он хочет, чтобы каждые четыре последовательных красных компонента стали компонентами RGBA. То есть, чтобы иметь возможность писать один компонент за раз, но * читать * четыре компонента за раз. –