我知道glVertexAttribDivisor可以用来修改通用顶点属性在实例渲染过程中前进的速率,但我想知道是否有任何方法可以在没有实例化的情况下以特定速率推进属性.
这是我的意思的一个例子:
假设您正在定义构成一系列线的顶点位置列表,并且您希望将每条线与一个ID相关联.因此,您创建两个vbos,每个vbos包含与其中一个属性相关的数据(所有顶点位置或所有顶点ID).传统上,这意味着每个vbo必须是行数X 2的大小(在元素中)(因为每个点包含两行).这当然意味着我为一行中的每个点复制相同的ID值.
我想要做的是指定ID为顶点位置缓冲区前进的每2个元素提前1个元素.我知道这要求我的顶点位置缓冲区首先被声明(所以我可以引用它来告诉OpenGL多长时间推进ID缓冲区),但它似乎仍然可能.但是,我在OpenGL规范中找不到允许这种操作的任何功能.
问题:我正在为分布式CPU/GPU模拟器开发图形前端.由于此模拟器使用MPI,因此需要一个主机文件,详细说明网络上使用的所有计算机的主机名,以便它知道要分配的计算机.由于我的应用程序的最终用户不是计算机科学家(甚至可能不是计算机知识),我不能指望他们知道/找到他们网络/集群上每台计算机的主机名.我想以编程方式执行此主机名发现,以便在应用程序启动时,用户可以看到可用的计算机,然后从中选择要运行的主机.如果可能的话,我希望这个解决方案是跨平台的,但由于模拟器目前包含一些Linux依赖项,我可以处理仅Linux的解决方案.
到目前为止我尝试过:我尝试利用nmap包来发现网络上的主机,其命令如nmap -sP <ip address range>使用该本地网络的ip地址范围.但是,它只转储主机的IP地址(而不是主机名),我不知道如何将这些IP地址转换为ssh主机名(因为MPI使用ssh进行主机发现).另外,我使用类似的方法,ping提供广播地址,它返回几乎相同的结果.
我为这个问题的广泛性和缺少的代码道歉,但我对网络探测/编程不是很有经验,我甚至不确定从哪里开始.我试过谷歌搜索,但我无法找到合适的选项(可能是因为我缺乏经验导致我使用不正确的术语触发不正确的结果)我的背景主要是图形和用户界面编程,所以这有点超出我的舒适区.
标题几乎解释了这一切.昨天我在浏览Stack时第一次听说OpenGL Loader Generator项目,我查看了它以研究它对GLEW的优势.在项目网站上,他们声明:
此加载程序生成系统用于创建OpenGL标头并根据您的特定需求加载代码.而不是将每个扩展和核心枚举器/功能都集中在一个大型标题中,而是只获得您真正想要和要求的内容.
虽然我理解这种方法肯定比GLEW更简洁,但我不明白这种方法如何改善编译时间,应用程序性能或与OpenGL驱动程序的交互.此外,似乎使用它的过程需要更多维护,因为每次需要使用额外的扩展时都必须重新生成扩展源.我在使用GLEW时没有注意到任何性能损失(与不使用它相比),所以我很好奇为什么这个项目的开发人员觉得他们有问题需要解决.我错过了什么吗?
为什么glTexImage1D,glTexImage2D和glTexImage3D函数确实需要内部格式(即GL_RGBA8,GL_R32UI等)和像素格式?(GL_RGBA,GL_RED_INTEGER)
在我看来,像素格式可以很容易地从内部格式解释.我问这不只是出于好奇,而是因为我确定我编写的OpenGL纹理对象和帧缓冲区对象包装器(从内部格式推断出像素格式)能够正确地提取所有内部格式的像素格式.