2014-02-20 145 views
2

我想将OpenGL 1.x代码here(原代码由Super User regular,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,只要它在桌面和浏览器上运行即可。将OpenGL 1.x代码移植到WebGL

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。欢迎/鼓励对博客,指南等的外部引用。

+5

您似乎专注于立即模式vs顶点数组/ VBO。但是,这是你最担心的问题。 WebGL与完全基于可编程管线的GLES2.x类似。此外,矩阵堆栈不可用。在你能够转换这些代码之前,你需要学习很多不同的东西 - 并且已经有很好的教程。还要注意,如果没有进一步的上下文,转换单个代码将变得不可能,因为GL状态会影响渲染结果,并且其中很大一部分必须在着色器中实现。 – derhass

回答

3

如果考虑保持GL 1.x的风格相反,你可能有兴趣在这些东西:

https://github.com/stefanhaustein/WebGLue

编辑:对于emscripten用处,你想建立类似MeshBuilder(在webglue.js中)以及C中的固定功能仿真。通过使用基本相同的调用来填充可以重用的缓冲区,MeshBuilder使得将开始/结束样式GL代码移植到现代GL相对容易。我们使用了类似的方法将Quake II移植到WebGL(但是在Java/GWT而不是C中)