Panda3D
 All Classes Functions Variables Enumerations
texturePeeker.h
1 // Filename: texturePeeker.h
2 // Created by: drose (26Aug08)
3 //
4 ////////////////////////////////////////////////////////////////////
5 //
6 // PANDA 3D SOFTWARE
7 // Copyright (c) Carnegie Mellon University. All rights reserved.
8 //
9 // All use of this software is subject to the terms of the revised BSD
10 // license. You should have received a copy of this license along
11 // with this source code in a file named "LICENSE."
12 //
13 ////////////////////////////////////////////////////////////////////
14 
15 #ifndef TEXTUREPEEKER_H
16 #define TEXTUREPEEKER_H
17 
18 #include "pandabase.h"
19 
20 #include "referenceCount.h"
21 #include "texture.h"
22 
23 ////////////////////////////////////////////////////////////////////
24 // Class : TexturePeeker
25 // Description : An instance of this object is returned by
26 // Texture::peek(). This object allows quick and easy
27 // inspection of a texture's texels by (u, v)
28 // coordinates.
29 ////////////////////////////////////////////////////////////////////
30 class EXPCL_PANDA_GOBJ TexturePeeker : public ReferenceCount {
31 private:
32  TexturePeeker(Texture *tex, Texture::CData *cdata);
33 
34 public:
35  INLINE bool is_valid() const;
36 
37 PUBLISHED:
38  INLINE int get_x_size() const;
39  INLINE int get_y_size() const;
40  INLINE int get_z_size() const;
41 
42  void lookup(LColor &color, PN_stdfloat u, PN_stdfloat v) const;
43  void lookup(LColor &color, PN_stdfloat u, PN_stdfloat v, PN_stdfloat w) const;
44  void filter_rect(LColor &color,
45  PN_stdfloat min_u, PN_stdfloat min_v,
46  PN_stdfloat max_u, PN_stdfloat max_v) const;
47  void filter_rect(LColor &color,
48  PN_stdfloat min_u, PN_stdfloat min_v, PN_stdfloat min_w,
49  PN_stdfloat max_u, PN_stdfloat max_v, PN_stdfloat max_w) const;
50 
51 private:
52  static void init_rect_minmax(int &min_x, int &max_x,
53  PN_stdfloat &min_u, PN_stdfloat &max_u,
54  int x_size);
55 
56  void accum_filter_z(LColor &color, PN_stdfloat &net,
57  int min_x, int max_x, PN_stdfloat min_u, PN_stdfloat max_u,
58  int min_y, int max_y, PN_stdfloat min_v, PN_stdfloat max_v,
59  int min_z, int max_z, PN_stdfloat min_w, PN_stdfloat max_w) const;
60  void accum_filter_y(LColor &color, PN_stdfloat &net, int zi,
61  int min_x, int max_x, PN_stdfloat min_u, PN_stdfloat max_u,
62  int min_y, int max_y, PN_stdfloat min_v, PN_stdfloat max_v,
63  PN_stdfloat weight) const;
64  void accum_filter_x(LColor &color, PN_stdfloat &net, int yi, int zi,
65  int min_x, int max_x, PN_stdfloat min_u, PN_stdfloat max_u,
66  PN_stdfloat weight) const;
67  void accum_texel(LColor &color, PN_stdfloat &net, const unsigned char *&p,
68  PN_stdfloat weight) const;
69 
70  typedef double GetComponentFunc(const unsigned char *&p);
71  typedef void GetTexelFunc(LColor &color, const unsigned char *&p,
72  GetComponentFunc *get_component);
73 
74  static void get_texel_r(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
75  static void get_texel_g(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
76  static void get_texel_b(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
77  static void get_texel_a(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
78  static void get_texel_l(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
79  static void get_texel_la(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
80  static void get_texel_rgb(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
81  static void get_texel_rgba(LColor &color, const unsigned char *&p, GetComponentFunc *get_component);
82 
83  int _x_size;
84  int _y_size;
85  int _z_size;
86  int _component_width;
87  int _num_components;
88  int _pixel_width;
89  Texture::Format _format;
90  Texture::ComponentType _component_type;
91  CPTA_uchar _image;
92 
93  GetComponentFunc *_get_component;
94  GetTexelFunc *_get_texel;
95 
96  friend class Texture;
97 };
98 
99 #include "texturePeeker.I"
100 
101 #endif
102 
Represents a texture object, which is typically a single 2-d image but may also represent a 1-d or 3-...
Definition: texture.h:75
An instance of this object is returned by Texture::peek().
Definition: texturePeeker.h:30
This is the base class for all three-component vectors and points.
Definition: lvecBase4.h:111
A base class for all things that want to be reference-counted.