// File: /workspace/github_c_makefile_star2_O2/adelciotto[P]plasma/src/cube_plasma.c
// Function: DrawFrame
void DrawFrame(double elapsedTimeSecs) {
    float camX = 0.0f;
    float camY = 0.0f;
    float camZ = 1.5f + Min(sinf(elapsedTimeSecs * PI / 4.0) +
                                cosf(elapsedTimeSecs * 0.5f * PI / 4.0) +
                                sinf(elapsedTimeSecs * 0.2f * PI / 6.0),
                            0.5);

    Mat4LookAt((Vec3){camX, camY, camZ}, (Vec3){0.0f, 0.0f, 0.0f},
               (Vec3){0.0f, 1.0f, 0.0f}, gView);

    Mat4 identity = MAT4_IDENTITY_INIT;
    Mat4 transform = MAT4_IDENTITY_INIT;
    float t = elapsedTimeSecs * 0.5;
    Mat4RotateZ(identity, transform, sinf(t * PI / 2.0) + sinf(t * PI / 6.0));

    Mat4 out;
    Mat4RotateX(transform, out, cosf(t * PI / 2.0));

    Mat4 outA;
    Mat4RotateY(out, outA, sinf(t * PI / 4.0) + cosf(t * PI / 2.0));

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(gProgramId);

    glUniformMatrix4fv(gUniformModelLocation, 1, GL_FALSE, outA);
    glUniformMatrix4fv(gUniformViewLocation, 1, GL_FALSE, gView);
    glUniformMatrix4fv(gUniformProjectionLocation, 1, GL_FALSE, gProj);
    glUniform3f(gUniformViewPositionLocation, camX, camY, camZ);
    glUniform1f(gUniformScaleLocation, 20.0f);
    glUniform1f(gUniformTimeLocation, elapsedTimeSecs);

    glDrawArrays(GL_TRIANGLES, 0, 36);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x180, %rsp            # imm = 0x180
movsd %xmm0, 0x28(%rsp)
movapd %xmm0, %xmm1
mulsd 0x1450(%rip), %xmm1     # 0x4058
mulsd 0x1450(%rip), %xmm1     # 0x4060
cvtsd2ss %xmm1, %xmm0
callq 0x2030
movss %xmm0, 0x10(%rsp)
movsd 0x28(%rsp), %xmm1
mulsd 0x143b(%rip), %xmm1     # 0x4068
movsd %xmm1, 0x20(%rsp)
movapd %xmm1, %xmm0
mulsd 0x1419(%rip), %xmm0     # 0x4058
mulsd 0x1419(%rip), %xmm0     # 0x4060
cvtsd2ss %xmm0, %xmm0
callq 0x21a0
addss 0x10(%rsp), %xmm0
movss %xmm0, 0x10(%rsp)
movsd 0x140c(%rip), %xmm0     # 0x4070
mulsd 0x28(%rsp), %xmm0
mulsd 0x13e6(%rip), %xmm0     # 0x4058
divsd 0x13fe(%rip), %xmm0     # 0x4078
cvtsd2ss %xmm0, %xmm0
callq 0x2030
addss 0x10(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x13d2(%rip), %xmm13    # 0x4068
maxsd %xmm13, %xmm0
addsd 0x13dd(%rip), %xmm0     # 0x4080
cvtsd2ss %xmm0, %xmm1
xorps %xmm8, %xmm8
xorps %xmm0, %xmm0
subss %xmm1, %xmm0
movaps %xmm1, %xmm11
movaps %xmm0, %xmm1
mulss %xmm0, %xmm1
addss %xmm8, %xmm1
sqrtss %xmm1, %xmm1
xorps %xmm6, %xmm6
divss %xmm1, %xmm6
divss %xmm1, %xmm0
movaps 0x1368(%rip), %xmm3     # 0x4040
movaps %xmm0, %xmm4
xorps %xmm3, %xmm4
movaps %xmm6, %xmm1
mulss %xmm8, %xmm1
movaps %xmm1, %xmm2
subss %xmm0, %xmm2
movaps %xmm6, %xmm7
xorps %xmm3, %xmm7
movaps %xmm3, %xmm12
movss 0x1395(%rip), %xmm3     # 0x4094
mulss %xmm6, %xmm3
movaps %xmm0, %xmm5
mulss %xmm8, %xmm5
addss %xmm3, %xmm5
addss %xmm6, %xmm3
movaps %xmm5, %xmm8
mulss %xmm5, %xmm8
movaps %xmm2, %xmm9
mulss %xmm2, %xmm9
addss %xmm8, %xmm9
movaps %xmm3, %xmm8
mulss %xmm3, %xmm8
addss %xmm9, %xmm8
sqrtss %xmm8, %xmm8
divss %xmm8, %xmm2
divss %xmm8, %xmm5
divss %xmm8, %xmm3
movaps %xmm5, %xmm8
mulss %xmm0, %xmm8
movaps %xmm3, %xmm9
mulss %xmm6, %xmm9
subss %xmm9, %xmm8
movaps %xmm0, %xmm10
mulss %xmm2, %xmm10
subss %xmm10, %xmm9
movaps %xmm2, %xmm10
mulss %xmm6, %xmm10
mulss %xmm5, %xmm6
subss %xmm6, %xmm10
movss %xmm2, 0x3405(%rip)     # 0x6190
movss %xmm8, 0x3400(%rip)     # 0x6194
movss %xmm7, 0x33fc(%rip)     # 0x6198
movss %xmm5, 0x33fc(%rip)     # 0x61a0
movss %xmm9, 0x33f7(%rip)     # 0x61a4
movss %xmm7, 0x33f3(%rip)     # 0x61a8
movss %xmm3, 0x33f3(%rip)     # 0x61b0
movss %xmm10, 0x33ee(%rip)    # 0x61b4
movss %xmm4, 0x33ea(%rip)     # 0x61b8
unpcklps %xmm9, %xmm5            # xmm5 = xmm5[0],xmm9[0],xmm5[1],xmm9[1]
xorps %xmm4, %xmm4
mulps %xmm4, %xmm5
unpcklps %xmm8, %xmm2            # xmm2 = xmm2[0],xmm8[0],xmm2[1],xmm8[1]
mulps %xmm4, %xmm2
addps %xmm5, %xmm2
unpcklps %xmm10, %xmm3           # xmm3 = xmm3[0],xmm10[0],xmm3[1],xmm10[1]
movaps %xmm11, 0x30(%rsp)
movaps %xmm11, %xmm4
unpcklps %xmm11, %xmm4           # xmm4 = xmm4[0],xmm11[0],xmm4[1],xmm11[1]
mulps %xmm3, %xmm4
addps %xmm2, %xmm4
xorps %xmm12, %xmm4
movlps %xmm4, 0x33bb(%rip)     # 0x61c0
addss %xmm1, %xmm1
mulss %xmm11, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x33ae(%rip)     # 0x61c8
andl $0x0, 0x339b(%rip)      # 0x61bc
andl $0x0, 0x3384(%rip)      # 0x61ac
andl $0x0, 0x336d(%rip)      # 0x619c
leaq 0x335a(%rip), %rbx      # 0x6190
movl $0x3f800000, %ebp       # imm = 0x3F800000
movl %ebp, 0x338b(%rip)      # 0x61cc
leaq 0x140(%rsp), %r15
xorps %xmm0, %xmm0
movaps %xmm0, (%r15)
movaps %xmm0, 0x10(%r15)
movaps %xmm0, 0x20(%r15)
movaps %xmm0, 0x30(%r15)
movl %ebp, (%r15)
movl %ebp, 0x14(%r15)
movl %ebp, 0x28(%r15)
movl %ebp, 0x3c(%r15)
leaq 0x100(%rsp), %r14
movaps %xmm0, (%r14)
movaps %xmm0, 0x10(%r14)
movaps %xmm0, 0x20(%r14)
movaps %xmm0, 0x30(%r14)
movl %ebp, (%r14)
movl %ebp, 0x14(%r14)
movl %ebp, 0x28(%r14)
movl %ebp, 0x3c(%r14)
cvtsd2ss 0x20(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
mulsd 0x11ae(%rip), %xmm1     # 0x4058
movsd %xmm1, 0x10(%rsp)
movapd %xmm13, %xmm0
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x20(%rsp)
callq 0x2030
movss %xmm0, 0xc(%rsp)
movsd 0x10(%rsp), %xmm0
divsd 0x119c(%rip), %xmm0     # 0x4078
cvtsd2ss %xmm0, %xmm0
callq 0x2030
addss 0xc(%rsp), %xmm0
movss %xmm0, 0x1c(%rsp)
leaq 0x40(%rsp), %r12
xorpd %xmm1, %xmm1
movapd %xmm1, 0x20(%r12)
movapd %xmm1, 0x30(%r12)
movapd %xmm1, 0x10(%r12)
movapd %xmm1, (%r12)
movl %ebp, 0x28(%r12)
movl %ebp, 0x3c(%r12)
callq 0x21a0
movss %xmm0, 0xc(%rsp)
movss 0x1c(%rsp), %xmm0
callq 0x2030
movss 0xc(%rsp), %xmm1
movss %xmm1, (%r12)
movss %xmm0, 0x4(%r12)
xorps 0x10f1(%rip), %xmm0     # 0x4040
movss %xmm0, 0x10(%r12)
movss %xmm1, 0x14(%r12)
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x34f0
movss 0x20(%rsp), %xmm0
callq 0x21a0
movss %xmm0, 0x1c(%rsp)
xorps %xmm1, %xmm1
movaps %xmm1, (%r12)
movaps %xmm1, 0x30(%r12)
movaps %xmm1, 0x20(%r12)
movaps %xmm1, 0x10(%r12)
movl %ebp, (%r12)
movl %ebp, 0x3c(%r12)
callq 0x21a0
movss %xmm0, 0xc(%rsp)
movss 0x1c(%rsp), %xmm0
callq 0x2030
movss 0xc(%rsp), %xmm1
movss %xmm1, 0x14(%r12)
movss %xmm0, 0x18(%r12)
xorps 0x1070(%rip), %xmm0     # 0x4040
movss %xmm0, 0x24(%r12)
movss %xmm1, 0x28(%r12)
leaq 0x40(%rsp), %r12
leaq 0xc0(%rsp), %r15
movq %r14, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x34f0
movsd 0x10(%rsp), %xmm0
mulsd 0x1059(%rip), %xmm0     # 0x4060
cvtsd2ss %xmm0, %xmm0
callq 0x2030
movss %xmm0, 0x10(%rsp)
movss 0x20(%rsp), %xmm0
callq 0x21a0
addss 0x10(%rsp), %xmm0
movss %xmm0, 0x10(%rsp)
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%r12)
movaps %xmm1, 0x30(%r12)
movaps %xmm1, 0x20(%r12)
movaps %xmm1, (%r12)
movl %ebp, 0x14(%r12)
movl %ebp, 0x3c(%r12)
callq 0x21a0
movss %xmm0, 0x20(%rsp)
movss 0x10(%rsp), %xmm0
callq 0x2030
movss 0x20(%rsp), %xmm2
movss %xmm2, (%r12)
movaps 0xfc6(%rip), %xmm1      # 0x4040
xorps %xmm0, %xmm1
movss %xmm1, 0x8(%r12)
movss %xmm0, 0x20(%r12)
movss %xmm2, 0x28(%r12)
leaq 0x40(%rsp), %rsi
leaq 0x80(%rsp), %r14
movq %r15, %rdi
movq %r14, %rdx
callq 0x34f0
movss 0xfe6(%rip), %xmm3      # 0x4098
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
xorps %xmm2, %xmm2
callq 0x2070
movl $0x4100, %edi           # imm = 0x4100
callq 0x2180
movq 0x2f1f(%rip), %rax      # 0x5ff0
movl 0x3129(%rip), %edi      # 0x6200
callq *(%rax)
movq 0x2e40(%rip), %r15      # 0x5f20
movl 0x3092(%rip), %edi      # 0x6178
pushq $0x1
popq %rbp
movl %ebp, %esi
xorl %edx, %edx
movq %r14, %rcx
callq *(%r15)
movl 0x3083(%rip), %edi      # 0x617c
movl %ebp, %esi
xorl %edx, %edx
movq %rbx, %rcx
callq *(%r15)
movl 0x3077(%rip), %edi      # 0x6180
leaq 0x3100(%rip), %rcx      # 0x6210
movl %ebp, %esi
xorl %edx, %edx
callq *(%r15)
movq 0x2e6a(%rip), %rax      # 0x5f88
movl 0x3060(%rip), %edi      # 0x6184
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
movaps 0x30(%rsp), %xmm2
callq *(%rax)
movq 0x2e40(%rip), %rbx      # 0x5f78
movl 0x3036(%rip), %edi      # 0x6174
movss 0xf56(%rip), %xmm0      # 0x409c
callq *(%rbx)
movl 0x3022(%rip), %edi      # 0x6170
cvtsd2ss 0x28(%rsp), %xmm0
callq *(%rbx)
pushq $0x4
popq %rdi
pushq $0x24
popq %rdx
xorl %esi, %esi
callq 0x2240
addq $0x180, %rsp            # imm = 0x180
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq