gpt4 book ai didi

c++ - AMD GPU 在 OpenGL 3.3 中可以绘制的顶点数是否有最大限制?

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:43 25 4
gpt4 key购买 nike

我编写了一个小型应用程序来显示由通常大小的顶点组成的大型点云,大小约为 20m,由位置值 xyz 和颜色值 RGB 组成。

我在配备 Nvidia GTX 670 GPU 的工作站上没有遇到任何问题,但现在已更改为配备 AMD HD6950 的另一台工作站,现在没有显示大型点云。

我最初认为 AMD GPU 在一次调用中可以绘制的顶点数量可能存在限制,但经过额外测试后认为情况并非如此。

我生成了一个测试点云(用简单的“for”循环完成),比其他点云更大,格式相同 [vc3(xyz) & vec3(rgb)],这个点云仍然显示,但其他大点云不显示从激光扫描仪。查看 CodeXL 中的 VBO 状态,这些都存在并且大小正确(20m vec3 为 233MB)所以我看不出错误可能在哪里,除非非调试点云从某处获取不正确的值。

同样值得注意的是,我使用了小型点云(30k 顶点)并且它们加载正常但在 AMD 计算机上加载时不是大型点云。

作为完整性检查,这是生成调试点云的代码:

// Holders for position and colour
std::vector<glm::vec3> t_position;
std::vector<glm::vec3> t_colour;

// Reserve memory
t_position.reserve(point_cloud_size);
t_colour.reserve(point_cloud_size);

// Generate Data
for (int x=0; x < cube_root; x++) {
for (int y=0; y < cube_root; y++) {
for (int z=0; z < cube_root; z++) {
t_position.push_back(glm::vec3(x/10.0 - 0.5, y/10.0 -0.5, z/10.0 -0.5));
t_colour.push_back(glm::vec3((float)x/10.0,(float)y/10.0,(float)z/10.0));
}
}
}

这是生成激光扫描仪点云的方法:

pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr pointcloud (new pcl::PointCloud<pcl::PointXYZRGBNormal>);

if (pcl::io::loadPCDFile(point_cloud_path, *pointcloud) == -1) // Loading pointcloud from file path.
{
// Error Catch
PCL_ERROR("Could not load pointcloud\n");
}

// Number of points in cloud
point_cloud_size = pointcloud->size();

// Sanity Check
std::cout << "Loaded Pointcloud of size: " << point_cloud_size << std::endl;

// Create data vectors
std::vector<glm::vec3> t_position;
std::vector<glm::vec3> t_colour;

// Reserve space in vectors for data
t_position.reserve(point_cloud_size);
t_colour.reserve(point_cloud_size);

// pointer for pcl data
pcl::PointXYZRGBNormal point_ptr;

std::cout << "Converting Pointcloud into vectors" << std::endl;
// Convert pointcloud to individual components (NEEDS OPTIMIZING)
for (int i = 0; i<point_cloud_size; i++) {

// Loading Bar for point cloud conversion
loadbar(i, point_cloud_size);

point_ptr = pointcloud->at(i);

t_position.push_back(glm::vec3(point_ptr.x, point_ptr.y, point_ptr.z));
t_colour.push_back(glm::vec3(point_ptr.r/255.0, point_ptr.g/255.0, point_ptr.b/255.0));
}

两个点云都使用相同的方法加载到 VBO 和 VAO:

BindPointCloud(t_position,t_colour);

所以我看不出绑定(bind)是问题所在。

所以我完全不知道问题出在哪里,因为它在配备 NVidia GPU 而不是 AMD GPU 的工作站上运行良好。

有什么建议吗?

最佳答案

除了AMD自己的工具,gDEBugger是一个很好的工具。

关于c++ - AMD GPU 在 OpenGL 3.3 中可以绘制的顶点数是否有最大限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com