mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-04 16:23:52 +00:00
Fix glow sprite flashing, move fadeAlpha to push constants, throttle character bones
- Glow sprites now use dedicated vertex buffer (glowVB_) separate from M2 particle buffer to prevent data race when renderM2Particles() overwrites glow data mid-flight - Move fadeAlpha from shared material UBO to per-draw push constants, eliminating cross-instance alpha race on non-double-buffered UBOs - Smooth adaptive render distance transitions to prevent pop-in/out at instance count thresholds (1000/2000) - Distance-tiered character bone throttling: near (<30u) every frame, mid (30-60u) every 3rd, far (60-120u) every 6th frame - Skip weapon instance animation updates (transforms set by parent bones)
This commit is contained in:
parent
3482dacea8
commit
30fa9836d9
8 changed files with 87 additions and 31 deletions
|
|
@ -178,6 +178,9 @@ private:
|
|||
bool hasOverrideModelMatrix = false;
|
||||
glm::mat4 overrideModelMatrix{1.0f};
|
||||
|
||||
// Bone update throttling (skip frames for distant characters)
|
||||
uint32_t boneUpdateCounter = 0;
|
||||
|
||||
// Per-instance bone SSBO (double-buffered per frame)
|
||||
VkBuffer boneBuffer[2] = {};
|
||||
VmaAllocation boneAlloc[2] = {};
|
||||
|
|
|
|||
|
|
@ -371,6 +371,11 @@ private:
|
|||
::VkBuffer m2ParticleVB_ = VK_NULL_HANDLE;
|
||||
VmaAllocation m2ParticleVBAlloc_ = VK_NULL_HANDLE;
|
||||
void* m2ParticleVBMapped_ = nullptr;
|
||||
// Dedicated glow sprite vertex buffer (separate from particle VB to avoid data race)
|
||||
static constexpr size_t MAX_GLOW_SPRITES = 2000;
|
||||
::VkBuffer glowVB_ = VK_NULL_HANDLE;
|
||||
VmaAllocation glowVBAlloc_ = VK_NULL_HANDLE;
|
||||
void* glowVBMapped_ = nullptr;
|
||||
|
||||
std::unordered_map<uint32_t, M2ModelGPU> models;
|
||||
std::vector<M2Instance> instances;
|
||||
|
|
@ -477,6 +482,7 @@ private:
|
|||
// Cached camera state from update() for frustum-culling bones
|
||||
glm::vec3 cachedCamPos_ = glm::vec3(0.0f);
|
||||
float cachedMaxRenderDistSq_ = 0.0f;
|
||||
float smoothedRenderDist_ = 1000.0f; // Smoothed render distance to prevent flickering
|
||||
|
||||
// Thread count for parallel bone animation
|
||||
uint32_t numAnimThreads_ = 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue