Я пишу свой первый трассировщик лучей. Я хочу, чтобы это работало в режиме реального времени.
Амбициозный!
Я хочу использовать opengl для отображения. Я хочу записать свой экран в буфер с плавающей запятой и отобразить буфер.
OpenGL может читать напрямую из буферов с плавающей запятой, например,
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_FLOAT, data);
Но OpenGL может выбрать любой внутренний формат, соответствующий вашему выбору. Внутренний формат GL_RGB может быть любым, что может как-то хранить данные RGB. Вы можете быть конкретными о том, что вы хотите. Например, GL_RGB16 сообщает OpenGL, что вы хотите разрешение 16 бит на канал. Реализация может выбрать использование 24 битов на канал, поскольку это позволяет сохранять 16 битов. Но в конечном итоге реализация решает, какой это будет внутренний формат, основываясь на ограничениях, которые вы на нее накладываете.
Кадровые буферы с плавающей точкой и текстуры поддерживаются в OpenGL с помощью расширений GL_ARB_texture_float
, GLX_ARB_fbconfig_float
, WGL_ARB_fbconfig_float
, но из-за проблем с патентами не все реализации OpenGL реализуют это (ATI и NVidia делают).