core: Fix vulkan surface rotation (#4182)

This commit is contained in:
Adrian Cojocaru
2026-03-20 17:47:15 +02:00
committed by GitHub
parent 9a4fd44c3a
commit 00b748c797
3 changed files with 14 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
package org.maplibre.android.testapp.activity.maplayout
import android.content.Context
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.*
import android.widget.*
@@ -34,6 +35,8 @@ open class DebugModeActivity : AppCompatActivity(), OnMapReadyCallback, OnFpsCha
private var fpsView: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
setContentView(R.layout.activity_debug_mode)
setupToolbar()
setupMapView(savedInstanceState)

View File

@@ -1,5 +1,6 @@
package org.maplibre.android.testapp.activity.maplayout
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.MenuItem
import androidx.activity.OnBackPressedCallback
@@ -16,6 +17,8 @@ class SimpleMapActivity : AppCompatActivity() {
private lateinit var mapView: MapView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// activity uses singleInstance for testing purposes

View File

@@ -97,18 +97,20 @@ void SurfaceRenderableResource::initSwapchain(uint32_t w, uint32_t h) {
// update values based on surface limits
extent.width = std::min(std::max(w, capabilities.minImageExtent.width), capabilities.maxImageExtent.width);
extent.height = std::min(std::max(h, capabilities.minImageExtent.height), capabilities.maxImageExtent.height);
}
if (hasSurfaceTransformSupport()) {
if (capabilities.currentTransform & vk::SurfaceTransformFlagBitsKHR::eRotate90 ||
capabilities.currentTransform & vk::SurfaceTransformFlagBitsKHR::eRotate270) {
std::swap(extent.width, extent.height);
if (hasSurfaceTransformSupport()) {
if (capabilities.currentTransform & vk::SurfaceTransformFlagBitsKHR::eRotate90 ||
capabilities.currentTransform & vk::SurfaceTransformFlagBitsKHR::eRotate270) {
std::swap(extent.width, extent.height);
}
}
}
uint32_t swapchainImageCount = capabilities.minImageCount + 1;
// check surface limits (0 is unlimited)
if (capabilities.maxImageCount > 0) swapchainImageCount = std::min(swapchainImageCount, capabilities.maxImageCount);
if (capabilities.maxImageCount > 0) {
swapchainImageCount = std::min(swapchainImageCount, capabilities.maxImageCount);
}
auto swapchainCreateInfo = vk::SwapchainCreateInfoKHR()
.setSurface(surface.get())