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