146 LinkedNodes.Add_Tail(node);
151 while (!LinkedNodes.Is_Empty()) {
161 while (!VisibleNodes.Is_Empty())
198 virtual void Flush(
int pass);
231 if (MeshCategories[i])
234 delete MeshCategories[i];
238 delete[] MeshCategories;
248 return SubMesh->Peek_Shader()->Greater_Than(*src->SubMesh->
Peek_Shader(),pass);
257 return SubMesh->Peek_Shader()->Similar_Enough(*src->SubMesh->
Peek_Shader(),pass);
274 if (!MeshCategories[class_id])
278 return MeshCategories[class_id]->Register_Mesh(mesh,sub_mesh);
295 if (MeshCategories[i])
297 MeshCategories[i]->Flush();
319 while (!RendererListContainers[pass].Is_Empty()) {
363 RendererListContainers[pass].Add_After(new_cont,new_cont);
374 RendererListContainers[pass].Add(new_cont);
386 SNAPSHOT_SAY((
"ShdDX8RendererClass::MeshContainerClass::Flush()\n"));
423: Container(container),
436 if (!SubMesh->Peek_Shader()->Use_HW_Vertex_Processing())
441 int count=SubMesh->Get_Visible_Polygon_Count();
442 if (!count) count=SubMesh->Get_Polygon_Count();
443 unsigned index_count=count*3;
444 if (SubMesh->Is_Sorting()) {
451 const TriIndex* indices=SubMesh->Get_Polygon_Array();
454 for (i=SubMesh->Get_First_Visible_Polygon();i<count+SubMesh->Get_First_Visible_Polygon();++i)
468 vss.
Locations=SubMesh->Get_Vertex_Array();
469 vss.
Normals=SubMesh->Get_Vertex_Normal_Array();
472 vss.
UV[stage]=SubMesh->Get_UV_Array(stage);
475 vss.
S=SubMesh->Get_Tangent_Basis_S_Array();
476 vss.
T=SubMesh->Get_Tangent_Basis_T_Array();
477 vss.
SxT=SubMesh->Get_Tangent_Basis_SxT_Array();
479 unsigned vertex_count=SubMesh->Get_Vertex_Count();
480 unsigned stream_count=SubMesh->Peek_Shader()->Get_Vertex_Stream_Count();
486 if (!SubMesh->Peek_Shader()->Use_HW_Vertex_Processing())
493 for (n=0;n<stream_count;++n)
495 unsigned vertex_size=SubMesh->Peek_Shader()->Get_Vertex_Size(n);
497 if (SubMesh->Is_Sorting()) {
513 SubMesh->Peek_Shader()->Copy_Vertex_Stream
518 SubMesh->Get_Vertex_Count()
525 unsigned stream_count=SubMesh->Peek_Shader()->Get_Vertex_Stream_Count();
527 for (n=0;n<stream_count;++n)
531 delete[] VertexBuffers;
561 LightEnvironment.Reset(
Vector3(0.0f,0.0f,0.0f),
Vector3(0.0f,0.0f,0.0f));
573 if (!SubMesh->Peek_Shader()->Pass_Selection(Mesh,RenderInfo,cur_pass))
578 SNAPSHOT_SAY((
"ShdDX8RendererNodeClass::Flush(%d) - %s\n",cur_pass,SubMesh->Get_Name()));
585 unsigned vertex_count=SubMesh->Get_Vertex_Count();
586 unsigned stream_count=SubMesh->Peek_Shader()->Get_Vertex_Stream_Count();
597 SNAPSHOT_SAY((
"DynamicVBAccess - %s - %d vertices\n",SubMesh->Is_Sorting() ?
"sorting" :
"non-sorting",vertex_count));
599 if (_TempVertexBuffer.Length() < (
int)vertex_count) _TempVertexBuffer.Resize(vertex_count);
600 if (_TempNormalBuffer.Length() < (
int)vertex_count) _TempNormalBuffer.Resize(vertex_count);
601 Vector3* loc=&(_TempVertexBuffer[0]);
602 Vector3* norm=&(_TempNormalBuffer[0]);
604 SubMesh->Get_Deformed_Vertices(loc,norm,Mesh->Get_Container()->Get_HTree());
612 vss.
UV[stage]=SubMesh->Get_UV_Array(stage);
615 vss.
S=SubMesh->Get_Tangent_Basis_S_Array();
616 vss.
T=SubMesh->Get_Tangent_Basis_T_Array();
617 vss.
SxT=SubMesh->Get_Tangent_Basis_SxT_Array();
622 SubMesh->Peek_Shader()->Copy_Vertex_Stream
627 SubMesh->Get_Vertex_Count()
636 SubMesh->Peek_Shader()->Apply_Instance(cur_pass, *RenderInfo);
638 if (SubMesh->Is_Sorting()) {
642 SubMesh->Get_Visible_Polygon_Count() ? SubMesh->Get_Visible_Polygon_Count() : SubMesh->Get_Polygon_Count(),
644 SubMesh->Get_Vertex_Count()
651 SubMesh->Get_Visible_Polygon_Count() ? SubMesh->Get_Visible_Polygon_Count() : SubMesh->Get_Polygon_Count(),
653 SubMesh->Get_Vertex_Count()
663 for (
unsigned n=0;n<SubMesh->Peek_Shader()->Get_Vertex_Stream_Count();++n)
672 SubMesh->Peek_Shader()->Apply_Instance(cur_pass, *RenderInfo);
674 if (SubMesh->Is_Sorting()) {
678 SubMesh->Get_Visible_Polygon_Count() ? SubMesh->Get_Visible_Polygon_Count() : SubMesh->Get_Polygon_Count(),
680 SubMesh->Get_Vertex_Count()
687 SubMesh->Get_Visible_Polygon_Count() ? SubMesh->Get_Visible_Polygon_Count() : SubMesh->Get_Polygon_Count(),
689 SubMesh->Get_Vertex_Count()
702 if (shd->
Get_Class_ID()!=SubMesh->Peek_Shader()->Get_Class_ID()) {
706 SubMesh->Peek_Shader()->Apply_Shared(pass, *RenderInfo);
@ USAGE_SOFTWAREPROCESSING
@ USAGE_SOFTWAREPROCESSING
static void Set_Vertex_Buffer(const VertexBufferClass *vb, unsigned stream=0)
static void Invalidate_Cached_Render_States(void)
static void Set_Light_Environment(LightEnvironmentClass *light_env)
Set the light environment. This is a lighting model which used up to four directional lights to produ...
static void Apply_Default_State()
Resets render device to default state.
static void Set_Index_Buffer(const IndexBufferClass *ib, unsigned short index_base_offset)
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_Transform(D3DTRANSFORMSTATETYPE transform, const Matrix4x4 &m)
static void Apply_Render_State_Changes()
VertexFormatXYZNDUV2 * Get_Formatted_Vertex_Array()
unsigned Get_FVF_Size() const
void First(GenericMultiListClass *list)
void Last(GenericMultiListClass *list)
unsigned short * Get_Index_Array()
ObjectType * Peek_Obj(void)
LightEnvironmentClass * light_environment
RendererListContainerClass(int pass)
ShdRendererNodeList & Peek_Linked_Nodes()
void Register_Renderer(ShdRendererNodeClass *node)
virtual ~RendererListContainerClass()
virtual ~MeshContainerClass()
ShdRendererNodeClass * Register_Mesh(ShdMeshClass *mesh, ShdSubMeshClass *sub_mesh)
virtual ~ShdDX8RendererClass()
virtual ShdRendererNodeClass * Register_Mesh(ShdMeshClass *mesh, ShdSubMeshClass *sub_mesh)
virtual ~ShdDX8RendererNodeClass()
virtual bool Greater_Than(const ShdRendererNodeClass &, int pass) const
virtual void Apply_Shared_Shader_Settings(ShdRendererNodeClass *prev, int pass)
virtual bool Similar_Enough(const ShdRendererNodeClass &, int pass) const
virtual void Flush(int pass)
virtual void Render(RenderInfoClass &rinfo)
ShdDX8RendererNodeClass(ShdDX8RendererClass::MeshContainerClass *container, ShdMeshClass *mesh, ShdSubMeshClass *sub_mesh)
virtual void Shutdown()=0
WWINLINE uint32 Get_Class_ID(void) const
static ShdDefClass * Create_ShdDefClass_Instance(uint32 class_id)
virtual int Get_Pass_Count(void)=0
WWINLINE int Get_Class_ID() const
const ShdDefClass * Peek_Definition(void)
returns a pointer to the definition for this shader
virtual ~ShdRendererClass()
static void Init_Shaders()
static void Shutdown_Shaders()
void Set_Renderer_List_Container(RendererListContainerClass *cont, int pass)
virtual void Apply_Shared_Shader_Settings(ShdRendererNodeClass *prev_node, int pass)=0
virtual void Flush(int pass)=0
ShdInterfaceClass * Peek_Shader(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 * Get_Vertex_Array()
const unsigned dynamic_fvf_type
@ BUFFER_TYPE_DYNAMIC_DX8
@ BUFFER_TYPE_DYNAMIC_SORTING
const unsigned MAX_TEXTURE_STAGES
#define REF_PTR_RELEASE(x)
#define REF_PTR_SET(dst, src)
MultiListIterator< ShdRendererNodeClass > ShdRendererNodeListIterator
MultiListClass< RendererListContainerClass > RendererListContainerList
MultiListIterator< RendererListContainerClass > RendererListContainerIterator
const Vector2 * UV[MAX_TEXTURE_STAGES]
const unsigned * DiffuseInt
const Vector3 * Locations