本文整理汇总了C++中FMeshElementCollector::AllocateMesh方法的典型用法代码示例。如果您正苦于以下问题:C++ FMeshElementCollector::AllocateMesh方法的具体用法?C++ FMeshElementCollector::AllocateMesh怎么用?C++ FMeshElementCollector::AllocateMesh使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FMeshElementCollector
的用法示例。
在下文中一共展示了FMeshElementCollector::AllocateMesh方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetDynamicMeshElements
void FTextRenderSceneProxy::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const
{
QUICK_SCOPE_CYCLE_COUNTER( STAT_TextRenderSceneProxy_GetDynamicMeshElements );
// Vertex factory will not been initialized when the text string is empty or font is invalid.
if(VertexFactory.IsInitialized())
{
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
{
if (VisibilityMap & (1 << ViewIndex))
{
const FSceneView* View = Views[ViewIndex];
// Draw the mesh.
FMeshBatch& Mesh = Collector.AllocateMesh();
FMeshBatchElement& BatchElement = Mesh.Elements[0];
BatchElement.IndexBuffer = &IndexBuffer;
Mesh.VertexFactory = &VertexFactory;
BatchElement.PrimitiveUniformBufferResource = &GetUniformBuffer();
BatchElement.FirstIndex = 0;
BatchElement.NumPrimitives = IndexBuffer.Indices.Num() / 3;
BatchElement.MinVertexIndex = 0;
BatchElement.MaxVertexIndex = VertexBuffer.Vertices.Num() - 1;
Mesh.ReverseCulling = IsLocalToWorldDeterminantNegative();
Mesh.bDisableBackfaceCulling = false;
Mesh.Type = PT_TriangleList;
Mesh.DepthPriorityGroup = SDPG_World;
const bool bUseSelectedMaterial = GIsEditor && (View->Family->EngineShowFlags.Selection) ? IsSelected() : false;
Mesh.MaterialRenderProxy = TextMaterial->GetRenderProxy(bUseSelectedMaterial);
Mesh.bCanApplyViewModeOverrides = !bAlwaysRenderAsText;
Collector.AddMesh(ViewIndex, Mesh);
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
RenderBounds(Collector.GetPDI(ViewIndex), View->Family->EngineShowFlags, GetBounds(), IsSelected());
#endif
}
}
}
}
示例2: GetVectorFieldMesh
void GetVectorFieldMesh(
FVectorFieldVisualizationVertexFactory* VertexFactory,
FVectorFieldInstance* VectorFieldInstance,
int32 ViewIndex,
FMeshElementCollector& Collector)
{
FVectorFieldResource* Resource = VectorFieldInstance->Resource;
if (Resource && IsValidRef(Resource->VolumeTextureRHI))
{
// Set up parameters.
FVectorFieldVisualizationParameters UniformParameters;
UniformParameters.VolumeToWorld = VectorFieldInstance->VolumeToWorld;
UniformParameters.VolumeToWorldNoScale = VectorFieldInstance->VolumeToWorldNoScale;
UniformParameters.VoxelSize = FVector( 1.0f / Resource->SizeX, 1.0f / Resource->SizeY, 1.0f / Resource->SizeZ );
UniformParameters.Scale = VectorFieldInstance->Intensity * Resource->Intensity;
VertexFactory->SetParameters(UniformParameters, Resource->VolumeTextureRHI);
// Create a mesh batch for the visualization.
FMeshBatch& MeshBatch = Collector.AllocateMesh();
MeshBatch.CastShadow = false;
MeshBatch.bUseAsOccluder = false;
MeshBatch.VertexFactory = VertexFactory;
MeshBatch.MaterialRenderProxy = GEngine->LevelColorationUnlitMaterial->GetRenderProxy(false);
MeshBatch.Type = PT_LineList;
// A single mesh element.
FMeshBatchElement& MeshElement = MeshBatch.Elements[0];
MeshElement.NumPrimitives = 1;
MeshElement.NumInstances = Resource->SizeX * Resource->SizeY * Resource->SizeZ;
MeshElement.FirstIndex = 0;
MeshElement.MinVertexIndex = 0;
MeshElement.MaxVertexIndex = 1;
MeshElement.PrimitiveUniformBufferResource = &GIdentityPrimitiveUniformBuffer;
MeshBatch.bCanApplyViewModeOverrides = false;
Collector.AddMesh(ViewIndex, MeshBatch);
}
}
示例3: GetDynamicMeshElements
void FTangoPointCloudSceneProxy::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily & ViewFamily, uint32 VisibilityMap, FMeshElementCollector & Collector) const
{
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
{
if (VisibilityMap & (1 << ViewIndex))
{
//Essentially, which camera we are using
const FSceneView* View = Views[ViewIndex];
//Ask for a new render batch and link it to our data
FMeshBatch& Mesh = Collector.AllocateMesh();
Mesh.VertexFactory = &VertexFactory;
Mesh.MaterialRenderProxy = Material->GetRenderProxy(IsSelected());
Mesh.ReverseCulling = IsLocalToWorldDeterminantNegative();
Mesh.DepthPriorityGroup = SDPG_World;
Mesh.bCanApplyViewModeOverrides = false;
//GL_Points render, still need to work out how to set GL_PointSize
Mesh.Type = PT_PointList;
//Tell the render object how to index our data.
FMeshBatchElement& BatchElement = Mesh.Elements[0];
BatchElement.IndexBuffer = &IndexBuffer;
//Give all the "default" uniforms to help render. (Transform etc.)
BatchElement.PrimitiveUniformBuffer = CreatePrimitiveUniformBufferImmediate(GetLocalToWorld(), GetBounds(), GetLocalBounds(), true, UseEditorDepthTest());
BatchElement.FirstIndex = 0;
BatchElement.NumPrimitives = IndexBuffer.Indices.Num() / 3;
BatchElement.MinVertexIndex = 0;
BatchElement.MaxVertexIndex = VertexBuffer.Vertices.Num() - 1;
//All done!
Collector.AddMesh(ViewIndex, Mesh);
}
}
}
示例4: GetDynamicMeshElements
void FGeometryCacheSceneProxy::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const
{
SCOPE_CYCLE_COUNTER(STAT_GeometryCacheSceneProxy_GetMeshElements);
// Set up wireframe material (if needed)
const bool bWireframe = AllowDebugViewmodes() && ViewFamily.EngineShowFlags.Wireframe;
FColoredMaterialRenderProxy* WireframeMaterialInstance = NULL;
if (bWireframe)
{
WireframeMaterialInstance = new FColoredMaterialRenderProxy(
GEngine->WireframeMaterial ? GEngine->WireframeMaterial->GetRenderProxy(IsSelected()) : NULL,
FLinearColor(0, 0.5f, 1.f)
);
Collector.RegisterOneFrameMaterialProxy(WireframeMaterialInstance);
}
// Iterate over sections
for (const FGeomCacheTrackProxy* TrackProxy : Sections )
{
// QQQ
if (TrackProxy != nullptr)
{
INC_DWORD_STAT_BY(STAT_GeometryCacheSceneProxy_MeshBatchCount, TrackProxy->MeshData->BatchesInfo.Num());
int32 BatchIndex = 0;
for (FGeometryCacheMeshBatchInfo& BatchInfo : TrackProxy->MeshData->BatchesInfo)
{
FMaterialRenderProxy* MaterialProxy = bWireframe ? WireframeMaterialInstance : TrackProxy->Materials[BatchIndex]->GetRenderProxy(IsSelected());
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
{
if (VisibilityMap & (1 << ViewIndex))
{
const FSceneView* View = Views[ViewIndex];
// Draw the mesh.
FMeshBatch& Mesh = Collector.AllocateMesh();
FMeshBatchElement& BatchElement = Mesh.Elements[0];
BatchElement.IndexBuffer = &TrackProxy->IndexBuffer;
Mesh.bWireframe = bWireframe;
Mesh.VertexFactory = &TrackProxy->VertexFactory;
Mesh.MaterialRenderProxy = MaterialProxy;
BatchElement.PrimitiveUniformBuffer = CreatePrimitiveUniformBufferImmediate(TrackProxy->WorldMatrix * GetLocalToWorld(), GetBounds(), GetLocalBounds(), true, UseEditorDepthTest());
BatchElement.FirstIndex = BatchInfo.StartIndex;
BatchElement.NumPrimitives = BatchInfo.NumTriangles;
BatchElement.MinVertexIndex = 0;
BatchElement.MaxVertexIndex = TrackProxy->VertexBuffer.Vertices.Num() - 1;
Mesh.ReverseCulling = IsLocalToWorldDeterminantNegative();
Mesh.Type = PT_TriangleList;
Mesh.DepthPriorityGroup = SDPG_World;
Mesh.bCanApplyViewModeOverrides = false;
Collector.AddMesh(ViewIndex, Mesh);
INC_DWORD_STAT_BY(STAT_GeometryCacheSceneProxy_TriangleCount, BatchElement.NumPrimitives);
}
}
++BatchIndex;
}
}
}
// Draw bounds
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
{
if (VisibilityMap & (1 << ViewIndex))
{
// Render bounds
RenderBounds(Collector.GetPDI(ViewIndex), ViewFamily.EngineShowFlags, GetBounds(), IsSelected());
}
}
#endif
}
示例5: GetDynamicMeshElements
void NiagaraEffectRendererSprites::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector, const FNiagaraSceneProxy *SceneProxy) const
{
SCOPE_CYCLE_COUNTER(STAT_NiagaraRender);
SCOPE_CYCLE_COUNTER(STAT_NiagaraRenderSprites);
SimpleTimer MeshElementsTimer;
check(DynamicDataRender)
if (DynamicDataRender->VertexData.Num() == 0)
{
return;
}
const bool bIsWireframe = ViewFamily.EngineShowFlags.Wireframe;
FMaterialRenderProxy* MaterialRenderProxy = Material->GetRenderProxy(SceneProxy->IsSelected(), SceneProxy->IsHovered());
int32 SizeInBytes = DynamicDataRender->VertexData.GetTypeSize() * DynamicDataRender->VertexData.Num();
FGlobalDynamicVertexBuffer::FAllocation LocalDynamicVertexAllocation = FGlobalDynamicVertexBuffer::Get().Allocate(SizeInBytes);
if (LocalDynamicVertexAllocation.IsValid())
{
// Update the primitive uniform buffer if needed.
if (!WorldSpacePrimitiveUniformBuffer.IsInitialized())
{
FPrimitiveUniformShaderParameters PrimitiveUniformShaderParameters = GetPrimitiveUniformShaderParameters(
FMatrix::Identity,
SceneProxy->GetActorPosition(),
SceneProxy->GetBounds(),
SceneProxy->GetLocalBounds(),
SceneProxy->ReceivesDecals(),
false,
SceneProxy->UseEditorDepthTest()
);
WorldSpacePrimitiveUniformBuffer.SetContents(PrimitiveUniformShaderParameters);
WorldSpacePrimitiveUniformBuffer.InitResource();
}
// Copy the vertex data over.
FMemory::Memcpy(LocalDynamicVertexAllocation.Buffer, DynamicDataRender->VertexData.GetData(), SizeInBytes);
// Compute the per-view uniform buffers.
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
{
if (VisibilityMap & (1 << ViewIndex))
{
const FSceneView* View = Views[ViewIndex];
FNiagaraMeshCollectorResourcesSprite& CollectorResources = Collector.AllocateOneFrameResource<FNiagaraMeshCollectorResourcesSprite>();
FParticleSpriteUniformParameters PerViewUniformParameters;// = UniformParameters;
PerViewUniformParameters.AxisLockRight = FVector4(0.0f, 0.0f, 0.0f, 0.0f);
PerViewUniformParameters.AxisLockUp = FVector4(0.0f, 0.0f, 0.0f, 0.0f);
PerViewUniformParameters.RotationScale = 1.0f;
PerViewUniformParameters.RotationBias = 0.0f;
PerViewUniformParameters.TangentSelector = FVector4(0.0f, 0.0f, 0.0f, 1.0f);
PerViewUniformParameters.InvDeltaSeconds = 0.0f;
if (Properties)
{
PerViewUniformParameters.SubImageSize = FVector4(Properties->SubImageInfo.X, Properties->SubImageInfo.Y, 1.0f / Properties->SubImageInfo.X, 1.0f / Properties->SubImageInfo.Y);
}
PerViewUniformParameters.NormalsType = 0;
PerViewUniformParameters.NormalsSphereCenter = FVector4(0.0f, 0.0f, 0.0f, 1.0f);
PerViewUniformParameters.NormalsCylinderUnitDirection = FVector4(0.0f, 0.0f, 1.0f, 0.0f);
PerViewUniformParameters.PivotOffset = FVector2D(-0.5f, -0.5f);
PerViewUniformParameters.MacroUVParameters = FVector4(0.0f, 0.0f, 1.0f, 1.0f);
// Collector.AllocateOneFrameResource uses default ctor, initialize the vertex factory
CollectorResources.VertexFactory.SetFeatureLevel(ViewFamily.GetFeatureLevel());
CollectorResources.VertexFactory.SetParticleFactoryType(PVFT_Sprite);
PerViewUniformParameters.MacroUVParameters = FVector4(0.0f, 0.0f, 1.0f, 1.0f);
CollectorResources.UniformBuffer = FParticleSpriteUniformBufferRef::CreateUniformBufferImmediate(PerViewUniformParameters, UniformBuffer_SingleFrame);
CollectorResources.VertexFactory.InitResource();
CollectorResources.VertexFactory.SetSpriteUniformBuffer(CollectorResources.UniformBuffer);
CollectorResources.VertexFactory.SetInstanceBuffer(
LocalDynamicVertexAllocation.VertexBuffer,
LocalDynamicVertexAllocation.VertexOffset,
sizeof(FParticleSpriteVertex),
true
);
CollectorResources.VertexFactory.SetDynamicParameterBuffer(NULL, 0, 0, true);
FMeshBatch& MeshBatch = Collector.AllocateMesh();
MeshBatch.VertexFactory = &CollectorResources.VertexFactory;
MeshBatch.CastShadow = SceneProxy->CastsDynamicShadow();
MeshBatch.bUseAsOccluder = false;
MeshBatch.ReverseCulling = SceneProxy->IsLocalToWorldDeterminantNegative();
MeshBatch.Type = PT_TriangleList;
MeshBatch.DepthPriorityGroup = SceneProxy->GetDepthPriorityGroup(View);
MeshBatch.bCanApplyViewModeOverrides = true;
MeshBatch.bUseWireframeSelectionColoring = SceneProxy->IsSelected();
if (bIsWireframe)
{
MeshBatch.MaterialRenderProxy = UMaterial::GetDefaultMaterial(MD_Surface)->GetRenderProxy(SceneProxy->IsSelected(), SceneProxy->IsHovered());
}
else
{
MeshBatch.MaterialRenderProxy = MaterialRenderProxy;
//.........这里部分代码省略.........