virtual void InitRHI() override { FRHIResourceCreateInfo CreateInfo; void* Buffer = nullptr; IndexBufferRHI = RHICreateAndLockIndexBuffer(sizeof(int32), Indices.Num() * sizeof(int32), BUF_Static, CreateInfo, Buffer); // Write the indices to the index buffer. FMemory::Memcpy(Buffer, Indices.GetData(), Indices.Num() * sizeof(int32)); RHIUnlockIndexBuffer(IndexBufferRHI); }
void InitRHI() { FRHIResourceCreateInfo CreateInfo; void* Buffer = nullptr; IndexBufferRHI = RHICreateAndLockIndexBuffer(sizeof(uint16), Indices.Num() * sizeof(uint16), BUF_Static, CreateInfo, Buffer); // Copy the index data into the index buffer. FMemory::Memcpy(Buffer, Indices.GetData(), Indices.Num() * sizeof(uint16)); RHIUnlockIndexBuffer(IndexBufferRHI); }
virtual void InitRHI() override { const uint32 MaxBatchedPrimitives = FOcclusionQueryBatcher::OccludedPrimitiveQueryBatchSize; const uint32 Stride = sizeof(uint16); const uint32 SizeInBytes = MaxBatchedPrimitives * NUM_CUBE_VERTICES * Stride; FRHIResourceCreateInfo CreateInfo; void* BufferData; IndexBufferRHI = RHICreateAndLockIndexBuffer(Stride, SizeInBytes, BUF_Static, CreateInfo, BufferData); uint16* RESTRICT Indices = (uint16*)BufferData; for(uint32 PrimitiveIndex = 0;PrimitiveIndex < MaxBatchedPrimitives;PrimitiveIndex++) { for(int32 Index = 0;Index < NUM_CUBE_VERTICES;Index++) { Indices[PrimitiveIndex * NUM_CUBE_VERTICES + Index] = PrimitiveIndex * 8 + GCubeIndices[Index]; } } RHIUnlockIndexBuffer(IndexBufferRHI); }
/** * Creates an index buffer for drawing an individual sprite. */ void FParticleIndexBuffer::InitRHI() { // Instanced path needs only MAX_PARTICLES_PER_INSTANCE, // but using the maximum needed for the non-instanced path // in prep for future flipping of both instanced and non-instanced at runtime. const uint32 MaxParticles = 65536 / 4; const uint32 Size = sizeof(uint16) * 6 * MaxParticles; const uint32 Stride = sizeof(uint16); FRHIResourceCreateInfo CreateInfo; void* Buffer = nullptr; IndexBufferRHI = RHICreateAndLockIndexBuffer( Stride, Size, BUF_Static, CreateInfo, Buffer); uint16* Indices = (uint16*)Buffer; for (uint32 SpriteIndex = 0; SpriteIndex < MaxParticles; ++SpriteIndex) { Indices[SpriteIndex*6 + 0] = SpriteIndex*4 + 0; Indices[SpriteIndex*6 + 1] = SpriteIndex*4 + 2; Indices[SpriteIndex*6 + 2] = SpriteIndex*4 + 3; Indices[SpriteIndex*6 + 3] = SpriteIndex*4 + 0; Indices[SpriteIndex*6 + 4] = SpriteIndex*4 + 1; Indices[SpriteIndex*6 + 5] = SpriteIndex*4 + 2; } RHIUnlockIndexBuffer( IndexBufferRHI ); }