220 lines
8.1 KiB
C++
220 lines
8.1 KiB
C++
// Filename: geomEnums.h
|
|
// Created by: drose (14Apr05)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
|
//
|
|
// All use of this software is subject to the terms of the Panda 3d
|
|
// Software license. You should have received a copy of this license
|
|
// along with this source code; you will also find a current copy of
|
|
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
|
//
|
|
// To contact the maintainers of this program write to
|
|
// panda3d-general@lists.sourceforge.net .
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef GEOMENUMS_H
|
|
#define GEOMENUMS_H
|
|
|
|
#include "pandabase.h"
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Class : GeomEnums
|
|
// Description : This class exists just to provide scoping for the
|
|
// various enumerated types used by Geom,
|
|
// GeomVertexData, GeomVertexArrayData, GeomPrimitive,
|
|
// and other related classes.
|
|
////////////////////////////////////////////////////////////////////
|
|
class EXPCL_PANDA GeomEnums {
|
|
PUBLISHED:
|
|
|
|
// The usage hint describes to the rendering backend how often the
|
|
// data in question will be modified and/or rendered. It allows the
|
|
// backend to make appropriate choices about what part of memory the
|
|
// data should be stored in.
|
|
|
|
// The hint is provided as a performance optimization only, and does
|
|
// not constrain actual usage; although it may be an important
|
|
// optimization.
|
|
|
|
enum UsageHint {
|
|
// The following are intentionally ordered from most dynamic to
|
|
// most static. In general, if usage_a < usage_b, then usage_a is
|
|
// more dynamic than usage_b.
|
|
|
|
// UH_client: don't attempt to upload the data; always keep it on
|
|
// the client.
|
|
UH_client,
|
|
|
|
// UH_stream: the data will be created once, used to render a few
|
|
// times, and then discarded. This should be used for short-lived
|
|
// temporary objects.
|
|
UH_stream,
|
|
|
|
// UH_dynamic: the data will be repeatedly modified and
|
|
// re-rendered. This is for data that will be modified at
|
|
// runtime, such as animated or soft-skinned vertices.
|
|
UH_dynamic,
|
|
|
|
// UH_static: the data will be created once, and used to render
|
|
// many times, without modification. This is the most common
|
|
// case, since typically vertex data is not directly animated
|
|
// (this is not related to scene graph animation, e.g. from
|
|
// adjusting transforms on a node).
|
|
UH_static,
|
|
|
|
// UH_unspecified: the usage is unspecified. This is intended as
|
|
// a "don't care" option for abstract objects, it should not be
|
|
// applied to any actual geometry to be rendered. You take your
|
|
// chances if a geom actually gets into the scene graph with this
|
|
// set.
|
|
UH_unspecified,
|
|
};
|
|
|
|
// This type specifies a number of bits that are used to represent
|
|
// the rendering requirements of a particular Geom, as well as the
|
|
// rendering capabilities of the GSG. The difference between the
|
|
// two indicates whether the Geom needs to be munged for the GSG.
|
|
enum GeomRendering {
|
|
// If there are indexed points.
|
|
GR_indexed_point = 0x00001,
|
|
|
|
// If there is indexed geometry of any other type.
|
|
GR_indexed_other = 0x10000,
|
|
|
|
// The union of all of the indexed attributes.
|
|
GR_indexed_bits = 0x10001,
|
|
|
|
// If there are any points at all.
|
|
GR_point = 0x00002,
|
|
|
|
// If the points are all the same size, other than 1 pixel.
|
|
GR_point_uniform_size = 0x00004,
|
|
|
|
// If the points have a per-vertex size designation.
|
|
GR_per_point_size = 0x00008,
|
|
|
|
// If the points' size is specified in camera units rather than
|
|
// screen pixels.
|
|
GR_point_perspective = 0x00010,
|
|
|
|
// If the points have a non-square aspect ratio.
|
|
GR_point_aspect_ratio = 0x00020,
|
|
|
|
// If the points are under a scale transform, uniform or non-uniform.
|
|
GR_point_scale = 0x00040,
|
|
|
|
// If the points are rotated off the orthonormal axis.
|
|
GR_point_rotate = 0x00080,
|
|
|
|
// If the points require texture coordinates interpolated across
|
|
// their face, to render textures as sprites.
|
|
GR_point_sprite = 0x00100,
|
|
|
|
// If there is a texture matrix applied to the sprite's generated
|
|
// texture coordinates.
|
|
GR_point_sprite_tex_matrix = 0x00200,
|
|
|
|
// The union of all the above point attributes, except GR_indexed_point.
|
|
GR_point_bits = 0x003fe,
|
|
|
|
// If there are any of these composite types.
|
|
GR_triangle_strip = 0x00400,
|
|
GR_triangle_fan = 0x00800,
|
|
GR_line_strip = 0x01000,
|
|
|
|
// The union of all of the above composite types.
|
|
GR_composite_bits = 0x01c00,
|
|
|
|
// If the shade model requires a particular vertex for flat shading.
|
|
GR_flat_first_vertex = 0x02000,
|
|
GR_flat_last_vertex = 0x04000,
|
|
|
|
// The union of the above shade model types.
|
|
GR_shade_model_bits = 0x06000,
|
|
|
|
// If there is a TexGenAttrib in effect with M_light_vector
|
|
// enabled, meaning we need to generate the tangent space light
|
|
// vector as the texture coordinates.
|
|
GR_texcoord_light_vector = 0x08000,
|
|
};
|
|
|
|
// The shade model specifies whether the per-vertex colors and
|
|
// normals indexed by a given primitive truly represent per-vertex
|
|
// colors and normals, or whether they actually represent
|
|
// per-triangle flat-shaded colors and normals.
|
|
enum ShadeModel {
|
|
// SM_uniform: all vertices across all faces have the same colors
|
|
// and normals. It doesn't really matter which ShadeModelAttrib
|
|
// mode is used to render this primitive.
|
|
SM_uniform,
|
|
|
|
// SM_smooth: vertices within a single face have different
|
|
// colors/normals that should be smoothed across the face. This
|
|
// primitive should be rendered with SmoothModelAttrib::M_smooth.
|
|
SM_smooth,
|
|
|
|
// SM_flat_(first,last)_vertex: each face within the primitive
|
|
// might have a different color/normal than the other faces, but
|
|
// across a particular face there is only one color/normal. Each
|
|
// face's color/normal is taken from the (first, last) vertex of
|
|
// the face. This primitive should be rendered with
|
|
// SmoothModelAttrib::M_flat.
|
|
SM_flat_first_vertex,
|
|
SM_flat_last_vertex,
|
|
};
|
|
|
|
// The primitive type represents the core primitive type of a
|
|
// particular GeomPrimitive. It's used for determining what kind of
|
|
// antialiasing should be enabled.
|
|
enum PrimitiveType {
|
|
PT_none,
|
|
PT_polygons,
|
|
PT_lines,
|
|
PT_points
|
|
};
|
|
|
|
// The numeric type determines what physical representation is used
|
|
// to encode a numeric value within the vertex data.
|
|
enum NumericType {
|
|
NT_uint8, // An integer 0..255
|
|
NT_uint16, // An integer 0..65535
|
|
NT_uint32, // An integer 0..4294967296
|
|
NT_packed_dcba, // DirectX style, four byte values packed in a uint32
|
|
NT_packed_dabc, // DirectX packed color order (ARGB)
|
|
NT_float32, // A floating-point number
|
|
};
|
|
|
|
// The contents determine the semantic meaning of a numeric value
|
|
// within the vertex data. This is also used to determine what
|
|
// automatic transforms might be applied to the various columns.
|
|
enum Contents {
|
|
C_other, // Arbitrary meaning, leave it alone
|
|
C_point, // A point in 3-space or 4-space
|
|
C_clip_point, // A point pre-transformed into clip coordinates
|
|
C_vector, // A surface normal, tangent, or binormal
|
|
C_texcoord, // A texture coordinate
|
|
C_color, // 3- or 4-component color, ordered R, G, B, [A]
|
|
C_index, // An index value into some other table
|
|
C_morph_delta, // A delta from some base value, defining a blend shape
|
|
};
|
|
|
|
// The type of animation data that is represented by a particular
|
|
// GeomVertexFormat.
|
|
enum AnimationType {
|
|
AT_none, // No vertex animation.
|
|
AT_panda, // Vertex animation calculated on the CPU by Panda.
|
|
AT_hardware, // Hardware-accelerated animation on the graphics card.
|
|
};
|
|
|
|
};
|
|
|
|
EXPCL_PANDA ostream &operator << (ostream &out, GeomEnums::NumericType numeric_type);
|
|
EXPCL_PANDA ostream &operator << (ostream &out, GeomEnums::Contents contents);
|
|
|
|
#endif
|
|
|