diff --git a/shaders/background.frag b/shaders/background.frag index 51c0d7e..0022377 100644 --- a/shaders/background.frag +++ b/shaders/background.frag @@ -28,8 +28,8 @@ void main() { // Normalize position to 0-1 range vec2 uv = (fragPosition + 1.0) * 0.5; - // Create dynamic gradient based on time - float t = ubo.time / 360.0; + // Create dynamic gradient based on rotation angle (matching Qt CustomWidget) + float t = ubo.rotation / 360.0; // Calculate color components matching Qt CustomWidget float r = 0.392 + 0.196 * sin(t * 6.28318); diff --git a/src/shaders_spirv/background.frag.spv b/src/shaders_spirv/background.frag.spv index dd50096..87cb38f 100644 Binary files a/src/shaders_spirv/background.frag.spv and b/src/shaders_spirv/background.frag.spv differ diff --git a/src/shaders_spirv/background_frag.inc b/src/shaders_spirv/background_frag.inc index 6f2bf3b..ac4a59a 100644 --- a/src/shaders_spirv/background_frag.inc +++ b/src/shaders_spirv/background_frag.inc @@ -36,7 +36,7 @@ 0x3f800000u, 0x0007002cu, 0x00000014u, 0x00000019u, 0x00000017u, 0x00000017u, 0x00000017u, 0x00000018u, 0x00040017u, 0x0000001bu, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000001cu, 0x00000007u, 0x0000001bu, 0x00040020u, 0x0000001eu, 0x00000001u, 0x0000001bu, 0x0004003bu, 0x0000001eu, 0x0000001fu, 0x00000001u, - 0x00040020u, 0x00000024u, 0x00000007u, 0x00000006u, 0x0004002bu, 0x0000000au, 0x00000026u, 0x00000000u, + 0x00040020u, 0x00000024u, 0x00000007u, 0x00000006u, 0x0004002bu, 0x0000000au, 0x00000026u, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000029u, 0x43b40000u, 0x0004002bu, 0x00000006u, 0x0000002cu, 0x3ec8b439u, 0x0004002bu, 0x00000006u, 0x0000002du, 0x3e48b439u, 0x0004002bu, 0x00000006u, 0x0000002fu, 0x40c90fd0u, 0x0004002bu, 0x00000006u, 0x00000035u, 0x3f16872bu, 0x0004002bu, 0x00000006u, 0x00000038u, 0x3f860419u, diff --git a/src/vulkanrenderer.cpp b/src/vulkanrenderer.cpp index 7f6c610..6011a03 100644 --- a/src/vulkanrenderer.cpp +++ b/src/vulkanrenderer.cpp @@ -562,6 +562,15 @@ void VulkanRenderer::recordCommandBuffer(VkCommandBuffer commandBuffer, m_ubo.wavePhase = static_cast(wavePhase); m_ubo.paintingEnabled = paintingEnabled ? 1.0f : 0.0f; + // Debug output every 60 frames + static int debugCounter = 0; + if (++debugCounter % 60 == 0) { + std::cout << "Background animation - time: " << m_ubo.time + << ", rotation: " << m_ubo.rotation + << ", wavePhase: " << m_ubo.wavePhase + << ", paintingEnabled: " << m_ubo.paintingEnabled << std::endl; + } + // CRITICAL FIX: Update ALL uniform buffers every frame! diff --git a/src/vulkanwidget.cpp b/src/vulkanwidget.cpp index c6e9606..175ec19 100644 --- a/src/vulkanwidget.cpp +++ b/src/vulkanwidget.cpp @@ -60,6 +60,7 @@ VulkanWidget::VulkanWidget(QWidget *parent) , m_wavePhase(0.0) , m_startTime(QDateTime::currentDateTime()) , m_lastLockDuration(0) + , m_totalPausedTime(0) , m_lastLockFrameCount(0) , m_lockPaintFrameCount(0) , m_lockCount(0) @@ -134,17 +135,20 @@ void VulkanWidget::setRenderingEnabled(bool enabled) qDebug() << "Render timer restarted"; } - // Unlocked: calculate lock duration + // Unlocked: calculate lock duration and accumulate paused time if (m_lastLockTime.isValid()) { QDateTime unlockTime = QDateTime::currentDateTime(); m_lastLockDuration = m_lastLockTime.secsTo(unlockTime); m_lockPaintFrameCount = m_frameCount - m_lastLockFrameCount; + + // 累积锁屏期间的暂停时间 + m_totalPausedTime += m_lastLockDuration; + qDebug() << "Screen was locked for" << m_lastLockDuration << "seconds"; + qDebug() << "Total paused time:" << m_totalPausedTime << "seconds"; qDebug() << "Frames at lock:" << m_lastLockFrameCount << "- Frames painted during lock:" << m_lockPaintFrameCount; } - - m_startTime = QDateTime::currentDateTime(); } else { qDebug() << "Vulkan rendering DISABLED - Showing locked state"; // 关键修复:渲染一帧锁屏界面后停止定时器 @@ -980,9 +984,10 @@ void VulkanWidget::recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t i .arg(m_lockCount); } - // Calculate elapsed time in seconds + // Calculate elapsed time in seconds (total runtime minus paused time) QDateTime now = QDateTime::currentDateTime(); - qint64 elapsedTime = m_startTime.secsTo(now); + qint64 totalRuntime = m_startTime.secsTo(now); + qint64 elapsedTime = totalRuntime - m_totalPausedTime; m_renderer->recordCommandBuffer(commandBuffer, imageIndex, imageView, m_frameCount, static_cast(elapsedTime), diff --git a/src/vulkanwidget.h b/src/vulkanwidget.h index cfd8a0e..734ce2b 100644 --- a/src/vulkanwidget.h +++ b/src/vulkanwidget.h @@ -254,6 +254,7 @@ private: QDateTime m_pauseTime; QDateTime m_lastLockTime; qint64 m_lastLockDuration; + qint64 m_totalPausedTime; // 累积的暂停时间(秒) int m_lastLockFrameCount; int m_lockPaintFrameCount; int m_lockCount;