blob: 51a7d4d6b07741b0f9679269bd51253d3ef37f05 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * Copyright 2006 The Android Open Source Project
reed@android.com8a1c16f2008-12-17 15:59:43 +00003 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00004 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
reed@android.com8a1c16f2008-12-17 15:59:43 +00006 */
7
reed@android.com8a1c16f2008-12-17 15:59:43 +00008// Inspired by Rob Johnson's most excellent QuickDraw GX sample code
9
10#ifndef SkCamera_DEFINED
11#define SkCamera_DEFINED
12
Mike Reed4a9a2d12020-05-17 17:09:43 -040013#include "include/core/SkM44.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050014#include "include/core/SkMatrix.h"
15#include "include/private/SkNoncopyable.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000016
Mike Reed14f62de2020-04-14 11:35:40 -040017// 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
reed@android.com8a1c16f2008-12-17 15:59:43 +000022class SkCanvas;
23
Mike Reed14f62de2020-04-14 11:35:40 -040024// DEPRECATED
reed@android.com8a1c16f2008-12-17 15:59:43 +000025class SkPatch3D {
26public:
27 SkPatch3D();
28
29 void reset();
Mike Reed4a9a2d12020-05-17 17:09:43 -040030 void transform(const SkM44&, SkPatch3D* dst = nullptr) const;
reed@android.com8a1c16f2008-12-17 15:59:43 +000031
32 // dot a unit vector with the patch's normal
33 SkScalar dotWith(SkScalar dx, SkScalar dy, SkScalar dz) const;
Mike Reed4a9a2d12020-05-17 17:09:43 -040034 SkScalar dotWith(const SkV3& v) const {
35 return this->dotWith(v.x, v.y, v.z);
reed@android.com8a1c16f2008-12-17 15:59:43 +000036 }
37
robertphillips@google.comd4144062012-05-31 15:29:44 +000038 // deprecated, but still here for animator (for now)
djsollenc87dd2c2014-11-14 11:11:46 -080039 void rotate(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {}
40 void rotateDegrees(SkScalar /*x*/, SkScalar /*y*/, SkScalar /*z*/) {}
reed@android.com8a1c16f2008-12-17 15:59:43 +000041
42private:
43public: // make public for SkDraw3D for now
Mike Reed4a9a2d12020-05-17 17:09:43 -040044 SkV3 fU, fV;
45 SkV3 fOrigin;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000046
reed@android.com8a1c16f2008-12-17 15:59:43 +000047 friend class SkCamera3D;
48};
49
Mike Reed14f62de2020-04-14 11:35:40 -040050// DEPRECATED
reed@android.com8a1c16f2008-12-17 15:59:43 +000051class SkCamera3D {
52public:
53 SkCamera3D();
54
55 void reset();
56 void update();
57 void patchToMatrix(const SkPatch3D&, SkMatrix* matrix) const;
58
Mike Reed4a9a2d12020-05-17 17:09:43 -040059 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)
reed@android.com8a1c16f2008-12-17 15:59:43 +000063
64private:
65 mutable SkMatrix fOrientation;
66 mutable bool fNeedToUpdate;
67
68 void doUpdate() const;
69};
70
Mike Reed14f62de2020-04-14 11:35:40 -040071// DEPRECATED
Derek Sollenberger2fbf1bc2017-09-20 15:51:08 -040072class SK_API Sk3DView : SkNoncopyable {
reed@android.com8a1c16f2008-12-17 15:59:43 +000073public:
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
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -050085#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
djsollen@google.comcd9d69b2011-03-14 20:30:14 +000086 void setCameraLocation(SkScalar x, SkScalar y, SkScalar z);
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -050087 SkScalar getCameraLocationX() const;
88 SkScalar getCameraLocationY() const;
89 SkScalar getCameraLocationZ() const;
djsollen@google.comcd9d69b2011-03-14 20:30:14 +000090#endif
91
reed@android.com8a1c16f2008-12-17 15:59:43 +000092 void getMatrix(SkMatrix*) const;
93 void applyToCanvas(SkCanvas*) const;
94
95 SkScalar dotWithNormal(SkScalar dx, SkScalar dy, SkScalar dz) const;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000096
reed@android.com8a1c16f2008-12-17 15:59:43 +000097private:
98 struct Rec {
Mike Reed4a9a2d12020-05-17 17:09:43 -040099 Rec* fNext;
100 SkM44 fMatrix;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000101 };
102 Rec* fRec;
103 Rec fInitialRec;
104 SkCamera3D fCamera;
105};
106
107#endif