@@ -938,10 +938,10 @@ void C_OP_RenderSprites::RenderSpriteCard( CMeshBuilder &meshBuilder, C_OP_Rende
938938 float yaw = SubFloat ( info.m_pYaw [ nGroup * info.m_nYawStride ], nOffset );
939939
940940 int nXYZIndex = nGroup * info.m_nXYZStride ;
941- Vector vecWorldPos ;
942- vecWorldPos. x = SubFloat ( info.m_pXYZ [ nXYZIndex ], nOffset );
943- vecWorldPos. y = SubFloat ( info.m_pXYZ [ nXYZIndex+1 ], nOffset );
944- vecWorldPos. z = SubFloat ( info. m_pXYZ [ nXYZIndex+ 2 ], nOffset ) ;
941+ float x = SubFloat ( info. m_pXYZ [ nXYZIndex ], nOffset ) ;
942+ float y = SubFloat ( info.m_pXYZ [ nXYZIndex+ 1 ], nOffset );
943+ float z = SubFloat ( info.m_pXYZ [ nXYZIndex+2 ], nOffset );
944+ Vector vecWorldPos{x, y, z} ;
945945
946946 if ( bCameraBias )
947947 {
@@ -952,7 +952,7 @@ void C_OP_RenderSprites::RenderSpriteCard( CMeshBuilder &meshBuilder, C_OP_Rende
952952 }
953953
954954 // Find the sample for this frame
955- const SheetSequenceSample_t *pSample = &s_DefaultSheetSequence ;
955+ const SheetSequenceSample_t *pSample;
956956 if ( info.m_pSheet )
957957 {
958958 float flAgeScale = info.m_flAgeScale ;
@@ -971,51 +971,35 @@ void C_OP_RenderSprites::RenderSpriteCard( CMeshBuilder &meshBuilder, C_OP_Rende
971971 info.m_pParticles ->m_flCurTime ,
972972 flAgeScale, nSequence );
973973 }
974+ else
975+ {
976+ pSample = &s_DefaultSheetSequence;
977+ }
974978
975979 const SequenceSampleTextureCoords_t *pSample0 = &(pSample->m_TextureCoordData [0 ]);
976980 const SequenceSampleTextureCoords_t *pSecondTexture0 = &(pSample->m_TextureCoordData [1 ]);
977981
978- // Submit 1 (instanced) or 4 (non-instanced) verts (if we're instancing, we don't produce indices either)
979- meshBuilder.Position3f ( vecWorldPos.x , vecWorldPos.y , vecWorldPos.z );
980- meshBuilder.Color4ub ( rc, gc, bc, ac );
981- meshBuilder.TexCoord4f ( 0 , pSample0->m_fLeft_U0 , pSample0->m_fTop_V0 , pSample0->m_fRight_U0 , pSample0->m_fBottom_V0 );
982- meshBuilder.TexCoord4f ( 1 , pSample0->m_fLeft_U1 , pSample0->m_fTop_V1 , pSample0->m_fRight_U1 , pSample0->m_fBottom_V1 );
983- meshBuilder.TexCoord4f ( 2 , pSample->m_fBlendFactor , rot, rad, yaw );
984- // FIXME: change the vertex decl (remove texcoord3/cornerid) if instancing - need to adjust elements beyond texcoord3 down, though
985- if ( !bUseInstancing )
986- meshBuilder.TexCoord2f ( 3 , 0 , 0 );
987- meshBuilder.TexCoord4f ( 4 , pSecondTexture0->m_fLeft_U0 , pSecondTexture0->m_fTop_V0 , pSecondTexture0->m_fRight_U0 , pSecondTexture0->m_fBottom_V0 );
988- meshBuilder.AdvanceVertex ();
989-
990- if ( !bUseInstancing )
991- {
992- meshBuilder.Position3f ( vecWorldPos.x , vecWorldPos.y , vecWorldPos.z );
993- meshBuilder.Color4ub ( rc, gc, bc, ac );
994- meshBuilder.TexCoord4f ( 0 , pSample0->m_fLeft_U0 , pSample0->m_fTop_V0 , pSample0->m_fRight_U0 , pSample0->m_fBottom_V0 );
995- meshBuilder.TexCoord4f ( 1 , pSample0->m_fLeft_U1 , pSample0->m_fTop_V1 , pSample0->m_fRight_U1 , pSample0->m_fBottom_V1 );
996- meshBuilder.TexCoord4f ( 2 , pSample->m_fBlendFactor , rot, rad, yaw );
997- meshBuilder.TexCoord2f ( 3 , 1 , 0 );
998- meshBuilder.TexCoord4f ( 4 , pSecondTexture0->m_fLeft_U0 , pSecondTexture0->m_fTop_V0 , pSecondTexture0->m_fRight_U0 , pSecondTexture0->m_fBottom_V0 );
999- meshBuilder.AdvanceVertex ();
982+ static float s_flCornerIds[] = { 0 ,0 , 1 ,0 , 1 ,1 , 0 ,1 };
1000983
1001- meshBuilder.Position3f ( vecWorldPos.x , vecWorldPos.y , vecWorldPos.z );
1002- meshBuilder.Color4ub ( rc, gc, bc, ac );
1003- meshBuilder.TexCoord4f ( 0 , pSample0->m_fLeft_U0 , pSample0->m_fTop_V0 , pSample0->m_fRight_U0 , pSample0->m_fBottom_V0 );
1004- meshBuilder.TexCoord4f ( 1 , pSample0->m_fLeft_U1 , pSample0->m_fTop_V1 , pSample0->m_fRight_U1 , pSample0->m_fBottom_V1 );
1005- meshBuilder.TexCoord4f ( 2 , pSample->m_fBlendFactor , rot, rad, yaw );
1006- meshBuilder.TexCoord2f ( 3 , 1 , 1 );
1007- meshBuilder.TexCoord4f ( 4 , pSecondTexture0->m_fLeft_U0 , pSecondTexture0->m_fTop_V0 , pSecondTexture0->m_fRight_U0 , pSecondTexture0->m_fBottom_V0 );
1008- meshBuilder.AdvanceVertex ();
984+ float const *pIds = s_flCornerIds;
1009985
1010- meshBuilder.Position3f ( vecWorldPos.x , vecWorldPos.y , vecWorldPos.z );
986+ for ( int i = 0 ; i < ( bUseInstancing ? 1 : 4 ); i++ )
987+ {
988+ meshBuilder.Position3f ( x, y, z );
1011989 meshBuilder.Color4ub ( rc, gc, bc, ac );
1012990 meshBuilder.TexCoord4f ( 0 , pSample0->m_fLeft_U0 , pSample0->m_fTop_V0 , pSample0->m_fRight_U0 , pSample0->m_fBottom_V0 );
1013991 meshBuilder.TexCoord4f ( 1 , pSample0->m_fLeft_U1 , pSample0->m_fTop_V1 , pSample0->m_fRight_U1 , pSample0->m_fBottom_V1 );
1014992 meshBuilder.TexCoord4f ( 2 , pSample->m_fBlendFactor , rot, rad, yaw );
1015- meshBuilder.TexCoord2f ( 3 , 0 , 1 );
993+ if ( ! bUseInstancing )
994+ {
995+ meshBuilder.TexCoord2fv ( 3 , pIds );
996+ pIds += 2 ;
997+ }
1016998 meshBuilder.TexCoord4f ( 4 , pSecondTexture0->m_fLeft_U0 , pSecondTexture0->m_fTop_V0 , pSecondTexture0->m_fRight_U0 , pSecondTexture0->m_fBottom_V0 );
1017- meshBuilder.AdvanceVertex ();
1018-
999+ meshBuilder.AdvanceVertexF <VTX_HAVEPOS | VTX_HAVECOLOR, 5 >();
1000+ }
1001+ if ( ! bUseInstancing )
1002+ {
10191003 meshBuilder.FastQuad ( info.m_nVertexOffset );
10201004 info.m_nVertexOffset += 4 ;
10211005 }
0 commit comments