aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/samples_v2/SampleBase/ApexRenderResourceManager.cpp
blob: 64892adebb34460c314abebc4c6c1b341bfa5c6d (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
/*
* Copyright (c) 2008-2017, 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 "ApexRenderResourceManager.h"
#include "ApexRenderResources.h"


bool ApexRenderResourceManager::getInstanceLayoutData(uint32_t particleCount,
	uint32_t particleSemanticsBitmap,
	nvidia::apex::UserRenderInstanceBufferDesc* bufferDesc)
{
	PX_UNUSED(particleSemanticsBitmap);
	using namespace nvidia::apex;
	RenderDataFormat::Enum positionFormat = RenderInstanceLayoutElement::getSemanticFormat(RenderInstanceLayoutElement::POSITION_FLOAT3);
	RenderDataFormat::Enum rotationFormat = RenderInstanceLayoutElement::getSemanticFormat(RenderInstanceLayoutElement::ROTATION_SCALE_FLOAT3x3);
	const uint32_t positionElementSize = RenderDataFormat::getFormatDataSize(positionFormat);
	const uint32_t rotationElementSize = RenderDataFormat::getFormatDataSize(rotationFormat);
	bufferDesc->semanticOffsets[RenderInstanceLayoutElement::POSITION_FLOAT3] = 0;
	bufferDesc->semanticOffsets[RenderInstanceLayoutElement::ROTATION_SCALE_FLOAT3x3] = positionElementSize;
	uint32_t strideInBytes = positionElementSize + rotationElementSize;;
	bufferDesc->stride = strideInBytes;
	bufferDesc->maxInstances = particleCount;
	return true;
}

bool ApexRenderResourceManager::getSpriteLayoutData(uint32_t spriteCount,
	uint32_t spriteSemanticsBitmap,
	nvidia::apex::UserRenderSpriteBufferDesc* bufferDesc)
{
	PX_UNUSED(spriteSemanticsBitmap);
	RenderDataFormat::Enum positionFormat = RenderSpriteLayoutElement::getSemanticFormat(RenderSpriteLayoutElement::POSITION_FLOAT3);
	RenderDataFormat::Enum colorFormat = RenderSpriteLayoutElement::getSemanticFormat(RenderSpriteLayoutElement::COLOR_BGRA8);
	RenderDataFormat::Enum scaleFormat = RenderSpriteLayoutElement::getSemanticFormat(RenderSpriteLayoutElement::SCALE_FLOAT2);
	const uint32_t positionElementSize = RenderDataFormat::getFormatDataSize(positionFormat);
	const uint32_t colorElementSize = RenderDataFormat::getFormatDataSize(colorFormat);
	const uint32_t scaleElementSize = RenderDataFormat::getFormatDataSize(scaleFormat);
	bufferDesc->semanticOffsets[RenderSpriteLayoutElement::POSITION_FLOAT3] = 0;
	bufferDesc->semanticOffsets[RenderSpriteLayoutElement::COLOR_BGRA8] = positionElementSize;
	bufferDesc->semanticOffsets[RenderSpriteLayoutElement::SCALE_FLOAT2] = positionElementSize + colorElementSize;
	uint32_t strideInBytes = positionElementSize + colorElementSize + scaleElementSize;
	bufferDesc->stride = strideInBytes;
	bufferDesc->maxSprites = spriteCount;
	bufferDesc->textureCount = 0;
	return true;
}