Equivalent, float scheduling
| 228 | |
| 229 | // Equivalent, float scheduling |
| 230 | static void zParPTankBubbleCreate(zParPTank* zp, U32 max_particles, zParPTankUpdateCallback update) |
| 231 | { |
| 232 | zp->num_particles = 0; |
| 233 | zp->max_particles = max_particles; |
| 234 | zp->flags = 0; |
| 235 | zp->update = update; |
| 236 | |
| 237 | RwTexture* tex = (RwTexture*)xSTFindAsset(xStrHash("partex0"), NULL); |
| 238 | if (!tex) |
| 239 | { |
| 240 | return; |
| 241 | } |
| 242 | |
| 243 | RwTextureSetFilterMode(tex, rwFILTERLINEAR); |
| 244 | |
| 245 | zp->ptank = RpPTankAtomicCreate(zp->max_particles, |
| 246 | rpPTANKDFLAGPOSITION | rpPTANKDFLAGCOLOR | rpPTANKDFLAGSIZE | |
| 247 | rpPTANKDFLAGVTX2TEXCOORDS | rpPTANKDFLAGARRAY, |
| 248 | 0); |
| 249 | |
| 250 | RwFrame* frame = RwFrameCreate(); |
| 251 | RwMatrixSetIdentity(&frame->modelling); |
| 252 | RpAtomicSetFrame(zp->ptank, frame); |
| 253 | |
| 254 | RpMaterialSetTexture(zp->ptank->geometry->matList.materials[0], tex); |
| 255 | |
| 256 | RPATOMICPTANKPLUGINDATA(zp->ptank)->publicData.srcBlend = 5; |
| 257 | RPATOMICPTANKPLUGINDATA(zp->ptank)->publicData.dstBlend = 2; |
| 258 | RPATOMICPTANKPLUGINDATA(zp->ptank)->instFlags |= rpPTANKIFLAGALPHABLENDING; |
| 259 | RPATOMICPTANKPLUGINDATA(zp->ptank)->publicData.vertexAlphaBlend = 1; |
| 260 | |
| 261 | sBubbleData = (BubbleData*)xMemPushTemp(zp->max_particles * sizeof(BubbleData)); |
| 262 | } |
| 263 | |
| 264 | static void zParPTankMenuBubbleCreate(zParPTank* zp, U32 max_particles, |
| 265 | zParPTankUpdateCallback update) |
no test coverage detected