void AHair::UpdateSegment(AHairSegment* InSegment) { if (!InSegment || InSegment->Spline->GetNumberOfSplinePoints() < 2) return; InSegment->ProceduralMesh->ClearAllMeshSections(); ClearMeshData(InSegment); // Update node rotations to match spline for (int i = 0; i < InSegment->Spline->GetNumberOfSplinePoints(); i++) { FRotator Rot = InSegment->Spline->GetRotationAtSplinePoint(i, ESplineCoordinateSpace::World); InSegment->Nodes[i]->SetActorRotation(Rot); } // Populate new data if (!MiddleMeshData) return; for (int i = 0; i <= InSegment->NumSegments; i++) { float TotalDistance = InSegment->Spline->GetSplineLength(); float Distance = (TotalDistance / InSegment->NumSegments)*i; float NextDistance = (TotalDistance / InSegment->NumSegments)*i+1; AssignPositions(InSegment->Spline->GetLocationAtDistanceAlongSpline(Distance, ESplineCoordinateSpace::Local), InSegment->Spline->GetLocationAtDistanceAlongSpline(NextDistance, ESplineCoordinateSpace::Local)); //Weight = 1.0f - Distance / TotalDistance; float Displacement = InSegment->FallOff - 1.0f; Weight = 1.0f + (Distance / TotalDistance)*Displacement; // Interpolate distance to closest spline point index float Delta = ((InSegment->Spline->GetNumberOfSplinePoints() - 1)*1.0f) / (InSegment->NumSegments*1.0f); int Index = FGenericPlatformMath::RoundToInt(i*Delta); if (i == 0) { AddVertices(0, MiddleMeshData->Vertices, InSegment, Distance); AddTriangles(InSegment); AddUVs(InSegment, true); } else { AddVertices(2, MiddleMeshData->Vertices, InSegment, Distance); AddTriangles(InSegment); AddUVs(InSegment, false); } } // Create mesh InSegment->ProceduralMesh->CreateMeshSection(0, InSegment->ProceduralMeshData->Vertices, InSegment->ProceduralMeshData->Triangles, TArray<FVector>(), InSegment->ProceduralMeshData->UVs, TArray<FColor>(), TArray<FProcMeshTangent>(), true); // Duplicate for outline as custom depth not available for translucent materials InSegment->OutlineMesh->CreateMeshSection(0, InSegment->ProceduralMeshData->Vertices, InSegment->ProceduralMeshData->Triangles, TArray<FVector>(), InSegment->ProceduralMeshData->UVs, TArray<FColor>(), TArray<FProcMeshTangent>(), true); }
void CGraphics_OpenGL::QuadsDrawFreeform(const CFreeformItem *pArray, int Num) { dbg_assert(m_Drawing == DRAWING_QUADS, "called quads_draw_freeform without begin"); for(int i = 0; i < Num; ++i) { m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X0; m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y0; m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X1; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y1; m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1]; m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1]; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X3; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y3; m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[3]; m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[3]; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X2; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y2; m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[2]; m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[2]; } AddVertices(4*Num); }
//----------------------------------------------------------------------------- // Name : iwfSurface () (Alternate Constructor) // Desc : iwfSurface Class Constructor, adds specified number of vertices //----------------------------------------------------------------------------- iwfSurface::iwfSurface( USHORT Count ) { // Reset / Clear all required values Components = 0; Normal = VECTOR3( 0.0f, 0.0f, 0.0f ); ZBias = 0; Style = 0; RenderEffect = -1; ChannelCount = 0; TextureIndices = NULL; MaterialIndices = NULL; ShaderIndices = NULL; BlendModes = NULL; CustomDataSize = 0; CustomData = NULL; VertexComponents = 0; VertexFlags = 0; VertexCount = 0; TexChannelCount = 0; TexCoordSize = NULL; IndexVPool = 0; IndexFlags = 0; IndexCount = 0; Vertices = NULL; Indices = NULL; // Add vertices AddVertices( Count ); }
// -------------------------------------------------------------------------- // void Class_SurfTri::AddSimplicies( dvecarr3E &V, ivector2D &E ) { // ========================================================================== // // void Class_SurfTri::AddSimplicies( // // dvecarr3E &V, // // ivector2D &E) // // // // Add multiple simplicies to the tasselation // // ========================================================================== // // INPUT // // ========================================================================== // // - V : dvecarr3E, vertex coordinate list // // - E : ivector2D, simplex-vertex connectivity for each simplex // // to be added // // ========================================================================== // // OUTPUT // // ========================================================================== // // - none // // ========================================================================== // // ========================================================================== // // VARIABLES DECLARATION // // ========================================================================== // // Local variables int v_off = nVertex; int m, n = E.size(); ivector1D idummy1D; // Counters int i, j; // ========================================================================== // // ADD SIMPLES // // ========================================================================== // // Add vertices ------------------------------------------------------------- // AddVertices(V); // Add simplicies ----------------------------------------------------------- // for (i = 0; i < n; i++) { m = E[i].size(); idummy1D.resize(m, -1); for (j = 0; j < m; j++) { idummy1D[j] = E[i][j] + v_off; } //next j AddSimplex(idummy1D); } //next i return; }
void CGraphics_OpenGL::QuadsDrawTL(const CQuadItem *pArray, int Num) { CPoint Center; Center.z = 0; dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawTL without begin"); for(int i = 0; i < Num; ++i) { m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X; m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y; m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y; m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1]; m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1]; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[2]; m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[2]; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[3]; m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[3]; if(m_Rotation != 0) { Center.x = pArray[i].m_X + pArray[i].m_Width/2; Center.y = pArray[i].m_Y + pArray[i].m_Height/2; if (m_Center.x != -1 && m_Center.y != -1) { Center.x = pArray[i].m_X + m_Center.x; Center.y = pArray[i].m_Y + m_Center.y; } Rotate4(Center, &m_aVertices[m_NumVertices + 4*i]); } } AddVertices(4*Num); }
// -------------------------------------------------------------------------- // void Class_SurfTri::AddSimplex( dvecarr3E &V ) { // ========================================================================== // // void Class_SurfTri::AddSimplex( // // dvecarr3E &V) // // // // Add simplex to the tasselation // // ========================================================================== // // INPUT // // ========================================================================== // // - V : dvecarr3E, vertex of simplex to be added // // ========================================================================== // // OUTPUT // // ========================================================================== // // - none // // ========================================================================== // // ========================================================================== // // VARIABLES DECLARATION // // ========================================================================== // // Local variables int n = V.size(); ivector1D dummy(V.size(),-1); // Counters int i; // ========================================================================== // // ADD SIMPLES // // ========================================================================== // // Add simplex vertexes AddVertices(V); // Add simplex n = V.size(); for (i = 0; i < n; i++) { dummy[i] = nVertex - n + i; } //next i AddSimplex(dummy); return; };
void CGraphics_OpenGL::LinesDraw(const CLineItem *pArray, int Num) { dbg_assert(m_Drawing == DRAWING_LINES, "called draw without begin"); for(int i = 0; i < Num; ++i) { m_aVertices[m_NumVertices + 2*i].m_Pos.x = pArray[i].m_X0; m_aVertices[m_NumVertices + 2*i].m_Pos.y = pArray[i].m_Y0; m_aVertices[m_NumVertices + 2*i].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 2*i].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 2*i + 1].m_Pos.x = pArray[i].m_X1; m_aVertices[m_NumVertices + 2*i + 1].m_Pos.y = pArray[i].m_Y1; m_aVertices[m_NumVertices + 2*i + 1].m_Tex = m_aTexture[1]; m_aVertices[m_NumVertices + 2*i + 1].m_Color = m_aColor[1]; } AddVertices(2*Num); }
void CGraphics_Threaded::LinesDraw(const CLineItem *pArray, int Num) { dbg_assert(m_Drawing == DRAWING_LINES, "called Graphics()->LinesDraw without begin"); for(int i = 0; i < Num; ++i) { GetVertex(m_NumVertices + 2*i)->m_Pos.x = pArray[i].m_X0; GetVertex(m_NumVertices + 2*i)->m_Pos.y = pArray[i].m_Y0; GetVertex(m_NumVertices + 2*i)->m_Tex = m_aTexture[0]; SetColor(GetVertex(m_NumVertices + 2*i), 0); GetVertex(m_NumVertices + 2*i + 1)->m_Pos.x = pArray[i].m_X1; GetVertex(m_NumVertices + 2*i + 1)->m_Pos.y = pArray[i].m_Y1; GetVertex(m_NumVertices + 2*i + 1)->m_Tex = m_aTexture[1]; SetColor(GetVertex(m_NumVertices + 2*i + 1), 1); } AddVertices(2*Num); }
// -------------------------------------------------------------------------- // void Class_SurfTri::Append( Class_SurfTri &Source ) { // ========================================================================== // // void Class_SurfTri::Append( // // Class_SurfTri &Source) // // // // Append tasselation in Source to the present tasselation // // ========================================================================== // // INPUT // // ========================================================================== // // - Source : Class_SurfTri, source tasselation to be appended // // ========================================================================== // // OUTPUT // // ========================================================================== // // - none // // ========================================================================== // // ========================================================================== // // VARIABLES DECLARATION // // ========================================================================== // // Local variables int v_off, s_off; // Counters int i, j, m; darray3E temp ; temp.fill(0.) ; // ========================================================================== // // INTIIALIZE PARAMETERS // // ========================================================================== // // Vertex offset v_off = nVertex; // Simplex offset s_off = nSimplex; // ========================================================================== // // APPEND SIMPLEX IN SOURCE TO THE PRESENT TASSELATION // // ========================================================================== // // Vertex ------------------------------------------------------------------- // if (Source.nVertex > 0) { // Resize vertex list Vertex.resize(nVertex + Source.nVertex, temp); // Add vertexes AddVertices(Source.Vertex); } // Simplex ------------------------------------------------------------------ // if (Source.nSimplex > 0) { // Resize simplex list Simplex.resize(nSimplex + Source.nSimplex); // Add simplex for (i = 0; i < Source.nSimplex; i++) { Simplex[i + s_off] = Source.Simplex[i] + v_off; nSimplex++; } //next i } // Normals ------------------------------------------------------------------ // if ((Source.Normal.size() > 0) && (Source.Normal.size() >= Source.nSimplex)) { // Resize normal list Normal.resize(nSimplex, temp); // Add normals for (i = 0; i < Source.nSimplex; i++) { Normal[i + s_off] = Source.Normal[i]; } //next i } // Adjacencies -------------------------------------------------------------- // if ((Source.Adjacency.size() > 0) && (Source.Adjacency.size() >= Source.nSimplex)) { // Resize adjacency list Adjacency.resize(nSimplex); // Add adjacencies for (i = 0; i < Source.nSimplex; i++) { Adjacency[i + s_off].resize(Source.Adjacency[i].size()); m = Source.Adjacency[i].size(); for (j = 0; j < m; j++) { if (Source.Adjacency[i][j][0] >= 0) { Adjacency[i + s_off][j] = Source.Adjacency[i][j] + s_off; } else { Adjacency[i + s_off][j].resize(1, -1); } } //next j } //next i } return; };
void CGraphics_Threaded::QuadsDrawFreeform(const CFreeformItem *pArray, int Num) { dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawFreeform without begin"); if(g_Config.m_GfxQuadAsTriangle) { for(int i = 0; i < Num; ++i) { m_aVertices[m_NumVertices + 6*i].m_Pos.x = pArray[i].m_X0; m_aVertices[m_NumVertices + 6*i].m_Pos.y = pArray[i].m_Y0; m_aVertices[m_NumVertices + 6*i].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 6*i].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 6*i + 1].m_Pos.x = pArray[i].m_X1; m_aVertices[m_NumVertices + 6*i + 1].m_Pos.y = pArray[i].m_Y1; m_aVertices[m_NumVertices + 6*i + 1].m_Tex = m_aTexture[1]; m_aVertices[m_NumVertices + 6*i + 1].m_Color = m_aColor[1]; m_aVertices[m_NumVertices + 6*i + 2].m_Pos.x = pArray[i].m_X3; m_aVertices[m_NumVertices + 6*i + 2].m_Pos.y = pArray[i].m_Y3; m_aVertices[m_NumVertices + 6*i + 2].m_Tex = m_aTexture[3]; m_aVertices[m_NumVertices + 6*i + 2].m_Color = m_aColor[3]; m_aVertices[m_NumVertices + 6*i + 3].m_Pos.x = pArray[i].m_X0; m_aVertices[m_NumVertices + 6*i + 3].m_Pos.y = pArray[i].m_Y0; m_aVertices[m_NumVertices + 6*i + 3].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 6*i + 3].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 6*i + 4].m_Pos.x = pArray[i].m_X3; m_aVertices[m_NumVertices + 6*i + 4].m_Pos.y = pArray[i].m_Y3; m_aVertices[m_NumVertices + 6*i + 4].m_Tex = m_aTexture[3]; m_aVertices[m_NumVertices + 6*i + 4].m_Color = m_aColor[3]; m_aVertices[m_NumVertices + 6*i + 5].m_Pos.x = pArray[i].m_X2; m_aVertices[m_NumVertices + 6*i + 5].m_Pos.y = pArray[i].m_Y2; m_aVertices[m_NumVertices + 6*i + 5].m_Tex = m_aTexture[2]; m_aVertices[m_NumVertices + 6*i + 5].m_Color = m_aColor[2]; } AddVertices(3*2*Num); } else { for(int i = 0; i < Num; ++i) { m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X0; m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y0; m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X1; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y1; m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1]; m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1]; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X3; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y3; m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[3]; m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[3]; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X2; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y2; m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[2]; m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[2]; } AddVertices(4*Num); } }
void CGraphics_Threaded::QuadsDrawTL(const CQuadItem *pArray, int Num) { CCommandBuffer::SPoint Center; Center.z = 0; dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawTL without begin"); if(g_Config.m_GfxQuadAsTriangle) { for(int i = 0; i < Num; ++i) { // first triangle m_aVertices[m_NumVertices + 6*i].m_Pos.x = pArray[i].m_X; m_aVertices[m_NumVertices + 6*i].m_Pos.y = pArray[i].m_Y; m_aVertices[m_NumVertices + 6*i].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 6*i].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 6*i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width; m_aVertices[m_NumVertices + 6*i + 1].m_Pos.y = pArray[i].m_Y; m_aVertices[m_NumVertices + 6*i + 1].m_Tex = m_aTexture[1]; m_aVertices[m_NumVertices + 6*i + 1].m_Color = m_aColor[1]; m_aVertices[m_NumVertices + 6*i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width; m_aVertices[m_NumVertices + 6*i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; m_aVertices[m_NumVertices + 6*i + 2].m_Tex = m_aTexture[2]; m_aVertices[m_NumVertices + 6*i + 2].m_Color = m_aColor[2]; // second triangle m_aVertices[m_NumVertices + 6*i + 3].m_Pos.x = pArray[i].m_X; m_aVertices[m_NumVertices + 6*i + 3].m_Pos.y = pArray[i].m_Y; m_aVertices[m_NumVertices + 6*i + 3].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 6*i + 3].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 6*i + 4].m_Pos.x = pArray[i].m_X + pArray[i].m_Width; m_aVertices[m_NumVertices + 6*i + 4].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; m_aVertices[m_NumVertices + 6*i + 4].m_Tex = m_aTexture[2]; m_aVertices[m_NumVertices + 6*i + 4].m_Color = m_aColor[2]; m_aVertices[m_NumVertices + 6*i + 5].m_Pos.x = pArray[i].m_X; m_aVertices[m_NumVertices + 6*i + 5].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; m_aVertices[m_NumVertices + 6*i + 5].m_Tex = m_aTexture[3]; m_aVertices[m_NumVertices + 6*i + 5].m_Color = m_aColor[3]; if(m_Rotation != 0) { Center.x = pArray[i].m_X + pArray[i].m_Width/2; Center.y = pArray[i].m_Y + pArray[i].m_Height/2; Rotate(Center, &m_aVertices[m_NumVertices + 6*i], 6); } } AddVertices(3*2*Num); } else { for(int i = 0; i < Num; ++i) { m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X; m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y; m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0]; m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0]; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width; m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y; m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1]; m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1]; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width; m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[2]; m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[2]; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X; m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[3]; m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[3]; if(m_Rotation != 0) { Center.x = pArray[i].m_X + pArray[i].m_Width/2; Center.y = pArray[i].m_Y + pArray[i].m_Height/2; Rotate(Center, &m_aVertices[m_NumVertices + 4*i], 4); } } AddVertices(4*Num); } }
void CGraphics_Threaded::QuadsDrawFreeform(const CFreeformItem *pArray, int Num) { dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawFreeform without begin"); if(g_Config.m_GfxQuadAsTriangle && !m_UseOpenGL3_3) { for(int i = 0; i < Num; ++i) { GetVertex(m_NumVertices + 6*i)->m_Pos.x = pArray[i].m_X0; GetVertex(m_NumVertices + 6*i)->m_Pos.y = pArray[i].m_Y0; GetVertex(m_NumVertices + 6*i)->m_Tex = m_aTexture[0]; SetColor(GetVertex(m_NumVertices + 6*i), 0); GetVertex(m_NumVertices + 6*i + 1)->m_Pos.x = pArray[i].m_X1; GetVertex(m_NumVertices + 6*i + 1)->m_Pos.y = pArray[i].m_Y1; GetVertex(m_NumVertices + 6*i + 1)->m_Tex = m_aTexture[1]; SetColor(GetVertex(m_NumVertices + 6*i + 1), 1); GetVertex(m_NumVertices + 6*i + 2)->m_Pos.x = pArray[i].m_X3; GetVertex(m_NumVertices + 6*i + 2)->m_Pos.y = pArray[i].m_Y3; GetVertex(m_NumVertices + 6*i + 2)->m_Tex = m_aTexture[3]; SetColor(GetVertex(m_NumVertices + 6*i + 2), 3); GetVertex(m_NumVertices + 6*i + 3)->m_Pos.x = pArray[i].m_X0; GetVertex(m_NumVertices + 6*i + 3)->m_Pos.y = pArray[i].m_Y0; GetVertex(m_NumVertices + 6*i + 3)->m_Tex = m_aTexture[0]; SetColor(GetVertex(m_NumVertices + 6*i + 3), 0); GetVertex(m_NumVertices + 6*i + 4)->m_Pos.x = pArray[i].m_X3; GetVertex(m_NumVertices + 6*i + 4)->m_Pos.y = pArray[i].m_Y3; GetVertex(m_NumVertices + 6*i + 4)->m_Tex = m_aTexture[3]; SetColor(GetVertex(m_NumVertices + 6*i + 4), 3); GetVertex(m_NumVertices + 6*i + 5)->m_Pos.x = pArray[i].m_X2; GetVertex(m_NumVertices + 6*i + 5)->m_Pos.y = pArray[i].m_Y2; GetVertex(m_NumVertices + 6*i + 5)->m_Tex = m_aTexture[2]; SetColor(GetVertex(m_NumVertices + 6*i + 5), 2); } AddVertices(3*2*Num); } else { for(int i = 0; i < Num; ++i) { GetVertex(m_NumVertices + 4*i)->m_Pos.x = pArray[i].m_X0; GetVertex(m_NumVertices + 4*i)->m_Pos.y = pArray[i].m_Y0; GetVertex(m_NumVertices + 4*i)->m_Tex = m_aTexture[0]; SetColor(GetVertex(m_NumVertices + 4*i), 0); GetVertex(m_NumVertices + 4*i + 1)->m_Pos.x = pArray[i].m_X1; GetVertex(m_NumVertices + 4*i + 1)->m_Pos.y = pArray[i].m_Y1; GetVertex(m_NumVertices + 4*i + 1)->m_Tex = m_aTexture[1]; SetColor(GetVertex(m_NumVertices + 4*i + 1), 1); GetVertex(m_NumVertices + 4*i + 2)->m_Pos.x = pArray[i].m_X3; GetVertex(m_NumVertices + 4*i + 2)->m_Pos.y = pArray[i].m_Y3; GetVertex(m_NumVertices + 4*i + 2)->m_Tex = m_aTexture[3]; SetColor(GetVertex(m_NumVertices + 4*i + 2), 3); GetVertex(m_NumVertices + 4*i + 3)->m_Pos.x = pArray[i].m_X2; GetVertex(m_NumVertices + 4*i + 3)->m_Pos.y = pArray[i].m_Y2; GetVertex(m_NumVertices + 4*i + 3)->m_Tex = m_aTexture[2]; SetColor(GetVertex(m_NumVertices + 4*i + 3), 2); } AddVertices(4*Num); } }
void CGraphics_Threaded::QuadsDrawTL(const CQuadItem *pArray, int Num) { CCommandBuffer::SPoint Center; dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawTL without begin"); if(g_Config.m_GfxQuadAsTriangle && !m_UseOpenGL3_3) { for(int i = 0; i < Num; ++i) { // first triangle GetVertex(m_NumVertices + 6*i)->m_Pos.x = pArray[i].m_X; GetVertex(m_NumVertices + 6*i)->m_Pos.y = pArray[i].m_Y; GetVertex(m_NumVertices + 6*i)->m_Tex = m_aTexture[0]; SetColor(GetVertex(m_NumVertices + 6*i), 0); GetVertex(m_NumVertices + 6*i + 1)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width; GetVertex(m_NumVertices + 6*i + 1)->m_Pos.y = pArray[i].m_Y; GetVertex(m_NumVertices + 6*i + 1)->m_Tex = m_aTexture[1]; SetColor(GetVertex(m_NumVertices + 6*i + 1), 1); GetVertex(m_NumVertices + 6*i + 2)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width; GetVertex(m_NumVertices + 6*i + 2)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; GetVertex(m_NumVertices + 6*i + 2)->m_Tex = m_aTexture[2]; SetColor(GetVertex(m_NumVertices + 6*i + 2), 2); // second triangle GetVertex(m_NumVertices + 6*i + 3)->m_Pos.x = pArray[i].m_X; GetVertex(m_NumVertices + 6*i + 3)->m_Pos.y = pArray[i].m_Y; GetVertex(m_NumVertices + 6*i + 3)->m_Tex = m_aTexture[0]; SetColor(GetVertex(m_NumVertices + 6*i + 3), 0); GetVertex(m_NumVertices + 6*i + 4)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width; GetVertex(m_NumVertices + 6*i + 4)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; GetVertex(m_NumVertices + 6*i + 4)->m_Tex = m_aTexture[2]; SetColor(GetVertex(m_NumVertices + 6*i + 4), 2); GetVertex(m_NumVertices + 6*i + 5)->m_Pos.x = pArray[i].m_X; GetVertex(m_NumVertices + 6*i + 5)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; GetVertex(m_NumVertices + 6*i + 5)->m_Tex = m_aTexture[3]; SetColor(GetVertex(m_NumVertices + 6*i + 5), 3); if(m_Rotation != 0) { Center.x = pArray[i].m_X + pArray[i].m_Width/2; Center.y = pArray[i].m_Y + pArray[i].m_Height/2; Rotate(Center, GetVertex(m_NumVertices + 6*i), 6); } } AddVertices(3*2*Num); } else { for(int i = 0; i < Num; ++i) { GetVertex(m_NumVertices + 4*i)->m_Pos.x = pArray[i].m_X; GetVertex(m_NumVertices + 4*i)->m_Pos.y = pArray[i].m_Y; GetVertex(m_NumVertices + 4*i)->m_Tex = m_aTexture[0]; SetColor(GetVertex(m_NumVertices + 4*i), 0); GetVertex(m_NumVertices + 4*i + 1)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width; GetVertex(m_NumVertices + 4*i + 1)->m_Pos.y = pArray[i].m_Y; GetVertex(m_NumVertices + 4*i + 1)->m_Tex = m_aTexture[1]; SetColor(GetVertex(m_NumVertices + 4*i + 1), 1); GetVertex(m_NumVertices + 4*i + 2)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width; GetVertex(m_NumVertices + 4*i + 2)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; GetVertex(m_NumVertices + 4*i + 2)->m_Tex = m_aTexture[2]; SetColor(GetVertex(m_NumVertices + 4*i + 2), 2); GetVertex(m_NumVertices + 4*i + 3)->m_Pos.x = pArray[i].m_X; GetVertex(m_NumVertices + 4*i + 3)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height; GetVertex(m_NumVertices + 4*i + 3)->m_Tex = m_aTexture[3]; SetColor(GetVertex(m_NumVertices + 4*i + 3), 3); if(m_Rotation != 0) { Center.x = pArray[i].m_X + pArray[i].m_Width/2; Center.y = pArray[i].m_Y + pArray[i].m_Height/2; Rotate(Center, GetVertex(m_NumVertices + 4*i), 4); } } AddVertices(4*Num); } }