OpenLayers 3.0中是否有一些可以禁用的硬件加速默认值?

时间:2014-08-29 16:50:05

标签: windows openlayers fedora qwebview

我最近和OpenLayers一起玩得很开心(http://www.nufosmatic.com),并且因为我不能解决这个问题。我实际上甚至不确定问题所在。

我需要生成一些静态显示:我在任何地方替换Java并迁移到Python和JavaScript。我在这里找到了一个很好的截取网页截图的例子:

http://webscraping.com/blog/Webpage-screenshots-with-webkit/

它使用Qt" QWebview"渲染然后转储网页。它适用于在Windows XP x86上的Virtual Box下运行的Windows 7 x86_64(Python 2.7.6 x86)和Linux Fedora 20(python 2.7.5)中发布的OpenLayers 2示例。

然后本周OpenLayers 3发布了,我当然尝试了这些新的例子(OL 2示例Git页面已经消失,但2.10示例似乎有效)。

我从下面发布的代码中获得了以下错误诊断信息:

$ python webscrape_olprob.py
2.0 example
loaded the Generic plugin
saving simple_2_0.0.png
3.0 example
libGL error: failed to load driver: swrast
saving simple_3_0.0.png

硬件加速与此特定错误之间似乎存在某种关系("无法加载驱动程序:swrast)。

我想验证在Windows上OL3是(sorta / kinda / total / not)也是如此。不幸的是,我设置它进行测试的Windows 7环境在可预见的未来远离我(我讨厌需要一个人在它前面工作的计算机)。

我在这里发帖是因为这个论坛展示了卓越的多样性,这个问题可能是Qt / QWebview,VirtualBox,Fedora 20或OpenLayers。鉴于2.0" OSM"之间并没有太大的区别。和3.0"简单"又名" OSM"例如,我的钱是在OpenLayers上有一个硬件加速要求,(1)不能关闭[这会很糟糕]或(2)可以关闭但没有人抱怨这个,所以指向在各种论坛上,这些文件已经脱颖而出。

 #
 # http://webscraping.com/blog/Webpage-screenshots-with-webkit/
 #

 import sys
 import time
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 from PyQt4.QtWebKit import *

 class Screenshot(QWebView):
 def __init__(self):
 self.app = QApplication(sys.argv)
 QWebView.__init__(self)
 self._loaded = False
 self.loadFinished.connect(self._loadFinished)

 def capture(self, url, output_file):
 self.load(QUrl(url))
 self.wait_load()
 # set to webpage size
 frame = self.page().mainFrame()
 self.page().setViewportSize(frame.contentsSize())
 # render image
 image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
 painter = QPainter(image)
 frame.render(painter)
 painter.end()
 print 'saving', output_file
 image.save(output_file)

 def wait_load(self, delay=0):
 # process app events until page loaded
 while not self._loaded:
 self.app.processEvents()
 time.sleep(delay)
 self._loaded = False

 def _loadFinished(self, result):
 self._loaded = True

 s = Screenshot()

 print "2.0 example"
 s.capture('http://dev.openlayers.org/releases/OpenLayers-2.10/examples/osm.html', 'simple_2_0.0.png')

 print "3.0 example"
 s.capture('http://openlayers.org/en/v3.0.0/examples/simple.html', 'simple_3_0.0.png')

更新 - 在Windows上运行并且没有得到任何警告(从Cygwin shell下面实例化):

 webkit/webscrape> c:/python27/python webscrape_olprob.py
 2.0 example
 saving simple_2_0.0.png
 3.0 example
 saving simple_3_0.0.png

但是,2.0示例呈现了一个地图:

2.0 example

并且3.0示例没有:

3.0 example

所以3.0在Windows上仍然存在问题......因为3.0刚刚发布,我想我会走开......

我需要测试渲染器建议,这需要我更改发布的示例。我不喜欢因为(1)我需要使用Canvas,因为我有目标的OL功能和(2)我正在寻找一些影响来自ENGINE的渲染的方法,因为这是QWebView正在进行渲染...

1 个答案:

答案 0 :(得分:0)

你可以提示"到ol.Map,您希望通过renderer选项属性

使用什么渲染器
  • ol.RendererHints.canvas用于HTML5画布
  • ol.RendererHints.dom用于经典的基于DOM的方法
  • 对于WebGL
  • ol.RendererHints.webgl

根据API documentation,ol.Map应该正确地确定要使用的渲染器,除非您通过自己指定渲染器来覆盖。也许在ol.Map中的渲染器支持测试可能会在QtWebView下混淆。