我正在移植一个在不同平台(Windows,iOS,Playbook,BB10,Android)上完美运行的游戏引擎到NaCl
2d渲染正确,但有些3d对象没有显示或渲染真的很奇怪,我得到以下con
[.PPAPIContext]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : BackTexture::AllocateStorage: <- error from previous GL command (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glVertexAttribPointer: stride not valid for type (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glVertexAttribPointer: offset not valid for type (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 0 (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glVertexAttribPointer: stride not valid for type (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glVertexAttribPointer: offset not valid for type (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glVertexAttribPointer: stride not valid for type (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glVertexAttribPointer: offset not valid for type (index):1
[.PPAPIContext]GL ERROR :GL_INVALID_OPERATION : glVertexAttribPointer: stride not valid for type
它无限期地重复。
同样,相同的渲染代码用于不同的平台,它工作得很好。移植到NaCl时是否需要特别考虑?关于我应该关注什么的想法尝试找到问题? 据我所知,着色器0(顶点着色器)存在问题,实际上某些对象的顶点遍布整个地方。
谢谢! :)
答案 0 :(得分:2)
出于安全原因,Chrome会验证许多其他驱动程序可能没有的GL操作。这有点工作,但您可以尝试使用http://cs.chromium.org搜索Chromium代码库以查找错误消息。
这是我发现的:
BackTexture::AllocateStorage: <- error from previous GL command
这个很难跟上。正如它所说,之前的一些GL命令在调用 BackTexture::AllocateStorage
之前失败了。我查看了文件的其余部分,我不清楚这里的命令是什么失败,但是从错误值来看它与帧缓冲有关。
glVertexAttribPointer: stride not valid for type和glVertexAttribPointer: offset not valid for type
这些非常清楚 - 步幅和偏移值不能被组件大小整除。看到您对glVertexAttribPointer
的调用很有用。
glDrawElements: attempt to access out of range vertices in attribute 0
VertexAttrib::CanAccess
失败,它会检查attrib是否已启用,未删除,以及您尝试访问的顶点索引是否有效。如错误所示,您可能会引用有效范围之外的顶点。
要对此进行调试,我会缩小对glDrawElements
和glVertexAttribPointer
的调用范围,并尝试查找哪一个失败,然后我添加一些printf
调用以查看正在传递的值。