如何使用AWS Lambda上的OESMesa模拟WebGL内容?

3
我想使用WebGL截取网站的屏幕截图。我不需要使用GPU来打开该网站,使用仿真就足够了。
最初,我已经尝试使用无头Chrome来完成此操作。这可以对普通网站进行屏幕截图。但是,它不能用于WebGL画布。 我认为可能之一是使用OSMesa或其他东西来模拟OpenGL。
我已经尝试了所有策略来克服这个问题。这实际上可行吗? 如果是,请告诉我如何做到这一点。如果不行,我想知道原因。
谢谢。

1
你想要截取什么内容的屏幕截图,从哪里开始截取呢?我很想回答:如果你想要截取屏幕截图,可以查看你的操作系统API以获取屏幕缓冲区数据访问,无论是OpenGL、WebGL还是Mesa...回答你的问题:要使用Mesa模拟WebGL(OpenGL ES 2.0),如果OESMesa是我所认为的那样,也许可以从这里开始:https://www.mesa3d.org/opengles.html。 - user1501157
1
这是你正在寻找的答案吗?(https://dev59.com/FZrga4cB1Zd3GeqPgQC9) - gman
@Sedenion 谢谢您的回复。我想使用AWS Lambda来截取我的网页上大量使用WebGL的截图。我也尝试了OSMesa,但是我不知道如何在Lambda上使用它。 - kyasbal
@gman 是的,我可以在我的Ubuntu环境中使用它。但是,由于lambda的限制,我不认为我能运行yum命令。我必须在EC2容器上构建它们才能在lambda上使用。但是,我不知道应该配置什么。 - kyasbal
1个回答

2

是的,这是可能的!

你需要正确的组合:

  1. headless-chromium二进制文件
  2. libosmesa.os二进制文件(在同一目录下)
  3. 使用正确的标志启动chrome headless,例如(请参阅链接获取完整详细信息):['--use-gl=osmesa','--enable-webgl','--ignore-gpu-blacklist','--homedir=/tmp','--single-process','--data-path=/tmp/data-path','--disk-cache-dir=/tmp/cache-dir']

这个服务器端无头浏览器github项目的线程讨论了这个问题,并提供了一些二进制文件,我已经使用它们来捕获在AWS Lambda上使用Page.captureScreenshot()截取WebGL内容的屏幕截图。

https://github.com/adieuadieu/serverless-chrome/issues/108#issuecomment-416494572

(请参见@apalchys于8月28日发表的评论)

这个特定的示例使用SwiftShader,似乎是未来的首选项。

但是,请注意,我无法使用此版本创建PDF,使用Page.printToPDF()时WebGL内容只会出现空白/白色。但是,我也能够使用早期版本使用osmesa来获取Page.printToPDF(),请参见https://github.com/adieuadieu/serverless-chrome/issues/108#issuecomment-371199530


哇!太棒了!这正是我想要的。非常感谢。 - kyasbal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接