我正在使用自定义顶点着色器渲染点数组.着色器看起来像:
void mainVP()
in varying int in_vertex_id : VERTEXID
{
foo(in_vertex_id);
}
Run Code Online (Sandbox Code Playgroud)
所以我唯一需要的是顶点id.但我需要很多顶点,我不想为它们存储假的VBO(它需要大约16mb的内存).
我尝试运行我的代码而不绑定任何VBO.有用.所以我的渲染看起来像:
size_t num_vertices = ...
glDrawArrays(GL_POINTS, 0, num_vertices);
Run Code Online (Sandbox Code Playgroud)
但是我可以确定没有绑定VBO的渲染是安全的吗?
Nic*_*las 12
但是我可以确定没有绑定VBO的渲染是安全的吗?
你不能.
OpenGL规范的核心配置文件(3.2及更高版本)明确指出应该允许它,您可以在禁用所有属性的情况下进行渲染.OpenGL规范的兼容性配置文件或3.2之前的任何版本都明确表示您无法执行此操作.
当然,无论如何这都无关紧要.NVIDIA驱动程序允许您在任何OpenGL版本和配置文件上执行此操作.ATI的驱动程序不允许您在任何OpenGL版本或配置文件上执行此操作.它们都是驱动程序错误,只是以不同的方式.
你只需要接受你需要一个虚拟顶点属性.然而:
但我需要很多顶点,我不想为它们存储假的VBO(它需要大约16mb的内存).
虚拟属性将占用4个字节(单个浮点数或标准化字节的4向量.请记住:您不关心数据).所以你可以在16MB中容纳400万个.
或者,您可以通过glDrawArraysInstanced使用实例化渲染.在那里,你只渲染一个顶点,但是有num_vertices
实例.当然,着色器必须使用实例ID.
归档时间: |
|
查看次数: |
2590 次 |
最近记录: |