// File: /workspace/github_c_makefile_star2_O0/AlexCharlton[P]Hyperscene/src/camera.c
// Function: hpsMakeCamera
HPScamera *hpsMakeCamera(HPScameraType type, HPScameraStyle style, HPSscene *scene, float width, float height){
    HPScamera *camera = malloc(sizeof(struct camera));
    camera->n = HPS_DEFAULT_NEAR_PLANE;
    camera->f = HPS_DEFAULT_FAR_PLANE;
    camera->viewAngle = HPS_DEFAULT_VIEW_ANGLE;
    camera->position.x = 0.0;
    camera->position.y = 0.0;
    camera->position.z = 0.0;
    camera->up.x = 0.0;
    camera->up.y = 1.0;
    camera->up.z = 0.0;
    camera->object.x = 0.0;
    camera->object.y = 0.0;
    camera->object.z = 0.0;
    camera->rotation.x = 0;
    camera->rotation.y = 0;
    camera->rotation.z = 0;
    camera->rotation.w = 1;
    camera->vw = width; camera->vh = height;
    camera->vwRatio = 1.0; camera->vhRatio = 1.0;
    camera->vl = -1.0; camera->vr = 1.0;
    camera->vb = -1.0; camera->vt = 1.0;
    camera->vx = 0.0; camera->vy = 0.0;
    camera->viewportIsStatic = false;
    if (type == HPS_ORTHO)
        camera->update = &hpsOrthoCamera;
    else
        camera->update = &hpsPerspectiveCamera;
    camera->style = style;
    camera->scene = scene;
    hpsPush(&cameraList, (void *) camera);
    hpsPush(&activeCameras, (void *) camera);
    camera->update(camera);
    return camera;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movq %rdx, -0x10(%rbp)
movss %xmm0, -0x14(%rbp)
movss %xmm1, -0x18(%rbp)
movl $0x1e8, %edi            # imm = 0x1E8
callq 0x4300
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movss 0x2e8a(%rip), %xmm0     # 0xf030
movss %xmm0, 0x30(%rax)
movq -0x20(%rbp), %rax
movss 0x2f55(%rip), %xmm0     # 0xf10c
movss %xmm0, 0x34(%rax)
movq -0x20(%rbp), %rax
movss 0x2f40(%rip), %xmm0     # 0xf108
movss %xmm0, 0x38(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0xc(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x10(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x14(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x18(%rax)
movq -0x20(%rbp), %rax
movss 0x2e27(%rip), %xmm0     # 0xf030
movss %xmm0, 0x1c(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x20(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x24(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x28(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x2c(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x68(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x6c(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x70(%rax)
movq -0x20(%rbp), %rax
movss 0x2dc2(%rip), %xmm0     # 0xf030
movss %xmm0, 0x74(%rax)
movss -0x14(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x3c(%rax)
movss -0x18(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x40(%rax)
movq -0x20(%rbp), %rax
movss 0x2d95(%rip), %xmm0     # 0xf030
movss %xmm0, 0x44(%rax)
movq -0x20(%rbp), %rax
movss 0x2d84(%rip), %xmm0     # 0xf030
movss %xmm0, 0x48(%rax)
movq -0x20(%rbp), %rax
movss 0x2d7b(%rip), %xmm0     # 0xf038
movss %xmm0, 0x4c(%rax)
movq -0x20(%rbp), %rax
movss 0x2d62(%rip), %xmm0     # 0xf030
movss %xmm0, 0x50(%rax)
movq -0x20(%rbp), %rax
movss 0x2d59(%rip), %xmm0     # 0xf038
movss %xmm0, 0x54(%rax)
movq -0x20(%rbp), %rax
movss 0x2d40(%rip), %xmm0     # 0xf030
movss %xmm0, 0x58(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x5c(%rax)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x60(%rax)
movq -0x20(%rbp), %rax
movb $0x0, 0x64(%rax)
cmpl $0x0, -0x4(%rbp)
jne 0xc32f
movq -0x20(%rbp), %rax
leaq 0x7a(%rip), %rcx        # 0xc3a0
movq %rcx, 0x1d8(%rax)
jmp 0xc341
movq -0x20(%rbp), %rax
leaq 0x196(%rip), %rcx       # 0xc4d0
movq %rcx, 0x1d8(%rax)
movl -0x8(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rsi
leaq 0x724f(%rip), %rdi      # 0x135b0
callq 0x4320
movq -0x20(%rbp), %rsi
leaq 0x725f(%rip), %rdi      # 0x135d0
callq 0x4320
movq -0x20(%rbp), %rax
movq 0x1d8(%rax), %rax
movq -0x20(%rbp), %rdi
callq *%rax
movq -0x20(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)