• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* libs/graphics/animator/SkDraw3D.cpp
2 **
3 ** Copyright 2006, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #include "SkDraw3D.h"
19 #include "SkAnimateMaker.h"
20 #include "SkCanvas.h"
21 #include "SkTypedArray.h"
22 
23 #if SK_USE_CONDENSED_INFO == 0
24 
25 const SkMemberInfo Sk3D_Point::fInfo[] = {
26     SK_MEMBER_ALIAS(x, fPoint.fX, Float),
27     SK_MEMBER_ALIAS(y, fPoint.fY, Float),
28     SK_MEMBER_ALIAS(z, fPoint.fZ, Float)
29 };
30 
31 #endif
32 
33 DEFINE_NO_VIRTUALS_GET_MEMBER(Sk3D_Point);
34 
Sk3D_Point()35 Sk3D_Point::Sk3D_Point() {
36     fPoint.set(0, 0, 0);
37 }
38 
39 #if SK_USE_CONDENSED_INFO == 0
40 
41 const SkMemberInfo Sk3D_Camera::fInfo[] = {
42     SK_MEMBER_ALIAS(axis, fCamera.fAxis, 3D_Point),
43     SK_MEMBER(hackHeight, Float),
44     SK_MEMBER(hackWidth, Float),
45     SK_MEMBER_ALIAS(location, fCamera.fLocation, 3D_Point),
46     SK_MEMBER_ALIAS(observer, fCamera.fObserver, 3D_Point),
47     SK_MEMBER(patch, 3D_Patch),
48     SK_MEMBER_ALIAS(zenith, fCamera.fZenith, 3D_Point),
49 };
50 
51 #endif
52 
53 DEFINE_GET_MEMBER(Sk3D_Camera);
54 
Sk3D_Camera()55 Sk3D_Camera::Sk3D_Camera() : hackWidth(0), hackHeight(0), patch(NULL) {
56 }
57 
~Sk3D_Camera()58 Sk3D_Camera::~Sk3D_Camera() {
59 }
60 
draw(SkAnimateMaker & maker)61 bool Sk3D_Camera::draw(SkAnimateMaker& maker) {
62     fCamera.update();
63     SkMatrix matrix;
64     fCamera.patchToMatrix(patch->fPatch, &matrix);
65     matrix.preTranslate(hackWidth / 2, -hackHeight / 2);
66     matrix.postTranslate(hackWidth / 2, hackHeight / 2);
67     maker.fCanvas->concat(matrix);
68     return false;
69 }
70 
71 
72 enum Sk3D_Patch_Functions {
73     SK_FUNCTION(rotateDegrees)
74 };
75 
76 const SkFunctionParamType Sk3D_Patch::fFunctionParameters[] = {
77     (SkFunctionParamType) SkType_Float,
78     (SkFunctionParamType) SkType_Float,
79     (SkFunctionParamType) SkType_Float,
80     (SkFunctionParamType) 0 // terminator for parameter list (there may be multiple parameter lists)
81 };
82 
83 #if SK_USE_CONDENSED_INFO == 0
84 
85 const SkMemberInfo Sk3D_Patch::fInfo[] = {
86     SK_MEMBER_ALIAS(origin, fPatch.fOrigin, 3D_Point),
87     SK_MEMBER_FUNCTION(rotateDegrees, Float),
88     SK_MEMBER_ALIAS(u, fPatch.fU, 3D_Point),
89     SK_MEMBER_ALIAS(v, fPatch.fV, 3D_Point)
90 };
91 
92 #endif
93 
94 DEFINE_GET_MEMBER(Sk3D_Patch);
95 
executeFunction(SkDisplayable * target,int index,SkTDArray<SkScriptValue> & parameters,SkDisplayTypes type,SkScriptValue *)96 void Sk3D_Patch::executeFunction(SkDisplayable* target, int index,
97         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
98         SkScriptValue* ) {
99     SkASSERT(target == this);
100     switch (index) {
101         case SK_FUNCTION(rotateDegrees):
102             SkASSERT(parameters.count() == 3);
103             SkASSERT(type == SkType_Float);
104             fPatch.rotateDegrees(parameters[0].fOperand.fScalar,
105                 parameters[1].fOperand.fScalar, parameters[2].fOperand.fScalar);
106             break;
107         default:
108             SkASSERT(0);
109     }
110 }
111 
getFunctionsParameters()112 const SkFunctionParamType* Sk3D_Patch::getFunctionsParameters() {
113     return fFunctionParameters;
114 }
115 
116 
117 
118