На самом деле, упаковка вещественного числа в четыре компоненты - это довольно старый приём и я встречал
его в других демках ещё давно.. И здесь на форуме где-то видел описание способов таких упаковок..
Мне кажется, это быстрее, чем использование современных форматов 16, 16F, 32F.. Последний из них (32F) вообще
практически бесполезен в силу сильного падения FPS при его использовании...
Кстати, на картах NVIDIA в ASM-шейдерах (ARB_vertex/fragment_program) есть инструкции
по упаковке данных...
DEN 3D
> Кстати, на картах NVIDIA в ASM-шейдерах (ARB_vertex/fragment_program) есть
> инструкции
> по упаковке данных...
NV_fragment_program
Мне тут недавно один человек сказал,что depthTexture это убогий пережиток прошлого и им никто не пользуется ... ( для теней )
innuendo
А чем теперь принято пользоваться он сказал?
innuendo
> Мне тут недавно один человек сказал,что depthTexture это убогий пережиток
> прошлого и им никто не пользуется ... ( для теней )
А мне один человек сказал, что innuendo тролль... ;)
.Scotina
> А чем теперь принято пользоваться он сказал?
Имелось ввиду, хардварной depthTexture
А он сказал, только R32F или R16F
innuendo
>> NV_fragment_program
Вообще да, хотя в ARB_fragment_program есть такая фича от NV -
NV_fragment_program2_option, включив в ARB-шной программе эту
опцию можно в ней юзать все специфические инструкции NV..
Executor
> А мне один человек сказал, что innuendo тролль... ;)
Есть маленько :) Постараюсь исправиться
DEN 3D
> Вообще да, хотя в ARB_fragment_program есть такая фича от NV -
> NV_fragment_program2_option, включив в ARB-шной программе эту
> опцию можно в ней юзать все специфические инструкции NV..
OK. Только это http://www.opengl.org/registry/specs/NV/fragment_program_option.txt
на ATI так и не смог запустить с NV_fragment_program2_option
innuendo
>> на ATI так и не смог запустить с NV_fragment_program2_option
Да, это NV :)
Пытаюсь перевести на с++, но столкнулся с проблемой в создании pBuffer.
Вот код конструктора pBuffer
int PixelFormatAttribs[] = {WGL_SUPPORT_OPENGL_ARB, GL_TRUE,
WGL_DRAW_TO_PBUFFER_ARB, GL_TRUE,
WGL_COLOR_BITS_ARB, 24,
WGL_ALPHA_BITS_ARB, 8,
WGL_DEPTH_BITS_ARB, 24,
WGL_DOUBLE_BUFFER_ARB, GL_FALSE, 0};
float FloatAttrib[]={0};
int PixelBufferAttribs[]= {WGL_TEXTURE_FORMAT_ARB, WGL_TEXTURE_RGBA_ARB,
WGL_TEXTURE_TARGET_ARB, WGL_TEXTURE_2D_ARB, 0};
int PFormat[MAX_PFORMATS];
unsigned NumPFormat=0;
HDC tDC;
int tW,tH;
ParentDC = pParentDC;
ParentRC = pParentRC;
Width = pWidth;
Height = pHeight;
tDC = wglGetCurrentDC();
if(! wglChoosePixelFormatARB(tDC,PixelFormatAttribs, FloatAttrib ,MAX_PFORMATS, PFormat, &NumPFormat))//вот тут получаю по зубам от компилятора
{
exit(1);
}
Handle = wglCreatePBufferARB(tDC, PFormat[0], Width, Height, PixelBufferAttribs);
.
.
.вобщем получаю access violation 00000000
И еще вопрос, pParentDC и pParentRC - это HDC и HGLRC, которые я использовал при инициализации OpenGl, так?
wat
теперь я волнуюсь - строка "//вот тут получаю по зубам от компилятора" пытается уйти за "монитор" как в IE 7 так и в FF 3.0.11 :(
только в FF это терпимо - "уходит" только текст
а в IE - весь серый блок "ушел"
ЗЫ. сорри за оффтоп
BenTech,
И еще вопрос, pParentDC и pParentRC - это HDC и HGLRC, которые я использовал при инициализации OpenGl, так?
По поводу ошибки может быть что wglChoosePixelFormatARB не инициализирован
проверь поинтер на wglChoosePixelFormatARB <> nil ?
После инициалзации основного OpenGL'a , инициализируем PixelBuffer
FShadowBuffer := TPixelBuffer.Create(256,256,h_dc,h_rc);
и незабываем внести его в список основному OpenGL'у
wglShareLists(h_RC, FShadowBuffer.RC);
если не получится у тебя перевести , могу сам перевести весь пример под BCC =)
gl_FragColor = fract(len); // p.s. // Можно конечно и без Fract'a, но так хоть посмотреть можно не градиент синего // а то, что получилось.
А я вот не согласен. Мне кажется, что fract() тут обязательная функция. Иначе некоторые компоненты могут заклампиться в 1.0, и потеряется точность.
Тема в архиве.