:void Particle_Draw (matrix4x4_t camera) 15 0.1354 :{ /* Particle_Draw total: 9933 89.6885 */ : matrix4x4_t matrix; : double left[3], up[3]; : int i, n, num, num_va, num_cl; : : if (!particles_lastused) : return; : 3 0.0271 : Matrix4x4_Transpose (&matrix, &camera); : : n = particles_lastused; : particles_lastused = 0; : particles_firstunused = 0; : num = 0; : num_va = 0; : num_cl = 0; : 186 1.6795 : for (i=0; i particles[i].life || particles[i].alpha==0 || particles[i].size==0) : { 1 0.0090 : particles_active[i] = false; : continue; : } : else : { 24 0.2167 : particles_lastused = i + 1; : 331 2.9887 : particles[i].size += particles[i].growth * g_realframetime; 431 3.8916 : particles[i].alpha -= particles[i].fade * g_realframetime; : 225 2.0316 : if (particles[i].size < 0) particles[i].size = 0; 354 3.1964 : if (particles[i].alpha < 0) particles[i].alpha = 0; 293 2.6456 : if (particles[i].alpha > 255) particles[i].alpha = 255; : 94 0.8488 : left[0] = matrix.m[1][0]*particles[i].size; 152 1.3725 : left[1] = matrix.m[1][1]*particles[i].size; 174 1.5711 : left[2] = matrix.m[1][2]*particles[i].size; : 141 1.2731 : up[0] = matrix.m[2][0]*particles[i].size; 165 1.4898 : up[1] = matrix.m[2][1]*particles[i].size; 249 2.2483 : up[2] = matrix.m[2][2]*particles[i].size; : 476 4.2980 : particles[i].origin[0] += particles[i].vel[0] * g_realframetime; 368 3.3228 : particles[i].origin[1] += particles[i].vel[1] * g_realframetime; 394 3.5576 : particles[i].origin[2] += particles[i].vel[2] * g_realframetime; : 127 1.1467 : particles_va[num_va+ 0] = particles[i].origin[0] - left[0] - up[0]; 278 2.5102 : particles_va[num_va+ 1] = particles[i].origin[1] - left[1] - up[1]; 303 2.7359 : particles_va[num_va+ 2] = particles[i].origin[2] - left[2] - up[2]; : 221 1.9955 : particles_va[num_va+ 3] = particles[i].origin[0] - left[0] + up[0]; 270 2.4379 : particles_va[num_va+ 4] = particles[i].origin[1] - left[1] + up[1]; 211 1.9052 : particles_va[num_va+ 5] = particles[i].origin[2] - left[2] + up[2]; : 245 2.2122 : particles_va[num_va+ 6] = particles[i].origin[0] + left[0] + up[0]; 340 3.0700 : particles_va[num_va+ 7] = particles[i].origin[1] + left[1] + up[1]; 175 1.5801 : particles_va[num_va+ 8] = particles[i].origin[2] + left[2] + up[2]; : 244 2.2032 : particles_va[num_va+ 9] = particles[i].origin[0] + left[0] - up[0]; 224 2.0226 : particles_va[num_va+10] = particles[i].origin[1] + left[1] - up[1]; 306 2.7630 : particles_va[num_va+11] = particles[i].origin[2] + left[2] - up[2]; : 504 4.5508 : particles_cl[num_cl+ 0] = : particles_cl[num_cl+ 4] = : particles_cl[num_cl+ 8] = : particles_cl[num_cl+12] = particles[i].red; : 292 2.6366 : particles_cl[num_cl+ 1] = : particles_cl[num_cl+ 5] = : particles_cl[num_cl+ 9] = : particles_cl[num_cl+13] = particles[i].green; : 359 3.2415 : particles_cl[num_cl+ 2] = : particles_cl[num_cl+ 6] = : particles_cl[num_cl+10] = : particles_cl[num_cl+14] = particles[i].blue; : 677 6.1129 : particles_cl[num_cl+ 3] = : particles_cl[num_cl+ 7] = : particles_cl[num_cl+11] = : particles_cl[num_cl+15] = (NUint8)particles[i].alpha; : 79 0.7133 : num++; : num_va += 12; 63 0.5688 : num_cl += 16; : : } : } : } : 2 0.0181 : if (num) : { : qglEnable (GL_BLEND); : qglEnable (GL_TEXTURE_2D); : qglTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); : qglDepthMask (false); : qglBlendFunc (GL_SRC_ALPHA, GL_ONE); 2 0.0181 : qglBindTexture (GL_TEXTURE_2D, Texture_Get("particledot")); : : qglEnableClientState (GL_VERTEX_ARRAY); : qglEnableClientState (GL_TEXTURE_COORD_ARRAY); : qglEnableClientState (GL_COLOR_ARRAY); : : qglVertexPointer (3, GL_FLOAT, sizeof(float[3]), particles_va); : qglTexCoordPointer (2, GL_FLOAT, sizeof(float[2]), particles_tc); 2 0.0181 : qglColorPointer (4, GL_UNSIGNED_BYTE, sizeof(NUint8[4]), particles_cl); : : qglDrawArrays (GL_QUADS, 0, num * 4); : : qglDisableClientState (GL_COLOR_ARRAY); : qglDisableClientState (GL_TEXTURE_COORD_ARRAY); : qglDisableClientState (GL_VERTEX_ARRAY); : : qglColor4ub (255, 255, 255, 255); : : qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); : qglDepthMask (true); : qglTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); : qglDisable (GL_TEXTURE_2D); 1 0.0090 : qglDisable (GL_BLEND); : } 7 0.0632 :}