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
| FRHIResourceCreateInfo CreateInfo; FVertexBufferRHIRef VertexBufferRHI = RHICreateVertexBuffer(sizeof(FTextureVertex) * 4, BUF_Volatile, CreateInfo); void* VoidPtr = RHILockVertexBuffer(VertexBufferRHI, 0, sizeof(FTextureVertex) * 4, RLM_WriteOnly);
//CPU上修改VertexBuffer数据 FTextureVertex* Vertices = (FTextureVertex*)VoidPtr; Vertices[0].Position = FVector4(1.0f, 1.0f, 0, 1.0f); Vertices[1].Position = FVector4(-1.0f, 1.0f, 0, 1.0f); Vertices[2].Position = FVector4(1.0f, -1.0f, 0, 1.0f); Vertices[3].Position = FVector4(-1.0f, -1.0f, 0, 1.0f); Vertices[0].UV = FVector2D(1.0f, 1.0f); Vertices[1].UV = FVector2D(0.0f, 1.0f); Vertices[2].UV = FVector2D(1.0f, 0.0f); Vertices[3].UV = FVector2D(0.0f, 0.0f);
//UnlockBuffer ,用于解锁先前使用RHILockVertexBuffer函数锁定的顶点缓冲区,以便将其重新提交给GPU进行渲染。 RHIUnlockVertexBuffer(VertexBufferRHI);
//设置VertexBuffer RHICmdList.SetStreamSource(0, VertexBufferRHI, 0);
//IndexBuffer的绑定 //IndexBuffer写入 const TArray<uint32> Indices = {1, 3, 2, 0, 1, 2}; FRHIResourceCreateInfo IndexCreateInfo; FIndexBufferRHIRef IndexBufferRHI = RHICreateIndexBuffer(sizeof(uint32), Indices.Num() * sizeof(uint32), BUF_Static, IndexCreateInfo);
//拷贝IndexBuffer,还是先lock,然后CPU修改,再unlock void* IndexBufferData = RHILockIndexBuffer(IndexBufferRHI, 0, Indices.Num() * sizeof(uint32), RLM_WriteOnly); FMemory::Memcpy(IndexBufferData, &Indices[0], Indices.Num() * sizeof(uint32)); RHIUnlockIndexBuffer(IndexBufferRHI);
//DrawCall的时候绑定IndexBuffer RHICmdList.DrawIndexedPrimitive(IndexBufferRHI, 0, 0, Indices.Num(), 0, Indices.Num() / 3, 1);
|