Emscripten with SDL2 - Error: WebGL: drawArrays: null
Emscripten with SDL2 - Error: WebGL: drawArrays: null
所以我试图用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)
因此,我们来到了问题的核心,人们如何着手解决这个问题?
就像Cubic提到的错误信息说你需要一个着色器
WebGL基于OpenGL ES 2.0(不要与OpenGL混淆)。
OpenGL ES 2.0没有固定的函数管道。它需要着色器100%的时间,而OpenGL(桌面)有20多年的历史,有一个旧的不需要着色器的模式。这意味着通常事情在桌面上工作是偶然的,因为所有向后兼容性的东西都在那里,因为在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中不可用的功能
相关文章:
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 检查字符串是否"null" C++
- fopen 在 gdb 中返回 NULL
- what(): basic_string::_M_construct null not valid
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 为什么要从main()返回NULL?
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 是否有通用方法可以找到任何以 null 结尾的字符串的长度?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 使用 curl_easy_cleanup(curl) 时收到未经处理的 NULL 异常
- Emscripten with SDL2 - Error: WebGL: drawArrays: null