Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL着色器统一变得更慢 问题 P>我用OpenGL开发C++中的一些程序地形。作为一个IDE,我使用的是Microsoft VS2017。我可以毫无问题地进行“实验”。但是经过大约两个小时的开发,程序的速度减慢了。在大约十分钟内,帧率从100多降到20。不久之后,我的GPU无法每秒渲染一帧。启动程序时,加载着色器并链接程序需要很长时间 可能原因_C++_Opengl_Graphics_Gpu - Fatal编程技术网

OpenGL着色器统一变得更慢 问题 P>我用OpenGL开发C++中的一些程序地形。作为一个IDE,我使用的是Microsoft VS2017。我可以毫无问题地进行“实验”。但是经过大约两个小时的开发,程序的速度减慢了。在大约十分钟内,帧率从100多降到20。不久之后,我的GPU无法每秒渲染一帧。启动程序时,加载着色器并链接程序需要很长时间 可能原因

OpenGL着色器统一变得更慢 问题 P>我用OpenGL开发C++中的一些程序地形。作为一个IDE,我使用的是Microsoft VS2017。我可以毫无问题地进行“实验”。但是经过大约两个小时的开发,程序的速度减慢了。在大约十分钟内,帧率从100多降到20。不久之后,我的GPU无法每秒渲染一帧。启动程序时,加载着色器并链接程序需要很长时间 可能原因,c++,opengl,graphics,gpu,C++,Opengl,Graphics,Gpu,在VS2017内进行了一些调试和评测之后,结果表明,CPU在98%以上的时间内等待GPU完成着色器统一操作。这包括找到均匀变量的位置,并将三个矩阵加载到均匀变量 故障排除步骤 我尝试了各种不同的方法来改善这种情况,包括以下方法,但如果不重新启动计算机,我就无法解决问题 将.exe和资源复制到另一个文件夹 将.exe和资源复制到另一个物理设备 重新启动VS2017 减少MSI加力装置中的GPU和内存时钟 检查图形卡VRAM的使用情况 关闭后台应用程序 我的电脑 如果此信息对某人有帮助,请参阅:

在VS2017内进行了一些调试和评测之后,结果表明,CPU在98%以上的时间内等待GPU完成着色器统一操作。这包括找到均匀变量的位置,并将三个矩阵加载到均匀变量

故障排除步骤 我尝试了各种不同的方法来改善这种情况,包括以下方法,但如果不重新启动计算机,我就无法解决问题

  • 将.exe和资源复制到另一个文件夹
  • 将.exe和资源复制到另一个物理设备
  • 重新启动VS2017
  • 减少MSI加力装置中的GPU和内存时钟
  • 检查图形卡VRAM的使用情况
  • 关闭后台应用程序
我的电脑 如果此信息对某人有帮助,请参阅:

  • 英特尔©核心©i5-6600K@3,5GHz
  • EVGA GeForce GTX 1060 6GB GDDR5
  • MSI Z170-A专业版
  • 2x8GB DDR4-2133
  • Thermaltake 530W PSU
  • RAID1中的2x1TB硬盘(包含项目)
  • 128GB固态硬盘
  • 512GB硬盘
提前感谢,, Elias

你所有的“故障排除”步骤都是巫术。使用哪种IDE并不重要(反正它只是一个美化的编辑器)。可执行文件在文件系统中的位置无关紧要(它只是一块存储设备,页面映射到操作系统)。如果遇到热问题,降低GPU和/或内存时钟有助于提高稳定性,但不会影响这种爬行性能问题(如果出现热问题,您会在几分钟内注意到,而不是几小时)

系统运行一段时间后性能突然下降几乎总是由于资源耗尽,迫使系统交换数据。资源耗竭的原因是分配管理不当,即分配某物和再次释放某物之间的不平衡

这就是您必须调试的内容。对于OpenGL,每个
glGen…
/
glCreate…
必须通过匹配的
glDelete…
进行平衡。对于代码中每次使用
new
,都必须有一个平衡
delete
(对于
new…[]
必须有一个
delete[].

如果您将对象推入容器(如
std::vector
std::list
std::map
等),请确保您也执行垃圾处理,即处置不再使用的对象。

如果看不到垃圾,就不可能给您任何有意义的答案。