Emscripten with SDL2 - 错误:WebGL:drawArrays:null

时间:2015-08-19 10:39:08

标签: c++ opengl-es webgl emscripten

所以我试图用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)

因此我们来到问题的核心,如何解决这个问题呢?

1 个答案:

答案 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中可用