Fix SpeedTree LOD strip handling to render all strips per LOD

This commit is contained in:
Koray
2026-02-15 15:40:54 +03:00
parent acb0ac0af5
commit cfe3c3cb7c
2 changed files with 144 additions and 73 deletions

View File

@@ -1,4 +1,4 @@
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// SpeedTreeRTExample Class
//
// (c) 2003 IDV, Inc.
@@ -43,6 +43,7 @@
#include <d3dx9.h>
#include <vector>
#include <memory>
#include <cstdint>
#include "EterLib/GrpObjectInstance.h"
#include "EterLib/GrpImageInstance.h"
@@ -91,8 +92,8 @@ public:
virtual void SetPosition(float x, float y, float z);
virtual void CalculateBBox();
virtual void OnRender(); // Render 시에 메소드, 그러나 프리뷰나 특수한 경우에만 직접 Render 콜을 부르며
// 그 이외에는 RenderBranches, RenderFronds 등의 메소드를 CSpeedTreeForest에서 호출한다.
virtual void OnRender(); // Render ½Ã¿¡ ¸Þ¼Òµå, ±×·¯³ª ÇÁ¸®ºä³ª Ư¼öÇÑ °æ¿ì¿¡¸¸ Á÷Á¢ Render ÄÝÀ» ºÎ¸£¸ç
// ±× À̿ܿ¡´Â RenderBranches, RenderFronds µîÀÇ ¸Þ¼Òµå¸¦ CSpeedTreeForest¿¡¼­ È£ÃâÇÑ´Ù.
virtual void OnBlendRender() {}
virtual void OnRenderToShadowMap() {}
virtual void OnRenderShadow() {}
@@ -172,13 +173,15 @@ private:
LPDIRECT3DVERTEXBUFFER9 m_pBranchVertexBuffer; // branch vertex buffer
unsigned int m_unBranchVertexCount; // number of vertices in branches
LPDIRECT3DINDEXBUFFER9 m_pBranchIndexBuffer; // branch index buffer
unsigned short* m_pBranchIndexCounts; // number of indexes per branch LOD level
std::vector<uint32_t> m_branchStripOffsets; // strip start indices (LOD0 ordering)
std::vector<std::vector<uint16_t>> m_branchStripLengths; // [lod][strip] index counts
// frond buffers
LPDIRECT3DVERTEXBUFFER9 m_pFrondVertexBuffer; // frond vertex buffer
unsigned int m_unFrondVertexCount; // number of vertices in frond
LPDIRECT3DINDEXBUFFER9 m_pFrondIndexBuffer; // frond index buffer
unsigned short* m_pFrondIndexCounts; // number of indexes per frond LOD level
std::vector<uint32_t> m_frondStripOffsets; // strip start indices (LOD0 ordering)
std::vector<std::vector<uint16_t>> m_frondStripLengths; // [lod][strip] index counts
// leaf buffers
unsigned short m_usNumLeafLods; // the number of leaf LODs
@@ -205,3 +208,4 @@ private:
};
#pragma warning(pop)