我正在尝试移植 OpenGL 1.x 代码 here (原始代码由 Super User 正则 BenRichards 编写)到 OpenGL 2.x 的 WebGL 安全子集。我的计划是使用 Emscripten 编译代码以便这个 C++/SDL 应用程序在现代浏览器中作为 JS/WebGL 运行,但为了实现这一点,我必须消除 GL 1.x API 的使用,因为 Emscripten 不能正确支持我们正在使用的 GL 1.x 代码使用不完美/损坏的 1.x 模拟代码。 BenRichards 也有兴趣看到他的“新手”GL 1.x 代码向前移植到更现代的 GL API,只要它在桌面和浏览器中运行即可。
BenRichards 和我本人对 OpenGL 总体而言都是新手,因此我们需要做很多学习才能了解如何转发它。一般方法似乎是出于性能原因避免客户端数据(请参阅 here ),但我想通过示例来学习。
摘取 here 中的这个小片段例如:
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 的代码中(尽管仍然是 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)
关于c++ - 将 OpenGL 1.x 代码移植到 WebGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913929/