Panda3D
Public Member Functions | List of all members
GeomVertexReader Class Reference

This object provides a high-level interface for quickly reading a sequence of numeric values from a vertex table. More...

#include "geomVertexReader.h"

Inheritance diagram for GeomVertexReader:
GeomEnums GeomVertexRewriter

Public Member Functions

 GeomVertexReader (Thread *current_thread=Thread::get_current_thread())
 Constructs an invalid GeomVertexReader. More...
 
 GeomVertexReader (const GeomVertexData *vertex_data, Thread *current_thread=Thread::get_current_thread())
 Constructs a new reader to process the vertices of the indicated data object. More...
 
 GeomVertexReader (const GeomVertexData *vertex_data, CPT_InternalName name, Thread *current_thread=Thread::get_current_thread())
 Constructs a new reader to process the vertices of the indicated data object. More...
 
 GeomVertexReader (const GeomVertexArrayData *array_data, Thread *current_thread=Thread::get_current_thread())
 Constructs a new reader to process the vertices of the indicated array only. More...
 
 GeomVertexReader (const GeomVertexArrayData *array_data, int column, Thread *current_thread=Thread::get_current_thread())
 Constructs a new reader to process the vertices of the indicated array only. More...
 
 GeomVertexReader (const GeomVertexDataPipelineReader *data_reader, const InternalName *name, bool force=true)
 Constructs a new reader to process the vertices of the indicated data object. More...
 
 GeomVertexReader (const GeomVertexReader &copy)
 
void clear ()
 Resets the GeomVertexReader to the initial state. More...
 
int get_array () const
 Returns the array index containing the data type that the reader is working on. More...
 
const GeomVertexArrayDataget_array_data () const
 Returns the particular array object that the reader is currently processing. More...
 
const GeomVertexArrayDataHandleget_array_handle () const
 Returns the read handle to the array object that the read is currently processing. More...
 
const GeomVertexColumnget_column () const
 Returns the description of the data type that the reader is working on. More...
 
Threadget_current_thread () const
 Returns the Thread pointer of the currently-executing thread, as passed to the constructor of this object. More...
 
PN_stdfloat get_data1 ()
 Returns the data associated with the read row, expressed as a 1-component value, and advances the read row. More...
 
double get_data1d ()
 Returns the data associated with the read row, expressed as a 1-component value, and advances the read row. More...
 
float get_data1f ()
 Returns the data associated with the read row, expressed as a 1-component value, and advances the read row. More...
 
int get_data1i ()
 Returns the data associated with the read row, expressed as a 1-component value, and advances the read row. More...
 
const LVecBase2 & get_data2 ()
 Returns the data associated with the read row, expressed as a 2-component value, and advances the read row. More...
 
const LVecBase2d & get_data2d ()
 Returns the data associated with the read row, expressed as a 2-component value, and advances the read row. More...
 
const LVecBase2f & get_data2f ()
 Returns the data associated with the read row, expressed as a 2-component value, and advances the read row. More...
 
const LVecBase2i & get_data2i ()
 Returns the data associated with the read row, expressed as a 2-component value, and advances the read row. More...
 
const LVecBase3 & get_data3 ()
 Returns the data associated with the read row, expressed as a 3-component value, and advances the read row. More...
 
const LVecBase3d & get_data3d ()
 Returns the data associated with the read row, expressed as a 3-component value, and advances the read row. More...
 
const LVecBase3f & get_data3f ()
 Returns the data associated with the read row, expressed as a 3-component value, and advances the read row. More...
 
const LVecBase3i & get_data3i ()
 Returns the data associated with the read row, expressed as a 3-component value, and advances the read row. More...
 
const LVecBase4 & get_data4 ()
 Returns the data associated with the read row, expressed as a 4-component value, and advances the read row. More...
 
const LVecBase4d & get_data4d ()
 Returns the data associated with the read row, expressed as a 4-component value, and advances the read row. More...
 
const LVecBase4f & get_data4f ()
 Returns the data associated with the read row, expressed as a 4-component value, and advances the read row. More...
 
const LVecBase4i & get_data4i ()
 Returns the data associated with the read row, expressed as a 4-component value, and advances the read row. More...
 
bool get_force () const
 Returns the value of the force flag. More...
 
LMatrix3 get_matrix3 ()
 Returns the 3-by-3 matrix associated with the read row and advances the read row. More...
 
LMatrix3d get_matrix3d ()
 Returns the 3-by-3 matrix associated with the read row and advances the read row. More...
 
LMatrix3f get_matrix3f ()
 Returns the 3-by-3 matrix associated with the read row and advances the read row. More...
 
LMatrix4 get_matrix4 ()
 Returns the 4-by-4 matrix associated with the read row and advances the read row. More...
 
LMatrix4d get_matrix4d ()
 Returns the 4-by-4 matrix associated with the read row and advances the read row. More...
 
LMatrix4f get_matrix4f ()
 Returns the 4-by-4 matrix associated with the read row and advances the read row. More...
 
int get_read_row () const
 Returns the row index from which the data will be retrieved by the next call to get_data*(). More...
 
int get_start_row () const
 Returns the row index at which the reader started. More...
 
size_t get_stride () const
 Returns the per-row stride (bytes between consecutive rows) of the underlying vertex array. More...
 
const GeomVertexDataget_vertex_data () const
 Returns the vertex data object that the reader is processing. More...
 
bool has_column () const
 Returns true if a valid data type has been successfully set, or false if the data type does not exist (or if get_force() is false and the vertex data is nonresident). More...
 
bool is_at_end () const
 Returns true if the reader is currently at the end of the list of vertices, false otherwise. More...
 
void operator= (const GeomVertexReader &copy)
 
void output (std::ostream &out) const
 
bool set_column (int column)
 Sets up the reader to use the nth data type of the GeomVertexFormat, numbering from 0. More...
 
bool set_column (CPT_InternalName name)
 Sets up the reader to use the data type with the indicated name. More...
 
bool set_column (int array, const GeomVertexColumn *column)
 Sets up the reader to use the indicated column description on the given array. More...
 
void set_force (bool force)
 Sets the value of the force flag. More...
 
void set_row (int row)
 Sets the start row to the indicated value. More...
 
void set_row_unsafe (int row)
 Sets the start row to the indicated value, without internal checks. More...
 

Additional Inherited Members

- Public Types inherited from GeomEnums
enum  AnimationType { AT_none, AT_panda, AT_hardware }
 
enum  Contents {
  C_other, C_point, C_clip_point, C_vector,
  C_texcoord, C_color, C_index, C_morph_delta,
  C_matrix, C_normal
}
 
enum  GeomRendering {
  GR_indexed_point = 0x00001, GR_indexed_other = 0x10000, GR_indexed_bits = 0x10001, GR_point = 0x00002,
  GR_point_uniform_size = 0x00004, GR_per_point_size = 0x00008, GR_point_perspective = 0x00010, GR_point_aspect_ratio = 0x00020,
  GR_point_scale = 0x00040, GR_point_rotate = 0x00080, GR_point_sprite = 0x00100, GR_point_sprite_tex_matrix = 0x00200,
  GR_point_bits = 0x003fe, GR_triangle_strip = 0x00400, GR_triangle_fan = 0x00800, GR_line_strip = 0x01000,
  GR_composite_bits = 0x01c00, GR_strip_cut_index = 0x20000, GR_flat_first_vertex = 0x02000, GR_flat_last_vertex = 0x04000,
  GR_shade_model_bits = 0x06000, GR_render_mode_wireframe = 0x40000, GR_render_mode_point = 0x80000, GR_adjacency = 0x100000
}
 
enum  NumericType {
  NT_uint8, NT_uint16, NT_uint32, NT_packed_dcba,
  NT_packed_dabc, NT_float32, NT_float64, NT_stdfloat,
  NT_int8, NT_int16, NT_int32, NT_packed_ufloat
}
 
enum  PrimitiveType {
  PT_none, PT_polygons, PT_lines, PT_points,
  PT_patches
}
 
enum  ShadeModel { SM_uniform, SM_smooth, SM_flat_first_vertex, SM_flat_last_vertex }
 
enum  UsageHint {
  UH_client, UH_stream, UH_dynamic, UH_static,
  UH_unspecified
}
 

Detailed Description

This object provides a high-level interface for quickly reading a sequence of numeric values from a vertex table.

It is particularly optimized for reading a single column of data values for a series of vertices, without changing columns between each number. Although you can also use one GeomVertexReader to read across the columns if it is convenient, by calling set_column() repeatedly at each vertex, it is faster to read down the columns, and to use a different GeomVertexReader for each column.

Note that a GeomVertexReader does not keep a reference count to the actual vertex data buffer (it grabs the current data buffer from the GeomVertexData whenever set_column() is called). This means that it is important not to keep a GeomVertexReader object around over a long period of time in which the data buffer is likely to be deallocated; it is intended for making a quick pass over the data in one session.

It also means that you should create any GeomVertexWriters *before* creating GeomVertexReaders on the same data, since the writer itself might cause the vertex buffer to be deallocated. Better yet, use a GeomVertexRewriter if you are going to create both of them anyway.

Definition at line 47 of file geomVertexReader.h.

Constructor & Destructor Documentation

◆ GeomVertexReader() [1/6]

GeomVertexReader::GeomVertexReader ( Thread current_thread = Thread::get_current_thread())
inline

Constructs an invalid GeomVertexReader.

You must use the assignment operator to assign a valid GeomVertexReader to this object before you can use it.

Definition at line 20 of file geomVertexReader.I.

Referenced by clear().

◆ GeomVertexReader() [2/6]

GeomVertexReader::GeomVertexReader ( const GeomVertexData vertex_data,
Thread current_thread = Thread::get_current_thread() 
)
inline

Constructs a new reader to process the vertices of the indicated data object.

Definition at line 32 of file geomVertexReader.I.

◆ GeomVertexReader() [3/6]

GeomVertexReader::GeomVertexReader ( const GeomVertexData vertex_data,
CPT_InternalName  name,
Thread current_thread = Thread::get_current_thread() 
)
inline

Constructs a new reader to process the vertices of the indicated data object.

This flavor creates the reader specifically to process the named data type.

Definition at line 46 of file geomVertexReader.I.

References set_column().

◆ GeomVertexReader() [4/6]

GeomVertexReader::GeomVertexReader ( const GeomVertexArrayData array_data,
Thread current_thread = Thread::get_current_thread() 
)
inline

Constructs a new reader to process the vertices of the indicated array only.

Definition at line 61 of file geomVertexReader.I.

◆ GeomVertexReader() [5/6]

GeomVertexReader::GeomVertexReader ( const GeomVertexArrayData array_data,
int  column,
Thread current_thread = Thread::get_current_thread() 
)
inline

Constructs a new reader to process the vertices of the indicated array only.

Definition at line 74 of file geomVertexReader.I.

References set_column().

◆ GeomVertexReader() [6/6]

GeomVertexReader::GeomVertexReader ( const GeomVertexDataPipelineReader data_reader,
const InternalName name,
bool  force = true 
)
inline

Constructs a new reader to process the vertices of the indicated data object.

This flavor creates the reader specifically to process the named data type.

Definition at line 89 of file geomVertexReader.I.

References GeomVertexFormat::get_array_with(), and GeomVertexFormat::get_column.

Member Function Documentation

◆ clear()

void GeomVertexReader::clear ( )
inline

Resets the GeomVertexReader to the initial state.

Definition at line 274 of file geomVertexReader.I.

References GeomVertexReader().

Referenced by GeomVertexRewriter::clear().

◆ get_array()

int GeomVertexReader::get_array ( ) const
inline

Returns the array index containing the data type that the reader is working on.

Definition at line 293 of file geomVertexReader.I.

◆ get_array_data()

const GeomVertexArrayData * GeomVertexReader::get_array_data ( ) const
inline

Returns the particular array object that the reader is currently processing.

Definition at line 162 of file geomVertexReader.I.

◆ get_array_handle()

const GeomVertexArrayDataHandle * GeomVertexReader::get_array_handle ( ) const
inline

Returns the read handle to the array object that the read is currently processing.

This low-level call should be used with caution.

Definition at line 171 of file geomVertexReader.I.

◆ get_column()

const GeomVertexColumn * GeomVertexReader::get_column ( ) const
inline

Returns the description of the data type that the reader is working on.

Definition at line 301 of file geomVertexReader.I.

◆ get_current_thread()

Thread * GeomVertexReader::get_current_thread ( ) const
inline

Returns the Thread pointer of the currently-executing thread, as passed to the constructor of this object.

Definition at line 190 of file geomVertexReader.I.

◆ get_data1()

PN_stdfloat GeomVertexReader::get_data1 ( )
inline

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

Definition at line 551 of file geomVertexReader.I.

References get_data1d(), and get_data1f().

◆ get_data1d()

double GeomVertexReader::get_data1d ( )
inline

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

Definition at line 461 of file geomVertexReader.I.

Referenced by get_data1().

◆ get_data1f()

float GeomVertexReader::get_data1f ( )
inline

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

Definition at line 371 of file geomVertexReader.I.

Referenced by get_data1().

◆ get_data1i()

int GeomVertexReader::get_data1i ( )
inline

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

Definition at line 631 of file geomVertexReader.I.

◆ get_data2()

const LVecBase2 & GeomVertexReader::get_data2 ( )
inline

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Definition at line 564 of file geomVertexReader.I.

References get_data2d(), and get_data2f().

◆ get_data2d()

const LVecBase2d & GeomVertexReader::get_data2d ( )
inline

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Definition at line 471 of file geomVertexReader.I.

Referenced by get_data2().

◆ get_data2f()

const LVecBase2f & GeomVertexReader::get_data2f ( )
inline

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Definition at line 381 of file geomVertexReader.I.

Referenced by get_data2(), and PhysxSoftBodyNode::set_from_geom().

◆ get_data2i()

const LVecBase2i & GeomVertexReader::get_data2i ( )
inline

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Definition at line 641 of file geomVertexReader.I.

◆ get_data3()

const LVecBase3 & GeomVertexReader::get_data3 ( )
inline

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Definition at line 577 of file geomVertexReader.I.

References get_data3d(), and get_data3f().

Referenced by PT().

◆ get_data3d()

const LVecBase3d & GeomVertexReader::get_data3d ( )
inline

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Definition at line 481 of file geomVertexReader.I.

Referenced by get_data3().

◆ get_data3f()

const LVecBase3f & GeomVertexReader::get_data3f ( )
inline

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Definition at line 391 of file geomVertexReader.I.

Referenced by get_data3(), and PhysxSoftBodyNode::set_from_geom().

◆ get_data3i()

const LVecBase3i & GeomVertexReader::get_data3i ( )
inline

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Definition at line 651 of file geomVertexReader.I.

◆ get_data4()

const LVecBase4 & GeomVertexReader::get_data4 ( )
inline

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Definition at line 590 of file geomVertexReader.I.

References get_data4d(), and get_data4f().

◆ get_data4d()

const LVecBase4d & GeomVertexReader::get_data4d ( )
inline

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Definition at line 491 of file geomVertexReader.I.

Referenced by get_data4().

◆ get_data4f()

const LVecBase4f & GeomVertexReader::get_data4f ( )
inline

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Definition at line 401 of file geomVertexReader.I.

Referenced by get_data4().

◆ get_data4i()

const LVecBase4i & GeomVertexReader::get_data4i ( )
inline

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Definition at line 661 of file geomVertexReader.I.

◆ get_force()

bool GeomVertexReader::get_force ( ) const
inline

Returns the value of the force flag.

See set_force().

Definition at line 214 of file geomVertexReader.I.

◆ get_matrix3()

LMatrix3 GeomVertexReader::get_matrix3 ( )
inline

Returns the 3-by-3 matrix associated with the read row and advances the read row.

This is a special method that only works when the column in question contains a matrix of an appropriate size.

Definition at line 604 of file geomVertexReader.I.

References get_matrix3d(), and get_matrix3f().

◆ get_matrix3d()

LMatrix3d GeomVertexReader::get_matrix3d ( )
inline

Returns the 3-by-3 matrix associated with the read row and advances the read row.

This is a special method that only works when the column in question contains a matrix of an appropriate size.

Definition at line 502 of file geomVertexReader.I.

Referenced by get_matrix3().

◆ get_matrix3f()

LMatrix3f GeomVertexReader::get_matrix3f ( )
inline

Returns the 3-by-3 matrix associated with the read row and advances the read row.

This is a special method that only works when the column in question contains a matrix of an appropriate size.

Definition at line 412 of file geomVertexReader.I.

Referenced by get_matrix3().

◆ get_matrix4()

LMatrix4 GeomVertexReader::get_matrix4 ( )
inline

Returns the 4-by-4 matrix associated with the read row and advances the read row.

This is a special method that only works when the column in question contains a matrix of an appropriate size.

Definition at line 618 of file geomVertexReader.I.

References get_matrix4d(), and get_matrix4f().

◆ get_matrix4d()

LMatrix4d GeomVertexReader::get_matrix4d ( )
inline

Returns the 4-by-4 matrix associated with the read row and advances the read row.

This is a special method that only works when the column in question contains a matrix of an appropriate size.

Definition at line 526 of file geomVertexReader.I.

Referenced by get_matrix4().

◆ get_matrix4f()

LMatrix4f GeomVertexReader::get_matrix4f ( )
inline

Returns the 4-by-4 matrix associated with the read row and advances the read row.

This is a special method that only works when the column in question contains a matrix of an appropriate size.

Definition at line 436 of file geomVertexReader.I.

Referenced by get_matrix4().

◆ get_read_row()

int GeomVertexReader::get_read_row ( ) const
inline

Returns the row index from which the data will be retrieved by the next call to get_data*().

Definition at line 352 of file geomVertexReader.I.

◆ get_start_row()

int GeomVertexReader::get_start_row ( ) const
inline

Returns the row index at which the reader started.

It will return to this row if you reset the current column.

Definition at line 343 of file geomVertexReader.I.

◆ get_stride()

size_t GeomVertexReader::get_stride ( ) const
inline

Returns the per-row stride (bytes between consecutive rows) of the underlying vertex array.

This low-level information is normally not needed to use the GeomVertexReader directly.

Definition at line 181 of file geomVertexReader.I.

◆ get_vertex_data()

const GeomVertexData * GeomVertexReader::get_vertex_data ( ) const
inline

Returns the vertex data object that the reader is processing.

This may return NULL if the reader was constructed with just an array pointer.

Definition at line 153 of file geomVertexReader.I.

◆ has_column()

bool GeomVertexReader::has_column ( ) const
inline

Returns true if a valid data type has been successfully set, or false if the data type does not exist (or if get_force() is false and the vertex data is nonresident).

Definition at line 284 of file geomVertexReader.I.

Referenced by GeomPrimitive::calc_sphere_radius(), set_row(), and set_row_unsafe().

◆ is_at_end()

bool GeomVertexReader::is_at_end ( ) const
inline

Returns true if the reader is currently at the end of the list of vertices, false otherwise.

If this is true, another call to get_data*() will result in a crash.

Definition at line 362 of file geomVertexReader.I.

Referenced by GeomVertexRewriter::is_at_end(), and PhysxSoftBodyNode::set_from_geom().

◆ set_column() [1/3]

bool GeomVertexReader::set_column ( int  column)
inline

Sets up the reader to use the nth data type of the GeomVertexFormat, numbering from 0.

This also resets the read row number to the start row (the same value passed to a previous call to set_row(), or 0 if set_row() was never called.)

The return value is true if the data type is valid, false otherwise.

Definition at line 229 of file geomVertexReader.I.

References GeomVertexFormat::get_array_with(), and GeomVertexFormat::get_column.

Referenced by GeomVertexReader(), and GeomVertexRewriter::set_column().

◆ set_column() [2/3]

bool GeomVertexReader::set_column ( CPT_InternalName  name)
inline

Sets up the reader to use the data type with the indicated name.

This also resets the read row number to the start row (the same value passed to a previous call to set_row(), or 0 if set_row() was never called.)

The return value is true if the data type is valid, false otherwise.

Definition at line 254 of file geomVertexReader.I.

References GeomVertexFormat::get_array_with(), and GeomVertexFormat::get_column.

◆ set_column() [3/3]

bool GeomVertexReader::set_column ( int  array,
const GeomVertexColumn column 
)

Sets up the reader to use the indicated column description on the given array.

This also resets the current read row number to the start row (the same value passed to a previous call to set_row(), or 0 if set_row() was never called.)

The return value is true if the data type is valid, false otherwise.

Definition at line 33 of file geomVertexReader.cxx.

◆ set_force()

void GeomVertexReader::set_force ( bool  force)
inline

Sets the value of the force flag.

When this is true (the default), vertex data will be paged in from disk if necessary. When this is false, the GeomVertexData will simply return a failure code when attempting to read vertex data that is not resident (but will put it on the queue to become resident later).

Normally, vertex data is always resident, so this will not be an issue. It is only possible for vertex data to be nonresident if you have enabled vertex paging via the GeomVertexArrayData and VertexDataPage interfaces.

Definition at line 206 of file geomVertexReader.I.

◆ set_row()

void GeomVertexReader::set_row ( int  row)
inline

Sets the start row to the indicated value.

The reader will begin reading from the indicated row; each subsequent get_data*() call will return the data from the subsequent row. If set_column() is called, the reader will return to this row.

Definition at line 330 of file geomVertexReader.I.

References has_column().

Referenced by GeomVertexRewriter::set_row().

◆ set_row_unsafe()

void GeomVertexReader::set_row_unsafe ( int  row)
inline

Sets the start row to the indicated value, without internal checks.

This is the same as set_row(), but it does not check for the possibility that the array has been reallocated internally for some reason; use only when you are confident that the array is unchanged and you really need every bit of available performance.

Definition at line 316 of file geomVertexReader.I.

References has_column().

Referenced by GeomVertexRewriter::set_row_unsafe().


The documentation for this class was generated from the following files: