• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
22 class SkCanvas;
23 
24 // DEPRECATED
25 class SkPatch3D {
26 public:
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;
dotWith(const SkV3 & v)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)
rotate(SkScalar,SkScalar,SkScalar)39     void rotate(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {}
rotateDegrees(SkScalar,SkScalar,SkScalar)40     void rotateDegrees(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {}
41 
42 private:
43 public: // make public for SkDraw3D for now
44     SkV3  fU, fV;
45     SkV3  fOrigin;
46 
47     friend class SkCamera3D;
48 };
49 
50 // DEPRECATED
51 class SkCamera3D {
52 public:
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 
64 private:
65     mutable SkMatrix    fOrientation;
66     mutable bool        fNeedToUpdate;
67 
68     void doUpdate() const;
69 };
70 
71 // DEPRECATED
72 class SK_API Sk3DView : SkNoncopyable {
73 public:
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 
97 private:
98     struct Rec {
99         Rec*    fNext;
100         SkM44   fMatrix;
101     };
102     Rec*        fRec;
103     Rec         fInitialRec;
104     SkCamera3D  fCamera;
105 };
106 
107 #endif
108