所以我试图用emscripten编译一些SDL2代码,我陷入陷阱后陷入陷阱,大多数我可以解决自己,但这让我感到困惑。
目前我正在尝试使用OpenGL绘制四边形到屏幕:
void sprite::init(float x, float y, float width, float height)
{
_x = x;
_y = y;
_width = width;
_height = height;
if(_vboID == 0)
{
glGenBuffers(1, &_vboID);
}
float vertexData[12];
vertexData[0] = x + width;
vertexData[1] = y + height;
vertexData[2] = x;
vertexData[3] = y + height;
vertexData[4] = x;
vertexData[5] = y;
//second
vertexData[6] = x;
vertexData[7] = y;
vertexData[8] = x + width;
vertexData[9] = y;
vertexData[10] = x + width;
vertexData[11] = y + height;
glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData),
vertexData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
void sprite::draw()
{
glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
这应该生成四边形,或者人们会想到。 当然,它没有,而是产生一些错误
Error: WebGL: drawArrays: null CURRENT_PROGRAM sdl2.js:1:186510
Error: WebGL: No further warnings will be reported for this WebGL context. (already reported 32 warnings)
因此我们来到问题的核心,如何解决这个问题呢?
答案 0 :(得分:0)
与Cubic一样,错误消息显示您需要着色器。
WebGL基于OpenGL ES 2.0(不要与OpenGL混淆)。
OpenGL ES 2.0没有固定的功能管道。它一直需要着色器100%,而OpenGL(在桌面上)已经超过20年,并且具有旧的无着色器需要模式。这意味着桌面上的事情通常是偶然的,因为所有向后兼容的东西都在WebGL中挥之不去,因为在WebGL中它不仅基于OpenGL ES 2.0而且在执行方面非常严格,希望尝试使WebGL在所有地方表现相同这样使用它的网页更有可能发挥作用。
如果您想在桌面上测试OpenGL ES 2.0并且碰巧使用Windows,则可以使用模拟OpenGL ES 2.0的ANGLE。有几个项目使用它,因此它们可以定位一个几乎适用于所有地方的API这意味着他们可以定位OpenGL ES 2.0,他们的代码可能适用于Mac,Android,iOS,Linux和Windows(使用ANGLE)。因为ANGLE模拟OpenGL ES 2.0,它没有固定功能的东西,目前让你做你不能做的事情,所以使用它会帮助你从C / C ++开始,更有可能不使用不是的功能在WebGL中可用