Портирование кода OpenGL 1.x в WebGL

Я пытаюсь портировать код OpenGL 1.x Вот (оригинальный код написан Супер пользователь регулярные, BenRichards) к безопасному для WebGL подмножеству OpenGL 2.x. Мой план состоит в том, чтобы скомпилировать код, используя Emscripten так что это приложение C ++ / SDL работает как JS / WebGL в современном браузере, но для достижения этого я должен исключить использование API GL 1.x, поскольку Emscripten не поддерживает должным образом код GL 1.x, который мы используем. используя несовершенный / сломанный код эмуляции 1.x. BenRichards также заинтересован в том, чтобы его «новичок» код GL 1.x был перенесен в более современный GL API, если он работает как на рабочем столе, так и в браузере.

И БенРичардс, и я — новичок в OpenGL в целом, поэтому нам нужно много учиться, чтобы понять, как переадресовывать его. Общий подход заключается в том, чтобы избегать данных на стороне клиента по причинам производительности (см. Вот), но я хотел учиться на собственном примере.

Возьми этот маленький фрагмент из Вот например:

void TCell::OnRender() {
glPushMatrix();
glColor3ub(color.red, color.green, color.blue);

glBegin(GL_QUADS);
glVertex2i(20 * column - 40, 20 * row - 40);
glVertex2i(20 * column - 20, 20 * row - 40);
glVertex2i(20 * column - 20, 20 * row - 20);
glVertex2i(20 * column - 40, 20 * row - 20);
glEnd();
//....
glPopMatrix();
}

Если бы кто-то мог написать сильно прокомментированный порт этого общего шаблона рендеринга в коде WebGL-ish (все еще C ++, но не JavaScript), это было бы здорово. Это должно дать мне отправную точку для портирования оставшейся части приложения.

Хороший ответ на этот вопрос, как правило, будет полезен помимо той непосредственной проблемы, с которой я сталкиваюсь, объясняя мыслительный процесс преобразования этого типа кода GL 1.x немедленного режима в модель отложенного рендеринга GL 2.x. Внешние ссылки на блоги, руководства и т. Д. Приветствуются / поощряются.

2

Решение

Если вы решили сохранить стиль GL 1.x, вас могут заинтересовать следующие вещи:

https://github.com/stefanhaustein/WebGLue

редактировать: Для использования с emscripten вы можете создать что-то вроде MeshBuilder (в webglue.js) и эмуляция фиксированных функций в C. MeshBuilder относительно легко переносит код GL стиля начала / конца в современный GL, используя в основном те же самые вызовы для заполнения буфера, который можно использовать повторно. Мы использовали аналогичный подход для переноса Quake II на WebGL (но в Java / GWT вместо C)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]