aboutsummaryrefslogtreecommitdiff
path: root/NvBlast/samples/SampleBase/blast/BlastAssetModel.cpp
blob: c42215e3b97e63ab615107cb9cedbe3a9100ed44 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
* Copyright (c) 2008-2015, NVIDIA CORPORATION.  All rights reserved.
*
* NVIDIA CORPORATION and its licensors retain all intellectual property
* and proprietary rights in and to this software, related documentation
* and any modifications thereto.  Any use, reproduction, disclosure or
* distribution of this software and related documentation without an express
* license agreement from NVIDIA CORPORATION is strictly prohibited.
*/

#include "BlastAssetModel.h"
#include "Renderer.h"
#include "BlastController.h"
#include "Utils.h"
#include "ResourceManager.h"
#include "PsFileBuffer.h"
#include "NvBlastExtPxAsset.h"
#include <sstream>


BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxCooking& cooking, Renderer& renderer, const char* modelName)
	: BlastAsset(renderer)
{
	ResourceManager& resourceManager = m_renderer.getResourceManager();

	// Physics Asset
	std::ostringstream blastFileName;
	blastFileName << modelName << ".bpxa";
	std::string path;
	if (resourceManager.findFile(blastFileName.str(), path))
	{
		PsFileBuffer fileBuf(path.c_str(), PxFileBuf::OPEN_READ_ONLY);
		m_pxAsset = ExtPxAsset::deserialize(fileBuf, framework, physics);
		ASSERT_PRINT(m_pxAsset != nullptr, "can't load bpxa file");
	}
	else
	{
		ASSERT_PRINT(false, "wrong blastFilename");
	}

	// load obj file
	std::ostringstream objFileName;
	objFileName << modelName << ".obj";
	if (resourceManager.findFile(objFileName.str(), path))
	{
		m_model = BlastModel::loadFromFileTinyLoader(path.c_str());
		if (!m_model)
		{
			ASSERT_PRINT(false, "obj load failed");
		}
	}
	else
	{
		ASSERT_PRINT(false, "wrong objFileName");
	}

	validate();
}


BlastAssetModel::~BlastAssetModel()
{
	m_pxAsset->release();
}