绑定到GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER的顶点缓冲区对象是否有最大大小?
最初,我正在绘制一个由16个子网格组成的网格.对于每个子网格,我创建了一个顶点缓冲区,在渲染阶段,我调用了glDrawElements.这在iOS模拟器上运行良好,但是当我尝试渲染到我的设备时,屏幕不断闪烁并且不显示网格.
然后我做了一些阅读,发现在渲染阶段你不应该多次调用glDrawElements.我试图将所有子网格组合成一个顶点缓冲区.绑定到GL_ARRAY_BUFFER的缓冲区包含3969个顶点,其中每个顶点包含20个浮点数.所以这个缓冲区的大小是317520字节.与GL_ELEMENT_ARRAY_BUFFER绑定的指数是16425空头.因此,该缓冲区的大小为32850字节.
在OpenGL维基上,它表示对于顶点缓冲对象,"根据一个nVidia文档,1MB到4MB是一个不错的大小".
我在绑定每个缓冲区对象并调用glDrawElements之后打印出glGetError的结果,我没有看到任何错误.但是,我的网格没有正确显示.似乎只有第一个网格被正确绘制.我实施这个方法有什么可疑之处吗?我不想让这个问题太长,所以如果有任何额外的信息你需要回答这个问题让我知道.如果理论上没有什么似乎是错误的,也许我只是在实施它时犯了一个错误.
我使用msbuild编译Visual Studio 2010解决方案,需要成功构建而不会出现任何错误.
但每次我运行msbuild/rebuild(或直接使用Visual Studio清理和编译我的解决方案)时,我会得到几个像这样的bscmake错误(有时在没有清理的情况下再次编译时错误会消失,但这对我来说不是一个好的解决方案msbuild两次):
[...]
10> Generating Code...
11> xxxxxxxx\mshtml.tlh(63588): warning BK4504: file contains too many references; ignoring further references from this source
11>
11>BSCMAKE : error BK1500: Internal error
11>
11> Version 10.00.30319.01
11>
11> ExceptionCode = C0000005
11> ExceptionFlags = 00000000
11> ExceptionAddress = 001343DA (00130000) "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\bscmake.exe"
11> NumberParameters = 00000002
11> ExceptionInformation[ 0] = 00000000
11> ExceptionInformation[ 1] = 00000000
11>
11> CONTEXT:
11> Eax = 00141B30 Esp = …Run Code Online (Sandbox Code Playgroud) 使用 Microsoft Visual C++ 6.0 编译 C++ 时有时会出现这样的链接错误:
error LNK2001: unresolved external symbol __imp__close
error LNK2001: unresolved external symbol __imp__read
error LNK2001: unresolved external symbol __imp__lseek
error LNK2001: unresolved external symbol __imp__open
我使用谷歌搜索了很长时间但毫无结果后发现,我的修复是这样的:
不要禁用语言扩展。在“项目设置”对话框的“C/C++”选项卡中,确保未选中“禁用语言扩展”复选框。
函数 close、read、lseek、open 等不是 C 库的标准部分,并且使用#if !__STDC__in的条件编译会跳过这些声明<io.h>。如果您禁用语言扩展,就会发生这种情况。