我正在尝试将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-ish代码(尽管仍然是C ++,而不是JavaScript),那就太棒了。这应该为我提供了移植应用程序其余部分的起点。
通过解释如何将这种类型的立即模式GL 1.x代码转换为GL 2的延迟渲染模型的思考过程,这个问题的一个好答案通常会超出我所面临的直接问题。 X。欢迎/鼓励对博客,指南等的外部引用。
答案 0 :(得分:3)
如果你考虑保留GL 1.x风格,你可能会对这些东西感兴趣:
https://github.com/stefanhaustein/WebGLue
编辑:要与emscripten一起使用,您可能需要构建类似MeshBuilder
(在webglue.js中)和C语言中的固定函数仿真.MeshBuilder使端口相对容易开始/结束样式GL代码到现代GL通过使用基本相同的调用来填充可以重用的缓冲区。我们使用类似的方法将Quake II移植到WebGL(但是用Java / GWT代替C)