MCPcopy Create free account
hub / github.com/comaps/comaps / CreateDrapeEngine

Method CreateDrapeEngine

android/sdk/src/main/cpp/app/organicmaps/sdk/Framework.cpp:184–258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

182}
183
184bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi, bool firstLaunch,
185 bool launchByDeepLink, uint32_t appVersionCode, bool isCustomROM)
186{
187 // Vulkan is supported only since Android 8.0, because some Android devices with Android 7.x
188 // have fatal driver issue, which can lead to process termination and whole OS destabilization.
189 int constexpr kMinSdkVersionForVulkan = 26;
190 int const sdkVersion = android_get_device_api_level();
191 LOG(LINFO, ("Android SDK version in the Drape Engine:", sdkVersion));
192 auto const vulkanForbidden =
193 sdkVersion < kMinSdkVersionForVulkan || dp::SupportManager::Instance().IsVulkanForbidden();
194 if (vulkanForbidden)
195 LOG(LWARNING, ("Vulkan API is forbidden on this device."));
196
197 m_vulkanContextFactory.reset();
198 m_oglContextFactory.reset();
199 ::Framework::DrapeCreationParams p;
200
201 if (m_work.LoadPreferredGraphicsAPI() == dp::ApiVersion::Vulkan && !vulkanForbidden)
202 {
203 auto vkFactory = make_unique_dp<AndroidVulkanContextFactory>(appVersionCode, sdkVersion, isCustomROM);
204 if (!vkFactory->IsVulkanSupported())
205 {
206 LOG(LWARNING, ("Vulkan API is not supported."));
207 }
208 else
209 {
210 vkFactory->SetSurface(env, jSurface);
211 if (!vkFactory->IsValid())
212 {
213 LOG(LWARNING, ("Invalid Vulkan API context."));
214 }
215 else
216 {
217 p.m_apiVersion = dp::ApiVersion::Vulkan;
218 p.m_surfaceWidth = vkFactory->GetWidth();
219 p.m_surfaceHeight = vkFactory->GetHeight();
220
221 m_vulkanContextFactory = std::move(vkFactory);
222 }
223 }
224 }
225
226 if (!m_vulkanContextFactory)
227 {
228 auto oglFactory = make_unique_dp<AndroidOGLContextFactory>(env, jSurface);
229 if (!oglFactory->IsValid())
230 {
231 LOG(LWARNING, ("Invalid GL context."));
232 return false;
233 }
234 p.m_apiVersion = dp::ApiVersion::OpenGLES3;
235 p.m_surfaceWidth = oglFactory->GetWidth();
236 p.m_surfaceHeight = oglFactory->GetHeight();
237
238 m_oglContextFactory = make_unique_dp<dp::ThreadSafeFactory>(oglFactory.release());
239 }
240
241 p.m_visualScale = static_cast<float>(dp::VisualScale(densityDpi));

Calls 15

VisualScaleFunction · 0.85
ASSERTFunction · 0.85
make_refFunction · 0.85
IsVulkanForbiddenMethod · 0.80
IsVulkanSupportedMethod · 0.80
resetMethod · 0.45
SetSurfaceMethod · 0.45
IsValidMethod · 0.45
GetWidthMethod · 0.45
GetHeightMethod · 0.45
releaseMethod · 0.45

Tested by

no test coverage detected