63 MatDesc->Set_Vertex_Count(max_verts);
80 MatDesc->Set_Vertex_Count(max_verts);
87 DynamicMeshPNum(src.DynamicMeshPNum),
88 DynamicMeshVNum(src.DynamicMeshVNum),
173 MatDesc->Reset(polycount, vertcount, 1);
199 const Vector2 *uvs = MatDesc->Get_UV_Array_By_Index(0,
false);
200 const Vector2 *uv1s = MatDesc->Get_UV_Array_By_Index(1,
false);
201 const unsigned *colors = MatDesc->Get_Color_Array(0,
false);
202 const static Vector3 default_normal(0.0f, 0.0f, 0.0f);
203 const static Vector2 default_uv(0.0f, 0.0f);
204 const unsigned int default_color = 0xFFFFFFFF;
205 for (
int i=0; i < DynamicMeshVNum; i++)
240 for (
int i=0; i < DynamicMeshPNum; i++)
242 indices[i*3 + 0] = (
unsigned short)tris[i][0];
243 indices[i*3 + 1] = (
unsigned short)tris[i][1];
244 indices[i*3 + 2] = (
unsigned short)tris[i][2];
259 for (
unsigned int pass = 0; pass < pass_count; pass++) {
267 unsigned short min_vert_idx = DynamicMeshVNum - 1;
268 unsigned short max_vert_idx = 0;
269 unsigned short start_tri_idx = 0;
270 unsigned short cur_tri_idx = 0;
273 bool texture_changed =
false;
274 bool texture1_changed =
false;
275 bool material_changed =
false;
276 bool shader_changed =
false;
279 TexBufferClass * tex_buf = MatDesc->Get_Texture_Array(pass, 0,
false);
283 texture_array0 =
NULL;
287 TexBufferClass * tex_buf1 = MatDesc->Get_Texture_Array(pass, 1,
false);
291 texture_array1 =
NULL;
295 MatBufferClass * mat_buf = MatDesc->Get_Material_Array(pass,
false);
299 material_array =
NULL;
301 ShaderClass *shader_array = MatDesc->Get_Shader_Array(pass,
false);
304 if (texture_array0) {
310 if (texture_array1) {
316 if (material_array) {
331 if (!texture_array0 && !texture_array1 && !material_array && !shader_array) {
344 const TriIndex &tri = tris[cur_tri_idx];
345 unsigned short min_idx = (
unsigned short)
MIN(
MIN(tri.
I, tri.
J), tri.
K);
346 unsigned short max_idx = (
unsigned short)
MAX(
MAX(tri.
I, tri.
J), tri.
K);
347 min_vert_idx =
MIN(min_vert_idx, min_idx);
348 max_vert_idx =
MAX(max_vert_idx, max_idx);
351 unsigned short next_tri_idx = cur_tri_idx + 1;
352 done = next_tri_idx >= DynamicMeshPNum;
354 texture_changed =
false;
355 texture1_changed =
false;
356 material_changed =
false;
357 shader_changed =
false;
359 texture_changed = texture_array0 && texture_array0[cur_tri_idx] != texture_array0[next_tri_idx];
360 texture1_changed = texture_array1 && texture_array1[cur_tri_idx] != texture_array1[next_tri_idx];
361 material_changed = material_array && material_array[tris[cur_tri_idx].
I] != material_array[tris[next_tri_idx].
I];
362 shader_changed = shader_array && shader_array[cur_tri_idx] != shader_array[next_tri_idx];
366 if (done || texture_changed || material_changed || shader_changed) {
371 (1 + cur_tri_idx - start_tri_idx),
373 1 + max_vert_idx - min_vert_idx);
378 (1 + cur_tri_idx - start_tri_idx),
380 1 + max_vert_idx - min_vert_idx);
382 start_tri_idx = next_tri_idx;
383 min_vert_idx = DynamicMeshVNum - 1;
391 cur_tri_idx = next_tri_idx;
401 TexBufferClass * texlist = MatDesc->Get_Texture_Array(pass, 0,
true);
409 MatBufferClass * vertmatlist = MatDesc->Get_Material_Array(pass,
true);
435 Model->Render(rinfo);
457 for (
int color_array_index = 0; color_array_index <
MAX_COLOR_ARRAYS; color_array_index++) {
464 unsigned * color = &((
Model->Get_Color_Array(color_array_index))[
VertCount]);
539 for (
int color_array_index = 0; color_array_index <
MAX_COLOR_ARRAYS; color_array_index++) {
565 for (
int color_array_index = 0; color_array_index <
MAX_COLOR_ARRAYS; color_array_index++) {
595 for (
int color_array_index = 0; color_array_index <
MAX_COLOR_ARRAYS; color_array_index++) {
672 loc[i].
X += offset.
X;
673 loc[i].
Y += offset.
Y;
674 loc[i].
Z += offset.
Z;
688 Model->Set_Single_Material(mat, pass);
707 Model->Initialize_Material_Array(pass, mat);
720 if (material == mat) {
749 Model->Set_Single_Texture(tex, pass);
768 Model->Initialize_Texture_Array(pass, 0, tex);
781 if (texture == tex) {
800 Model->Set_Single_Texture(tex, pass);
const FrustumClass & Get_Frustum(void) const
static OverlapType Overlap_Test(const AAPlaneClass &plane, const Vector3 &point)
static void Set_Vertex_Buffer(const VertexBufferClass *vb, unsigned stream=0)
static void Set_Texture(unsigned stage, TextureBaseClass *texture)
static void Set_Index_Buffer(const IndexBufferClass *ib, unsigned short index_base_offset)
static unsigned int Convert_Color_Clamp(const Vector4 &color)
static void Draw_Triangles(unsigned buffer_type, unsigned short start_index, unsigned short polygon_count, unsigned short min_vertex_index, unsigned short vertex_count)
static void Set_Material(const VertexMaterialClass *material)
static void Set_Shader(const ShaderClass &shader)
static void Set_Transform(D3DTRANSFORMSTATETYPE transform, const Matrix4x4 &m)
unsigned short * Get_Index_Array()
virtual void Location(float x, float y, float z)
DynamicMeshClass(int max_poly, int max_vert)
virtual void Get_Vertex(int index, float &x, float &y, float &z)
int TextureIdx[MAX_PASSES]
virtual RenderObjClass * Clone(void) const
void Set_Dirty_Bounds(void)
virtual void Render(RenderInfoClass &rinfo)
void Reset_Mesh_Counters()
int VertexMaterialIdx[MAX_PASSES]
bool MultiVertexMaterial[MAX_PASSES]
bool MultiTexture[MAX_PASSES]
virtual int Get_Num_Vertices(void) const
bool MultiVertexColor[MAX_COLOR_ARRAYS]
Vector4 CurVertexColor[MAX_COLOR_ARRAYS]
void Translate_Vertices(const Vector3 &offset)
void Resize(int max_polys, int max_verts)
virtual bool Flip_Face(void)
virtual void Move_Vertex(int index, float x, float y, float z)
virtual ~DynamicMeshClass(void)
int Set_Texture(int idx, int pass=0)
void Set_Dirty_Planes(void)
virtual MaterialInfoClass * Peek_Material_Info(void)
int Set_Vertex_Material(int idx, int pass=0)
void Set_Counts(int pnum, int vnum)
void Initialize_Texture_Array(int pass, int stage, TextureClass *texture=NULL)
virtual void Compute_Vertex_Normals(void)
DynamicMeshModel(unsigned int max_polys, unsigned int max_verts)
virtual void Compute_Plane_Equations(void)
virtual void Compute_Bounds(Vector3 *verts)
void Initialize_Material_Array(int pass, VertexMaterialClass *vmat=NULL)
int Get_Pass_Count(void) const
void Render(RenderInfoClass &rinfo)
virtual void Location(float x, float y, float z=0.0f)
virtual void Set_Position(const Vector3 &v)
virtual void Move_Vertex(int index, float x, float y, float z=0.0f)
VertexFormatXYZNDUV2 * Get_Formatted_Vertex_Array()
const FVFInfoClass & FVF_Info() const
unsigned Get_Tex_Offset(unsigned int n) const
unsigned Get_FVF_Size() const
unsigned Get_Diffuse_Offset() const
unsigned Get_Location_Offset() const
unsigned Get_Normal_Offset() const
void Set_Element(int index, VertexMaterialClass *mat)
int Add_Vertex_Material(VertexMaterialClass *vmat)
int Vertex_Material_Count(void) const
int Texture_Count(void) const
TextureClass * Get_Texture(int index)
VertexMaterialClass * Get_Vertex_Material(int index)
int Add_Texture(TextureClass *tex)
void Remap_Mesh(const MeshMatDescClass *srcmeshmatdesc, MeshMatDescClass *destmeshmatdesc)
void Get_Bounding_Sphere(SphereClass *set_sphere)
void Reset_Geometry(int polycount, int vertcount)
virtual void Compute_Plane_Equations(Vector4 *array)
virtual void Compute_Bounds(Vector3 *verts)
const Vector3 * Get_Vertex_Normal_Array(void)
int Get_Vertex_Count(void) const
const TriIndex * Get_Polygon_Array(void)
virtual void Compute_Vertex_Normals(Vector3 *array)
Vector4 * get_planes(bool create=true)
Vector3 * Get_Vertex_Array(void)
int Get_Polygon_Count(void) const
int Get_Flag(FlagsType flag)
Vector3 * get_vert_normals(void)
void Set_Polygon_Count(int polycount)
WWINLINE void Release_Ref(void) const
virtual int Is_Not_Hidden_At_All(void)
virtual void Set_Position(const Vector3 &v)
virtual const AABoxClass & Get_Bounding_Box(void) const
static void Insert_Triangles(const SphereClass &bounding_sphere, unsigned short start_index, unsigned short polygon_count, unsigned short min_vertex_index, unsigned short vertex_count)
void Set_Element(int index, TextureClass *mat)
static void Add_To_Static_Sort_List(RenderObjClass *robj, unsigned int sort_level)
static bool Are_Static_Sort_Lists_Enabled(void)
static bool Is_Sorting_Enabled(void)
const unsigned dynamic_fvf_type
@ BUFFER_TYPE_DYNAMIC_DX8
@ BUFFER_TYPE_DYNAMIC_SORTING
#define REF_PTR_RELEASE(x)