Правильно ли прикрепить объект Frame Buffer к 3D текстуре с 8-битным внутренним форматом? - PullRequest
1 голос
/ 10 сентября 2010

По сути, моя программа использует объект кадрового буфера для рендеринга в 3D-текстуру.Если 3D-текстура, которую я прикрепляю к fbo, имеет формат GL_RGB8, то есть 24 бита на тексель, проблем нет.Только 8-битные из них используются.Проблема возникает, когда я пытаюсь использовать GL_ALPHA8 (8 бит на тексель) в качестве внутреннего формата для 3D-текстуры, результат рендеринга будет пустым.Фрагмент шейдера cg, который я использовал для рендеринга в fbo, выглядит следующим образом:

void F_PureDecoder(
    float3 vIndexCoord : TEXCOORD0,   
    out float color :COLOR)
{
        ... ...
    color=float4(fL3,fL3,fL3,fL3);
}

Я делаю что-то не так, или fbo не поддерживает рендеринг в 8-битную текстуру texel?Я в первую очередь не уверен, правильный ли формат вывода фрагмента шейдера.Ведь кадровый буфер составляет 8 бит, но выходной - 24 бита.Должен ли я изменить формат вывода из фрагмента шейдера?Если да, то какой формат мне следует использовать?

Большое спасибо за любой ввод!

1 Ответ

1 голос
/ 11 сентября 2010

Для рендеринга в одну / две компонентные текстуры вы ДОЛЖНЫ использовать расширение GL_ARB_texture_rg, оно НЕ будет работать с любым другим форматом.См. спецификацию расширения , почему она не работает:

It is also desirable to be able to render to one- and two- 
component format textures using capabilities such as framebuffer 
objects (FBO), but rendering to I/L/LA formats is under-specified
(specifically how to map R/G/B/A values to I/L/A texture channels).

Итак, используйте внутренний формат GL_R8.Чтобы записать в него, просто запишите полный вывод RGBA, но будет записан только компонент R.

...