⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memory.cpp

📁 蒙特卡罗方法可以有效地解决复杂的工程问题
💻 CPP
字号:
// -----------------------------------------------------------
// memory.h
// 2004 - Jacco Bikker - jacco@bik5.com - www.bik5.com -   <><
// -----------------------------------------------------------

#include "memory.h"
#include "scene.h"

namespace Raytracer {

MManager::MManager() : m_OList( 0 )
{
	// build a 32-byte aligned array of KdTreeNodes
	m_KdArray = (char*)(new KdTreeNode[1000000]);
	m_ObjArray = (char*)(new ObjectList[100000]);
	unsigned long addr = (unsigned long)m_KdArray;
	m_KdPtr = (KdTreeNode*)((addr + 32) & (0xffffffff - 31));
	addr = (unsigned long)m_ObjArray;
	m_ObjPtr = (ObjectList*)((addr + 32) & (0xffffffff - 31));
	ObjectList* ptr = m_ObjPtr;
	for ( int i = 0; i < 99995; i++ ) 
	{
		ptr->SetNext( ptr + 1 );
		ptr++;
	}
	ptr->SetNext( 0 );
	m_OList = m_ObjPtr;
}

ObjectList* MManager::NewObjectList()
{
	ObjectList* retval;
	retval = m_OList;
	m_OList = m_OList->GetNext();
	retval->SetNext( 0 );
	retval->SetPrimitive( 0 );
	return retval;
}

void MManager::FreeObjectList( ObjectList* a_List )
{
	ObjectList* list = a_List;
	while (list->GetNext()) list = list->GetNext();
	list->SetNext( m_OList );
	m_OList = a_List;
}

KdTreeNode* MManager::NewKdTreeNodePair()
{ 
	unsigned long* tmp = (unsigned long*)m_KdPtr;
	tmp[1] = tmp[3] = 6;
	KdTreeNode* node = m_KdPtr;
	m_KdPtr += 2;
	return node;
}

}; // namespace Raytracer

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -