refactor: FireworksRecipe thread-local storage

This commit is contained in:
Tropical 2026-03-25 12:59:15 -05:00
parent a82d76ca46
commit 03f62dcb9e
4 changed files with 20 additions and 19 deletions

View file

@ -24,14 +24,14 @@ int normal;
*/
thread_local Tesselator* Tesselator::m_thread_instance = nullptr;
thread_local Tesselator* Tesselator::m_threadInstance = nullptr;
Tesselator* Tesselator::getInstance() {
return m_thread_instance;
return m_threadinstance;
}
void Tesselator::CreateNewThreadStorage(int bytes) {
Tesselator::m_thread_instance = new Tesselator(bytes / 4);
Tesselator::m_threadinstance = new Tesselator(bytes / 4);
}
// she tessalate my vertices till i render

View file

@ -41,7 +41,7 @@ public:
static void CreateNewThreadStorage(int bytes);
private:
static thread_local Tesselator* m_thread_instance;
static thread_local Tesselator* m_threadInstance;
public:
static Tesselator* getInstance();

View file

@ -2,34 +2,35 @@
#include "../Headers/net.minecraft.world.item.h"
#include "FireworksRecipe.h"
DWORD FireworksRecipe::tlsIdx = 0;
FireworksRecipe::ThreadStorage* FireworksRecipe::tlsDefault = NULL;
thread_local FireworksRecipe::ThreadStorage* FireworksRecipe::m_threadStorage =
nullptr;
FireworksRecipe::ThreadStorage* FireworksRecipe::m_defaultThreadStorage =
nullptr;
FireworksRecipe::ThreadStorage::ThreadStorage() { resultItem = nullptr; }
void FireworksRecipe::CreateNewThreadStorage() {
ThreadStorage* tls = new ThreadStorage();
if (tlsDefault == NULL) {
tlsIdx = TlsAlloc();
tlsDefault = tls;
if (m_defaultThreadStorage == nullptr) {
m_defaultThreadStorage = tls;
}
TlsSetValue(tlsIdx, tls);
m_threadStorage = tls;
}
void FireworksRecipe::UseDefaultThreadStorage() {
TlsSetValue(tlsIdx, tlsDefault);
m_threadStorage = m_defaultThreadStorage;
}
void FireworksRecipe::ReleaseThreadStorage() {
ThreadStorage* tls = (ThreadStorage*)TlsGetValue(tlsIdx);
if (tls == tlsDefault) return;
delete tls;
if (m_threadStorage != m_defaultThreadStorage) {
delete m_threadStorage;
}
}
void FireworksRecipe::setResultItem(std::shared_ptr<ItemInstance> item) {
ThreadStorage* tls = (ThreadStorage*)TlsGetValue(tlsIdx);
tls->resultItem = item;
m_threadStorage->resultItem = item;
}
FireworksRecipe::FireworksRecipe() {

View file

@ -13,8 +13,8 @@ private:
std::shared_ptr<ItemInstance> resultItem;
ThreadStorage();
};
static DWORD tlsIdx;
static ThreadStorage* tlsDefault;
static thread_local ThreadStorage* m_threadStorage;
static ThreadStorage* m_defaultThreadStorage;
void setResultItem(std::shared_ptr<ItemInstance> item);