15 #ifndef GEOMVERTEXCOLUMN_H 16 #define GEOMVERTEXCOLUMN_H 18 #include "pandabase.h" 19 #include "geomEnums.h" 20 #include "internalName.h" 21 #include "pointerTo.h" 45 NumericType numeric_type, Contents contents,
46 int start,
int column_alignment = 0);
47 INLINE GeomVertexColumn(
const GeomVertexColumn ©);
48 void operator = (
const GeomVertexColumn ©);
49 INLINE ~GeomVertexColumn();
51 INLINE
const InternalName *get_name()
const;
52 INLINE
int get_num_components()
const;
53 INLINE
int get_num_values()
const;
54 INLINE
int get_num_elements()
const;
55 INLINE NumericType get_numeric_type()
const;
56 INLINE Contents get_contents()
const;
57 INLINE
int get_start()
const;
58 INLINE
int get_column_alignment()
const;
59 INLINE
int get_element_stride()
const;
60 INLINE
int get_component_bytes()
const;
61 INLINE
int get_total_bytes()
const;
62 INLINE
bool has_homogeneous_coord()
const;
64 INLINE
bool overlaps_with(
int start_byte,
int num_bytes)
const;
65 INLINE
bool is_bytewise_equivalent(
const GeomVertexColumn &other)
const;
67 void set_name(InternalName *name);
68 void set_num_components(
int num_components);
69 void set_numeric_type(NumericType numeric_type);
70 void set_contents(Contents contents);
71 void set_start(
int start);
72 void set_column_alignment(
int column_alignment);
74 void output(ostream &out)
const;
77 INLINE
bool is_packed_argb()
const;
78 INLINE
bool is_uint8_rgba()
const;
80 INLINE
int compare_to(
const GeomVertexColumn &other)
const;
81 INLINE
bool operator == (
const GeomVertexColumn &other)
const;
82 INLINE
bool operator != (
const GeomVertexColumn &other)
const;
83 INLINE
bool operator < (
const GeomVertexColumn &other)
const;
89 Packer *make_packer()
const;
101 NumericType _numeric_type;
104 int _column_alignment;
106 int _component_bytes;
119 virtual float get_data1f(
const unsigned char *pointer);
120 virtual const LVecBase2f &get_data2f(
const unsigned char *pointer);
121 virtual const LVecBase3f &get_data3f(
const unsigned char *pointer);
122 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
124 virtual double get_data1d(
const unsigned char *pointer);
125 virtual const LVecBase2d &get_data2d(
const unsigned char *pointer);
126 virtual const LVecBase3d &get_data3d(
const unsigned char *pointer);
127 virtual const LVecBase4d &get_data4d(
const unsigned char *pointer);
129 virtual int get_data1i(
const unsigned char *pointer);
130 virtual const LVecBase2i &get_data2i(
const unsigned char *pointer);
131 virtual const LVecBase3i &get_data3i(
const unsigned char *pointer);
132 virtual const LVecBase4i &get_data4i(
const unsigned char *pointer);
134 virtual void set_data1f(
unsigned char *pointer,
float data);
135 virtual void set_data2f(
unsigned char *pointer,
const LVecBase2f &data);
136 virtual void set_data3f(
unsigned char *pointer,
const LVecBase3f &data);
137 virtual void set_data4f(
unsigned char *pointer,
const LVecBase4f &data);
139 virtual void set_data1d(
unsigned char *pointer,
double data);
140 virtual void set_data2d(
unsigned char *pointer,
const LVecBase2d &data);
141 virtual void set_data3d(
unsigned char *pointer,
const LVecBase3d &data);
142 virtual void set_data4d(
unsigned char *pointer,
const LVecBase4d &data);
144 virtual void set_data1i(
unsigned char *pointer,
int data);
145 virtual void set_data2i(
unsigned char *pointer,
const LVecBase2i &data);
146 virtual void set_data3i(
unsigned char *pointer,
const LVecBase3i &data);
147 virtual void set_data4i(
unsigned char *pointer,
const LVecBase4i &data);
149 virtual const char *get_name()
const {
153 INLINE
float maybe_scale_color_f(
unsigned int value);
154 INLINE
void maybe_scale_color_f(
unsigned int a,
unsigned int b);
155 INLINE
void maybe_scale_color_f(
unsigned int a,
unsigned int b,
157 INLINE
void maybe_scale_color_f(
unsigned int a,
unsigned int b,
158 unsigned int c,
unsigned int d);
160 INLINE
unsigned int maybe_unscale_color_f(
float data);
161 INLINE
void maybe_unscale_color_f(
const LVecBase2f &data);
162 INLINE
void maybe_unscale_color_f(
const LVecBase3f &data);
163 INLINE
void maybe_unscale_color_f(
const LVecBase4f &data);
165 INLINE
double maybe_scale_color_d(
unsigned int value);
166 INLINE
void maybe_scale_color_d(
unsigned int a,
unsigned int b);
167 INLINE
void maybe_scale_color_d(
unsigned int a,
unsigned int b,
169 INLINE
void maybe_scale_color_d(
unsigned int a,
unsigned int b,
170 unsigned int c,
unsigned int d);
172 INLINE
unsigned int maybe_unscale_color_d(
double data);
173 INLINE
void maybe_unscale_color_d(
const LVecBase2d &data);
174 INLINE
void maybe_unscale_color_d(
const LVecBase3d &data);
175 INLINE
void maybe_unscale_color_d(
const LVecBase4d &data);
177 const GeomVertexColumn *_column;
187 unsigned int _a, _b, _c, _d;
196 class Packer_point :
public Packer {
198 virtual float get_data1f(
const unsigned char *pointer);
199 virtual const LVecBase2f &get_data2f(
const unsigned char *pointer);
200 virtual const LVecBase3f &get_data3f(
const unsigned char *pointer);
201 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
202 virtual double get_data1d(
const unsigned char *pointer);
203 virtual const LVecBase2d &get_data2d(
const unsigned char *pointer);
204 virtual const LVecBase3d &get_data3d(
const unsigned char *pointer);
205 virtual const LVecBase4d &get_data4d(
const unsigned char *pointer);
206 virtual void set_data1f(
unsigned char *pointer,
float data);
207 virtual void set_data2f(
unsigned char *pointer,
const LVecBase2f &data);
208 virtual void set_data3f(
unsigned char *pointer,
const LVecBase3f &data);
209 virtual void set_data4f(
unsigned char *pointer,
const LVecBase4f &data);
210 virtual void set_data1d(
unsigned char *pointer,
double data);
211 virtual void set_data2d(
unsigned char *pointer,
const LVecBase2d &data);
212 virtual void set_data3d(
unsigned char *pointer,
const LVecBase3d &data);
213 virtual void set_data4d(
unsigned char *pointer,
const LVecBase4d &data);
215 virtual const char *get_name()
const {
216 return "Packer_point";
223 class Packer_color :
public Packer {
225 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
226 virtual const LVecBase4d &get_data4d(
const unsigned char *pointer);
227 virtual void set_data1f(
unsigned char *pointer,
float data);
228 virtual void set_data2f(
unsigned char *pointer,
const LVecBase2f &data);
229 virtual void set_data3f(
unsigned char *pointer,
const LVecBase3f &data);
230 virtual void set_data1d(
unsigned char *pointer,
double data);
231 virtual void set_data2d(
unsigned char *pointer,
const LVecBase2d &data);
232 virtual void set_data3d(
unsigned char *pointer,
const LVecBase3d &data);
234 virtual const char *get_name()
const {
235 return "Packer_color";
243 class Packer_float32_3 :
public Packer {
245 virtual const LVecBase3f &get_data3f(
const unsigned char *pointer);
246 virtual void set_data3f(
unsigned char *pointer,
const LVecBase3f &value);
248 virtual const char *get_name()
const {
249 return "Packer_float32_3";
253 class Packer_point_float32_2 :
public Packer_point {
255 virtual const LVecBase2f &get_data2f(
const unsigned char *pointer);
256 virtual void set_data2f(
unsigned char *pointer,
const LVecBase2f &value);
258 virtual const char *get_name()
const {
259 return "Packer_point_float32_2";
263 class Packer_point_float32_3 :
public Packer_point {
265 virtual const LVecBase3f &get_data3f(
const unsigned char *pointer);
266 virtual void set_data3f(
unsigned char *pointer,
const LVecBase3f &value);
268 virtual const char *get_name()
const {
269 return "Packer_point_float32_3";
273 class Packer_point_float32_4 :
public Packer_point {
275 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
276 virtual void set_data4f(
unsigned char *pointer,
const LVecBase4f &value);
278 virtual const char *get_name()
const {
279 return "Packer_point_float32_4";
283 class Packer_nativefloat_3 :
public Packer_float32_3 {
285 virtual const LVecBase3f &get_data3f(
const unsigned char *pointer);
287 virtual const char *get_name()
const {
288 return "Packer_nativefloat_3";
292 class Packer_point_nativefloat_2 :
public Packer_point_float32_2 {
294 virtual const LVecBase2f &get_data2f(
const unsigned char *pointer);
296 virtual const char *get_name()
const {
297 return "Packer_nativefloat_2";
301 class Packer_point_nativefloat_3 :
public Packer_point_float32_3 {
303 virtual const LVecBase3f &get_data3f(
const unsigned char *pointer);
305 virtual const char *get_name()
const {
306 return "Packer_point_nativefloat_3";
310 class Packer_point_nativefloat_4 :
public Packer_point_float32_4 {
312 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
314 virtual const char *get_name()
const {
315 return "Packer_point_nativefloat_4";
319 class Packer_float64_3 :
public Packer {
321 virtual const LVecBase3d &get_data3d(
const unsigned char *pointer);
322 virtual void set_data3d(
unsigned char *pointer,
const LVecBase3d &value);
324 virtual const char *get_name()
const {
325 return "Packer_float64_3";
329 class Packer_point_float64_2 :
public Packer_point {
331 virtual const LVecBase2d &get_data2d(
const unsigned char *pointer);
332 virtual void set_data2d(
unsigned char *pointer,
const LVecBase2d &value);
334 virtual const char *get_name()
const {
335 return "Packer_point_float64_2";
339 class Packer_point_float64_3 :
public Packer_point {
341 virtual const LVecBase3d &get_data3d(
const unsigned char *pointer);
342 virtual void set_data3d(
unsigned char *pointer,
const LVecBase3d &value);
344 virtual const char *get_name()
const {
345 return "Packer_point_float64_3";
349 class Packer_point_float64_4 :
public Packer_point {
351 virtual const LVecBase4d &get_data4d(
const unsigned char *pointer);
352 virtual void set_data4d(
unsigned char *pointer,
const LVecBase4d &value);
354 virtual const char *get_name()
const {
355 return "Packer_point_float64_4";
359 class Packer_nativedouble_3 :
public Packer_float64_3 {
361 virtual const LVecBase3d &get_data3d(
const unsigned char *pointer);
363 virtual const char *get_name()
const {
364 return "Packer_nativedouble_3";
368 class Packer_point_nativedouble_2 :
public Packer_point_float64_2 {
370 virtual const LVecBase2d &get_data2d(
const unsigned char *pointer);
372 virtual const char *get_name()
const {
373 return "Packer_nativedouble_2";
377 class Packer_point_nativedouble_3 :
public Packer_point_float64_3 {
379 virtual const LVecBase3d &get_data3d(
const unsigned char *pointer);
381 virtual const char *get_name()
const {
382 return "Packer_point_nativedouble_3";
386 class Packer_point_nativedouble_4 :
public Packer_point_float64_4 {
388 virtual const LVecBase4d &get_data4d(
const unsigned char *pointer);
390 virtual const char *get_name()
const {
391 return "Packer_point_nativedouble_4";
395 class Packer_argb_packed :
public Packer_color {
397 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
398 virtual void set_data4f(
unsigned char *pointer,
const LVecBase4f &value);
400 virtual const char *get_name()
const {
401 return "Packer_argb_packed";
405 class Packer_rgba_uint8_4 :
public Packer_color {
407 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
408 virtual void set_data4f(
unsigned char *pointer,
const LVecBase4f &value);
410 virtual const char *get_name()
const {
411 return "Packer_rgba_uint8_4";
415 class Packer_rgba_float32_4 :
public Packer_color {
417 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
418 virtual void set_data4f(
unsigned char *pointer,
const LVecBase4f &value);
420 virtual const char *get_name()
const {
421 return "Packer_rgba_float32_4";
425 class Packer_rgba_nativefloat_4 :
public Packer_rgba_float32_4 {
427 virtual const LVecBase4f &get_data4f(
const unsigned char *pointer);
429 virtual const char *get_name()
const {
430 return "Packer_rgba_nativefloat_4";
434 class Packer_uint16_1 :
public Packer {
436 virtual int get_data1i(
const unsigned char *pointer);
437 virtual void set_data1i(
unsigned char *pointer,
int value);
439 virtual const char *get_name()
const {
440 return "Packer_uint16_1";
444 friend class GeomVertexArrayFormat;
451 #include "geomVertexColumn.I" This object provides a high-level interface for quickly writing a sequence of numeric values from a v...
This is the base class for all three-component vectors and points.
This is a const pointer to an InternalName, and should be used in lieu of a CPT(InternalName) in func...
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
This is the base class for all two-component vectors and points.
Base class for objects that can be written to and read from Bam files.
This is the base class for all two-component vectors and points.
This is the base class for all three-component vectors and points.
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
This is our own Panda specialization on the default STL list.
This is the base class for all three-component vectors and points.
This defines how a single column is interleaved within a vertex array stored within a Geom...
This class is intended to be the base class of all objects in Panda that might be allocated and delet...
This is the base class for all two-component vectors and points.
This is the base class for all three-component vectors and points.
This is the base class for all three-component vectors and points.
This is the base class for all three-component vectors and points.
An STL function object class, this is intended to be used on any ordered collection of class objects ...
This object provides a high-level interface for quickly reading a sequence of numeric values from a v...
A class to retrieve the individual data elements previously stored in a Datagram. ...
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...