- // don't draw if view origin is behind it
- if (DotProduct(org, matrix3[0]) < (DotProduct(r_origin, matrix3[0]) - 1.0f))
- return true;
-
- if (currentrenderentity->scale != 1)
- {
- VectorScale(matrix3[1], currentrenderentity->scale, matrix3[1]);
- VectorScale(matrix3[2], currentrenderentity->scale, matrix3[2]);
- }
-
- VectorCopy(matrix3[1], right);
- VectorCopy(matrix3[2], up);
- return false;
-}
-
-void R_ClipSprite (void)
-{
- vec3_t org, right, up;
-
- if (currentrenderentity->frameblend[0].frame < 0)
- return;
-
- if (R_SpriteSetup(currentrenderentity->model->sprnum_type, org, right, up))
- return;
-
- // LordHavoc: interpolated sprite rendering
- R_ClipSpriteImage(org, right, up);
-}
-
-int spritepolyindex[6] = {0, 1, 2, 0, 2, 3};
-
-void GL_DrawSpriteImage (int fog, mspriteframe_t *frame, int texture, vec3_t origin, vec3_t up, vec3_t right, float red, float green, float blue, float alpha)
-{
- rmeshinfo_t m;
- float v[4][4], st[4][2];
- // LordHavoc: this meshinfo must match up with R_Mesh_DrawDecal
- // LordHavoc: the commented out lines are hardwired behavior in R_Mesh_DrawDecal
- memset(&m, 0, sizeof(m));
- m.transparent = true;
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
- if ((currentrenderentity->effects & EF_ADDITIVE)
- || (currentrenderentity->model->flags & EF_ADDITIVE)
- || fog)
- m.blendfunc2 = GL_ONE;
- m.numtriangles = 2;
- m.index = spritepolyindex;
- m.numverts = 4;
- m.vertex = &v[0][0];
- m.vertexstep = sizeof(float[4]);
- m.cr = red;
- m.cg = green;
- m.cb = blue;
- m.ca = alpha;
- m.tex[0] = texture;
- m.texcoords[0] = &st[0][0];
- m.texcoordstep[0] = sizeof(float[2]);
-
- v[0][0] = origin[0] + frame->down * up[0] + frame->left * right[0];
- v[0][1] = origin[1] + frame->down * up[1] + frame->left * right[1];
- v[0][2] = origin[2] + frame->down * up[2] + frame->left * right[2];
- v[1][0] = origin[0] + frame->up * up[0] + frame->left * right[0];
- v[1][1] = origin[1] + frame->up * up[1] + frame->left * right[1];
- v[1][2] = origin[2] + frame->up * up[2] + frame->left * right[2];
- v[2][0] = origin[0] + frame->up * up[0] + frame->right * right[0];
- v[2][1] = origin[1] + frame->up * up[1] + frame->right * right[1];
- v[2][2] = origin[2] + frame->up * up[2] + frame->right * right[2];
- v[3][0] = origin[0] + frame->down * up[0] + frame->right * right[0];
- v[3][1] = origin[1] + frame->down * up[1] + frame->right * right[1];
- v[3][2] = origin[2] + frame->down * up[2] + frame->right * right[2];
- st[0][0] = 0;
- st[0][1] = 1;
- st[1][0] = 0;
- st[1][1] = 0;
- st[2][0] = 1;
- st[2][1] = 0;
- st[3][0] = 1;
- st[3][1] = 1;