void FTesselatedScreenRectangleIndexBuffer::InitRHI() { TResourceArray<uint16, INDEXBUFFER_ALIGNMENT> IndexBuffer; uint32 NumIndices = NumPrimitives() * 3; IndexBuffer.AddUninitialized(NumIndices); uint16* Out = (uint16*)IndexBuffer.GetData(); for(uint32 y = 0; y < Height; ++y) { for(uint32 x = 0; x < Width; ++x) { // left top to bottom right in reading order uint16 Index00 = x + y * (Width + 1); uint16 Index10 = Index00 + 1; uint16 Index01 = Index00 + (Width + 1); uint16 Index11 = Index01 + 1; // todo: diagonal can be flipped on parts of the screen // triangle A *Out++ = Index00; *Out++ = Index01; *Out++ = Index10; // triangle B *Out++ = Index11; *Out++ = Index10; *Out++ = Index01; } } // Create index buffer. Fill buffer with initial data upon creation FRHIResourceCreateInfo CreateInfo(&IndexBuffer); IndexBufferRHI = RHICreateIndexBuffer(sizeof(uint16), IndexBuffer.GetResourceDataSize(), BUF_Static, CreateInfo); }
/** Initialize the RHI for this rendering resource */ void InitRHI() override { // Indices 0 - 5 are used for rendering a quad. Indices 6 - 8 are used for triangle optimization. const uint16 Indices[] = { 0, 1, 2, 2, 1, 3, 0, 4, 5 }; TResourceArray<uint16, INDEXBUFFER_ALIGNMENT> IndexBuffer; uint32 InternalNumIndices = ARRAY_COUNT(Indices); IndexBuffer.AddUninitialized(InternalNumIndices); FMemory::Memcpy(IndexBuffer.GetData(), Indices, InternalNumIndices * sizeof(uint16)); // Create index buffer. Fill buffer with initial data upon creation FRHIResourceCreateInfo CreateInfo(&IndexBuffer); IndexBufferRHI = RHICreateIndexBuffer(sizeof(uint16), IndexBuffer.GetResourceDataSize(), BUF_Static, CreateInfo); }
/** * Initialize the RHI for this rendering resource */ void InitRHI() override { TResourceArray<uint16, INDEXBUFFER_ALIGNMENT> Indices; NumIndices = ARRAY_COUNT(GCubeIndices); Indices.AddUninitialized(NumIndices); FMemory::Memcpy(Indices.GetData(), GCubeIndices, NumIndices * sizeof(uint16)); const uint32 Size = Indices.GetResourceDataSize(); const uint32 Stride = sizeof(uint16); // Create index buffer. Fill buffer with initial data upon creation FRHIResourceCreateInfo CreateInfo(&Indices); IndexBufferRHI = RHICreateIndexBuffer(Stride, Size, BUF_Static, CreateInfo); }