Indexed rendering
This commit is contained in:
parent
3701ab66dd
commit
607ee77703
|
@ -33,11 +33,14 @@ main :: proc() {
|
|||
{{-0.5, 0, 0}, {1, 0, 0}},
|
||||
{{0, 1.0, 0}, {0, 1, 0}},
|
||||
{{0.5, 0, 0}, {0, 0, 1}},
|
||||
{{0.5, 0, 0}, {1, 1, 0}},
|
||||
{{0, -0.5, 0}, {0, 1, 1}},
|
||||
{{-0.5, -0, 0}, {1, 0, 1}},
|
||||
}
|
||||
vertices_byte_size := len(vertices) * size_of(vertices[0])
|
||||
|
||||
indices := []u16{0, 1, 2, 0, 2, 3}
|
||||
indices_byte_size := len(indices) * size_of(indices[0])
|
||||
|
||||
|
||||
vertex_attrs := []sdl.GPUVertexAttribute {
|
||||
{location = 0, format = .FLOAT3, offset = 0}, // Position
|
||||
{location = 1, format = .FLOAT3, offset = size_of(Vec3)}, // Color
|
||||
|
@ -46,14 +49,21 @@ main :: proc() {
|
|||
gpu,
|
||||
sdl.GPUBufferCreateInfo{usage = {.VERTEX}, size = u32(vertices_byte_size)},
|
||||
)
|
||||
index_buf := sdl.CreateGPUBuffer(
|
||||
gpu,
|
||||
sdl.GPUBufferCreateInfo{usage = {.INDEX}, size = u32(indices_byte_size)},
|
||||
)
|
||||
|
||||
transfer_buf := sdl.CreateGPUTransferBuffer(
|
||||
gpu,
|
||||
sdl.GPUTransferBufferCreateInfo{usage = .UPLOAD, size = u32(vertices_byte_size)},
|
||||
sdl.GPUTransferBufferCreateInfo {
|
||||
usage = .UPLOAD,
|
||||
size = u32(vertices_byte_size + indices_byte_size),
|
||||
},
|
||||
)
|
||||
{ // Copy verticies to the transfer buffer
|
||||
|
||||
transfer_mem := sdl.MapGPUTransferBuffer(
|
||||
transfer_mem := transmute([^]byte)sdl.MapGPUTransferBuffer(
|
||||
gpu,
|
||||
transfer_buf,
|
||||
false,
|
||||
|
@ -61,6 +71,7 @@ main :: proc() {
|
|||
defer sdl.UnmapGPUTransferBuffer(gpu, transfer_buf)
|
||||
|
||||
mem.copy(transfer_mem, raw_data(vertices), vertices_byte_size)
|
||||
mem.copy(transfer_mem[vertices_byte_size:], raw_data(indices), indices_byte_size)
|
||||
}
|
||||
|
||||
{ // Upload buffer to gpu
|
||||
|
@ -75,6 +86,12 @@ main :: proc() {
|
|||
{buffer = vertex_buf, size = u32(vertices_byte_size)},
|
||||
false,
|
||||
)
|
||||
sdl.UploadToGPUBuffer(
|
||||
copy_pass,
|
||||
{transfer_buffer = transfer_buf, offset = u32(vertices_byte_size)},
|
||||
{buffer = index_buf, size = u32(indices_byte_size)},
|
||||
false,
|
||||
)
|
||||
}
|
||||
sdl.ReleaseGPUTransferBuffer(gpu, transfer_buf)
|
||||
|
||||
|
@ -136,9 +153,6 @@ main :: proc() {
|
|||
if ev.key.scancode == .ESCAPE do break loop
|
||||
}
|
||||
}
|
||||
cmd_buf := sdl.AcquireGPUCommandBuffer(gpu)
|
||||
swaptex: ^sdl.GPUTexture
|
||||
ok = sdl.WaitAndAcquireGPUSwapchainTexture(cmd_buf, window, &swaptex, nil, nil);assert(ok)
|
||||
|
||||
rotation += 1 * delta
|
||||
|
||||
|
@ -147,6 +161,11 @@ main :: proc() {
|
|||
linalg.matrix4_rotate_f32(rotation, {0, 1, 0})
|
||||
ubo := UBO{proj * model_mat}
|
||||
|
||||
|
||||
cmd_buf := sdl.AcquireGPUCommandBuffer(gpu)
|
||||
swaptex: ^sdl.GPUTexture
|
||||
ok = sdl.WaitAndAcquireGPUSwapchainTexture(cmd_buf, window, &swaptex, nil, nil);assert(ok)
|
||||
|
||||
if swaptex != nil {
|
||||
color_target := sdl.GPUColorTargetInfo {
|
||||
texture = swaptex,
|
||||
|
@ -163,8 +182,10 @@ main :: proc() {
|
|||
&(sdl.GPUBufferBinding{buffer = vertex_buf}),
|
||||
1,
|
||||
)
|
||||
sdl.BindGPUIndexBuffer(render_pass, {buffer = index_buf}, ._16BIT)
|
||||
sdl.PushGPUVertexUniformData(cmd_buf, 0, &ubo, size_of(ubo))
|
||||
sdl.DrawGPUPrimitives(render_pass, u32(len(vertices)), 1, 0, 0)
|
||||
// sdl.DrawGPUPrimitives(render_pass, u32(len(vertices)), 1, 0, 0)
|
||||
sdl.DrawGPUIndexedPrimitives(render_pass, 6, 1, 0, 0, 0)
|
||||
sdl.EndGPURenderPass(render_pass)
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue