• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2010 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 
11 #ifndef GrGpuVertex_DEFINED
12 #define GrGpuVertex_DEFINED
13 
14 #include "gl/GrGLConfig.h"
15 #include "GrPoint.h"
16 
17 #if GR_TEXT_SCALAR_IS_USHORT
18     typedef uint16_t                GrTextScalar;
19     #define GrIntToTextScalar(x)    ((uint16_t)x)
20     #define GrFixedToTextScalar(x)  (x)
21 #elif GR_TEXT_SCALAR_IS_FIXED
22     typedef GrFixed                 GrTextScalar;
23     #define GrIntToTextScalar(x)    SkIntToFixed(x)
24     #define GrFixedToTextScalar(x)  (x)
25 #elif GR_TEXT_SCALAR_IS_FLOAT
26     typedef float                   GrTextScalar;
27     #define GrIntToTextScalar(x)    ((GrTextScalar)x)
28     #define GrFixedToTextScalar(x)  SkFixedToFloat(x)
29 #else
30     #error "Text scalar type not defined"
31 #endif
32 
33 // text has its own vertex class, since it may want to be in fixed point (given)
34 // that it starts with all integers) even when the default vertices are floats
35 struct GrGpuTextVertex {
36     GrTextScalar fX;
37     GrTextScalar fY;
38 
setGrGpuTextVertex39     void set(GrTextScalar x, GrTextScalar y) {
40         fX = x;
41         fY = y;
42     }
43 
setIGrGpuTextVertex44     void setI(int x, int y) {
45         fX = GrIntToTextScalar(x);
46         fY = GrIntToTextScalar(y);
47     }
48 
setXGrGpuTextVertex49     void setX(GrFixed x, GrFixed y) {
50         fX = GrFixedToTextScalar(x);
51         fY = GrFixedToTextScalar(y);
52     }
53 
54     // rect fan is counter-clockwise
55 
setRectFanGrGpuTextVertex56     void setRectFan(GrTextScalar l, GrTextScalar t, GrTextScalar r,
57                     GrTextScalar b) {
58         GrGpuTextVertex* v = this;
59         v[0].set(l, t);
60         v[1].set(l, b);
61         v[2].set(r, b);
62         v[3].set(r, t);
63     }
64 
setIRectFanGrGpuTextVertex65     void setIRectFan(int l, int t, int r, int b) {
66         this->setRectFan(GrIntToTextScalar(l), GrIntToTextScalar(t),
67                          GrIntToTextScalar(r), GrIntToTextScalar(b));
68     }
69 
setIRectFanGrGpuTextVertex70     void setIRectFan(int l, int t, int r, int b, size_t stride) {
71         GrAssert(stride > sizeof(GrGpuTextVertex));
72         char* v = (char*)this;
73         ((GrGpuTextVertex*)(v + 0*stride))->setI(l, t);
74         ((GrGpuTextVertex*)(v + 1*stride))->setI(l, b);
75         ((GrGpuTextVertex*)(v + 2*stride))->setI(r, b);
76         ((GrGpuTextVertex*)(v + 3*stride))->setI(r, t);
77     }
78 
79     // counter-clockwise fan
setXRectFanGrGpuTextVertex80     void setXRectFan(GrFixed l, GrFixed t, GrFixed r, GrFixed b) {
81         this->setRectFan(GrFixedToTextScalar(l), GrFixedToTextScalar(t),
82                          GrFixedToTextScalar(r), GrFixedToTextScalar(b));
83     }
84 
setXRectFanGrGpuTextVertex85     void setXRectFan(GrFixed l, GrFixed t, GrFixed r, GrFixed b, size_t stride) {
86         GrAssert(stride > sizeof(GrGpuTextVertex));
87         char* v = (char*)this;
88         ((GrGpuTextVertex*)(v + 0*stride))->setX(l, t);
89         ((GrGpuTextVertex*)(v + 1*stride))->setX(l, b);
90         ((GrGpuTextVertex*)(v + 2*stride))->setX(r, b);
91         ((GrGpuTextVertex*)(v + 3*stride))->setX(r, t);
92     }
93 
94 };
95 
96 #endif
97