Skip to content

atan2 is implemented as atan(y/x) in gpu backend #647

Open
@danbgoldman

Description

@danbgoldman

slow down egghead

What is wrong?

atan2 should return values from -pi to pi, but instead returns values from -pi/2 to pi/2 in gpu mode. It also returns undefined results for x=0.

Where does it happen?

In Chrome browser.

How do we replicate the issue?

I'm attaching a repro case - correct behavior can be seen in mode:cpu, incorrect behavior in mode:gpu.

atan2-bug.zip

How important is this (1-5)?

3 - I can work around, but also should be an easy fix.

Expected behavior (i.e. solution)

The backend GLSL implementations of atan2 use the single-argument version of atan(y_over_x), instead of the two-argument version atan(y, x).

Activity

harshkhandeparkar

harshkhandeparkar commented on Nov 21, 2020

@harshkhandeparkar

https://tc39.es/ecma262/#sec-math.atan2

The spec for atan2 is pretty sophisticated and long...
Does GLSL have an atan2 already?

danbgoldman

danbgoldman commented on Nov 21, 2020

@danbgoldman
Author

IIUC, GLSL atan is overloaded to take both 1 argument (like Math.atan) and 2 arguments (like Math.atan2). AFAIK the second implementation is identical to C/javascript.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/atan.xhtml

ted-piotrowski

ted-piotrowski commented on Mar 23, 2021

@ted-piotrowski

Can confirm that pull request fixes supplied repro case.

Screenshot 2021-03-23 at 13 41 18

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @ted-piotrowski@danbgoldman@harshkhandeparkar

      Issue actions

        atan2 is implemented as atan(y/x) in gpu backend · Issue #647 · gpujs/gpu.js