I know, but you still haven't addressed the actual issue.  Let me try to lay it out...

`view3D` and `viewRotation3D` are analogous to `view` and `viewRotation`.  `view` and `viewRotation` don't use dirty flags.  So `getViewRotation` looks like this:

```javascript
    UniformState.prototype.getViewRotation = function() {
        return this._viewRotation;
    };
```

This works because `_viewRotation` is computed in `setView` immediately after `_view` is computed.

Now let's look at the `viewRotation3D` case.  Here, we presumably want `view3D` to have a dirty flag, because it's expensive-ish in 2D and Columbus View.  That means we can't compute it in `setView` like we do `view`, and therefore we can't compute `_viewRotation3D` there either.  And that in turn means that `getViewRotation3D` can't look like this:

```javascript
    UniformState.prototype.getViewRotation3D = function() {
        return this._viewRotation3D;
    };
```

because `_viewRotation3D` is not guaranteed to be computed.  Instead, we'd have to call `getView3D` every time and then copy the 3x3 matrix into `_viewRotation3D` before returning it.  Originally I was thinking we'd have to do this copy every time, but actually we can just do it inside `getView3D` when updating `_view3D`, so that's not too bad.  I'm guessing this is what you had in mind?

The only other approach I can think of is to eliminate the dirty flag from `view3D`, too, making it similar to `view`.  That might be reasonable - I don't have a really solid sense of the tradeoffs there.