1/*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8// Inspired by Rob Johnson's most excellent QuickDraw GX sample code
9
10#ifndef SkCamera_DEFINED
11#define SkCamera_DEFINED
12
13#include "include/core/SkM44.h"
14#include "include/core/SkMatrix.h"
15#include "include/private/SkNoncopyable.h"
16
17// NOTE -- This entire header / impl is deprecated, and will be removed from Skia soon.
18//
19// Skia now has support for a 4x matrix (SkM44) in SkCanvas.
20//
21
22class SkCanvas;
23
24// DEPRECATED
25class SkPatch3D {
26public:
27 SkPatch3D();
28
29 void reset();
30 void transform(const SkM44&, SkPatch3D* dst = nullptr) const;
31
32 // dot a unit vector with the patch's normal
33 SkScalar dotWith(SkScalar dx, SkScalar dy, SkScalar dz) const;
34 SkScalar dotWith(const SkV3& v) const {
35 return this->dotWith(v.x, v.y, v.z);
36 }
37
38 // deprecated, but still here for animator (for now)
39 void rotate(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {}
40 void rotateDegrees(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {}
41
42private:
43public: // make public for SkDraw3D for now
44 SkV3 fU, fV;
45 SkV3 fOrigin;
46
47 friend class SkCamera3D;
48};
49
50// DEPRECATED
51class SkCamera3D {
52public:
53 SkCamera3D();
54
55 void reset();
56 void update();
57 void patchToMatrix(const SkPatch3D&, SkMatrix* matrix) const;
58
59 SkV3 fLocation; // origin of the camera's space
60 SkV3 fAxis; // view direction
61 SkV3 fZenith; // up direction
62 SkV3 fObserver; // eye position (may not be the same as the origin)
63
64private:
65 mutable SkMatrix fOrientation;
66 mutable bool fNeedToUpdate;
67
68 void doUpdate() const;
69};
70
71// DEPRECATED
72class SK_API Sk3DView : SkNoncopyable {
73public:
74 Sk3DView();
75 ~Sk3DView();
76
77 void save();
78 void restore();
79
80 void translate(SkScalar x, SkScalar y, SkScalar z);
81 void rotateX(SkScalar deg);
82 void rotateY(SkScalar deg);
83 void rotateZ(SkScalar deg);
84
85#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
86 void setCameraLocation(SkScalar x, SkScalar y, SkScalar z);
87 SkScalar getCameraLocationX() const;
88 SkScalar getCameraLocationY() const;
89 SkScalar getCameraLocationZ() const;
90#endif
91
92 void getMatrix(SkMatrix*) const;
93 void applyToCanvas(SkCanvas*) const;
94
95 SkScalar dotWithNormal(SkScalar dx, SkScalar dy, SkScalar dz) const;
96
97private:
98 struct Rec {
99 Rec* fNext;
100 SkM44 fMatrix;
101 };
102 Rec* fRec;
103 Rec fInitialRec;
104 SkCamera3D fCamera;
105};
106
107#endif
108