我编写了一个openGLES代码,其中包含一个顶点着色器和一个片段着色器。伪代码是这样的

  main()
  {  .
     .
     .
     for(int i=0; i<100;i++)
     {
      //t1 = clock();
      //Setting two textures as input
      //Setting 10 glUniform 4f variables
      //Setting Viewport
      //Launch : glDrawArray
      //glFinish();
      //t2 = clock();
      //printf("Execution time : %f\n",t2-t1);
     }
  }

我正在获得预期的输出。但是,在执行100次时,第一次执行时是80毫秒,而在随后的执行中是25毫秒。我只想确认是否在openGLES中会出现这种情况(由于某些感染因素)
或我在犯一些错误。

谢谢

最佳答案

大多数OpenGLES驱动程序在首次创建它们时不会完全编译您的着色器,它们会将大部分工作推迟到您第一次使用它们进行绘制时。

之所以这样做,是因为他们凭经验知道程序的负载会创建它们永远不会使用的着色器。缺点是,它会为更谨慎的用户创建框架故障/不一致的绘图调用时间。

有时,人们通过对其进行屏幕外渲染来“预热”着色器,以避免在游戏过程中出现帧故障。

关于android - OpenGL性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41542287/

10-09 10:07