Я пытаюсь портировать код 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. Внешние ссылки на блоги, руководства и т. Д. Приветствуются / поощряются.
Если вы решили сохранить стиль GL 1.x, вас могут заинтересовать следующие вещи:
https://github.com/stefanhaustein/WebGLue
редактировать: Для использования с emscripten вы можете создать что-то вроде MeshBuilder
(в webglue.js) и эмуляция фиксированных функций в C. MeshBuilder относительно легко переносит код GL стиля начала / конца в современный GL, используя в основном те же самые вызовы для заполнения буфера, который можно использовать повторно. Мы использовали аналогичный подход для переноса Quake II на WebGL (но в Java / GWT вместо C)
Других решений пока нет …