You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					80 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					80 lines
				
				2.2 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								// Copyright (C) 2023 MapLibre contributors
							 | 
						||
| 
								 | 
							
								// Copyright (C) 2019 Mapbox, Inc.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// SPDX-License-Identifier: BSD-2-Clause
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "map.hpp"
							 | 
						||
| 
								 | 
							
								#include "map_observer_p.hpp"
							 | 
						||
| 
								 | 
							
								#include "map_renderer_p.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <mbgl/actor/actor.hpp>
							 | 
						||
| 
								 | 
							
								#include <mbgl/map/map.hpp>
							 | 
						||
| 
								 | 
							
								#include <mbgl/renderer/renderer_frontend.hpp>
							 | 
						||
| 
								 | 
							
								#include <mbgl/storage/resource_transform.hpp>
							 | 
						||
| 
								 | 
							
								#include <mbgl/util/geo.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <QtCore/QObject>
							 | 
						||
| 
								 | 
							
								#include <QtCore/QSize>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <atomic>
							 | 
						||
| 
								 | 
							
								#include <memory>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace QMapLibre {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MapPrivate : public QObject, public mbgl::RendererFrontend {
							 | 
						||
| 
								 | 
							
								    Q_OBJECT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    explicit MapPrivate(Map *map, const Settings &settings, const QSize &size, qreal pixelRatio);
							 | 
						||
| 
								 | 
							
								    ~MapPrivate() override;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // mbgl::RendererFrontend implementation.
							 | 
						||
| 
								 | 
							
								    void reset() final {}
							 | 
						||
| 
								 | 
							
								    void setObserver(mbgl::RendererObserver &observer) final;
							 | 
						||
| 
								 | 
							
								    void update(std::shared_ptr<mbgl::UpdateParameters> parameters) final;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // These need to be called on the same thread.
							 | 
						||
| 
								 | 
							
								    void createRenderer();
							 | 
						||
| 
								 | 
							
								    void destroyRenderer();
							 | 
						||
| 
								 | 
							
								    void render();
							 | 
						||
| 
								 | 
							
								    void setFramebufferObject(quint32 fbo, const QSize &size);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    using PropertySetter = std::optional<mbgl::style::conversion::Error> (mbgl::style::Layer::*)(
							 | 
						||
| 
								 | 
							
								        const std::string &, const mbgl::style::conversion::Convertible &);
							 | 
						||
| 
								 | 
							
								    [[nodiscard]] bool setProperty(const PropertySetter &setter,
							 | 
						||
| 
								 | 
							
								                                   const QString &layerId,
							 | 
						||
| 
								 | 
							
								                                   const QString &name,
							 | 
						||
| 
								 | 
							
								                                   const QVariant &value) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    mbgl::EdgeInsets margins;
							 | 
						||
| 
								 | 
							
								    std::unique_ptr<mbgl::Map> mapObj{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public slots:
							 | 
						||
| 
								 | 
							
								    void requestRendering();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								signals:
							 | 
						||
| 
								 | 
							
								    void needsRendering();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    Q_DISABLE_COPY(MapPrivate)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    std::recursive_mutex m_mapRendererMutex;
							 | 
						||
| 
								 | 
							
								    std::shared_ptr<mbgl::RendererObserver> m_rendererObserver{};
							 | 
						||
| 
								 | 
							
								    std::shared_ptr<mbgl::UpdateParameters> m_updateParameters{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    std::unique_ptr<MapObserver> m_mapObserver{};
							 | 
						||
| 
								 | 
							
								    std::unique_ptr<MapRenderer> m_mapRenderer{};
							 | 
						||
| 
								 | 
							
								    std::unique_ptr<mbgl::Actor<mbgl::ResourceTransform::TransformCallback>> m_resourceTransform{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Settings::GLContextMode m_mode;
							 | 
						||
| 
								 | 
							
								    qreal m_pixelRatio;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    QString m_localFontFamily;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    std::atomic_flag m_renderQueued = ATOMIC_FLAG_INIT;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace QMapLibre
							 |