/* ============= R_DrawViewModel -- johnfitz -- gutted ============= */ void R_DrawViewModel (void) { if (!r_drawviewmodel.value || !r_drawentities.value || chase_active.value) return; if (cl.items & IT_INVISIBILITY || cl.stats[STAT_HEALTH] <= 0) return; currententity = &cl.viewent; if (!currententity->model) return; //johnfitz -- this fixes a crash if (currententity->model->type != mod_alias) return; //johnfitz // hack the depth range to prevent view model from poking into walls VkViewport viewport; viewport.x = 0; viewport.y = 0; viewport.width = vid.width; viewport.height = vid.height; viewport.minDepth = 0.0f; viewport.maxDepth = 0.3f; vkCmdSetViewport(vulkan_globals.command_buffer, 0, 1, &viewport); R_DrawAliasModel (currententity); viewport.minDepth = 0.0f; viewport.maxDepth = 1.0f; vkCmdSetViewport(vulkan_globals.command_buffer, 0, 1, &viewport); }
/* ============= R_DrawViewModel -- johnfitz -- gutted ============= */ void R_DrawViewModel (void) { if (!r_drawviewmodel.value || !r_drawentities.value || chase_active.value) return; if (cl.items & IT_INVISIBILITY || cl.stats[STAT_HEALTH] <= 0) return; if (vr_enabled.value && vr_crosshair.value) VR_ShowCrosshair(); currententity = &cl.viewent; if (!currententity->model) return; //johnfitz -- this fixes a crash if (currententity->model->type != mod_alias) return; //johnfitz // hack the depth range to prevent view model from poking into walls glDepthRange (0, 0.3); R_DrawAliasModel (currententity); glDepthRange (0, 1); }
void R_DrawAliasBatchPass (entity_t **ents, int numents, qbool showtris) { int i; gltexture_t *lasttexture = NULL; gltexture_t *lastfullbright = NULL; if (!numents) return; if (showtris) GL_TexEnv (GL_TEXTURE0_ARB, GL_TEXTURE_2D, GL_REPLACE); else if (gl_overbright.value) GL_TexEnv (GL_TEXTURE0_ARB, GL_TEXTURE_2D, GL_RGB_SCALE_ARB); else GL_TexEnv (GL_TEXTURE0_ARB, GL_TEXTURE_2D, GL_MODULATE); for (i = 0; i < numents; i++) { entity_t *ent = ents[i]; aliasstate_t *state = &ent->aliasstate; aliashdr_t *hdr = Mod_Extradata (ent->model); // we need a separate test for culling here as r_shadows mode doesn't cull if (ent->visframe != r_framecount) continue; if (!showtris && ((state->tx != lasttexture) || (state->fb != lastfullbright))) { if (state->fb) { GL_TexEnv (GL_TEXTURE1_ARB, GL_TEXTURE_2D, GL_ADD); GL_BindTexture (GL_TEXTURE1_ARB, state->fb); } else GL_TexEnv (GL_TEXTURE1_ARB, GL_TEXTURE_2D, GL_NONE); GL_BindTexture (GL_TEXTURE0_ARB, state->tx); lasttexture = state->tx; lastfullbright = state->fb; } // OK, this works better in GL... go figure... R_DrawAliasModel (ent, hdr, state, showtris); } GL_TexEnv (GL_TEXTURE1_ARB, GL_TEXTURE_2D, GL_NONE); GL_TexEnv (GL_TEXTURE0_ARB, GL_TEXTURE_2D, GL_REPLACE); qglColor4f (1, 1, 1, 1); // go back to the world matrix qglLoadMatrixf (r_world_matrix.m16); }
/* ============= R_DrawEntitiesOnList ============= */ void R_DrawEntitiesOnList (void) { int i; if (!r_drawentities->value) return; // draw sprites seperately, because of alpha blending for (i=0 ; i<cl_numvisedicts ; i++) { currententity = cl_visedicts[i]; // 2000-01-09 ChaseCam fix by FrikaC start if (currententity == &cl_entities[cl.viewentity]) { // chase_active->value not checked as player model is necessary for shadows currententity->angles[0] *= 0.3; } // 2000-01-09 ChaseCam fix by FrikaC end switch (currententity->model->type) { case mod_alias: R_DrawAliasModel (currententity); break; case mod_brush: R_DrawBrushModel (currententity); break; default: break; } } for (i=0 ; i<cl_numvisedicts ; i++) { currententity = cl_visedicts[i]; switch (currententity->model->type) { case mod_sprite: R_DrawSpriteModel (currententity); break; } } }
/** * @brief Draws the list of entities * @param[in,out] ents The list of entities that are going to get rendered * @sa R_GetEntityLists */ void R_DrawMeshEntities (entity_t* ents) { entity_t* e; e = ents; while (e) { switch (e->model->type) { case mod_alias_md2: case mod_alias_md3: case mod_obj: R_DrawAliasModel(e); break; default: break; } e = e->next; } }
/* ============= R_DrawEntitiesOnList ============= */ void R_DrawEntitiesOnList (void) { int i; if (!r_drawentities.to_bool()) return; // draw sprites seperately, because of alpha blending for (i=0 ; i<cl_numvisedicts ; i++) { currententity = cl_visedicts[i]; switch (currententity->model->type) { case mod_alias: R_DrawAliasModel (currententity); break; case mod_brush: R_DrawBrushModel (currententity); break; default: break; } } for (i=0 ; i<cl_numvisedicts ; i++) { currententity = cl_visedicts[i]; switch (currententity->model->type) { case mod_sprite: R_DrawSpriteModel (currententity); break; default: break; } } }
/* ============= R_DrawViewModel -- johnfitz -- gutted ============= */ void R_DrawViewModel (void) { if (chase_active.value) return; if (!r_drawviewmodel.value || !r_drawentities.value ) return; if (cl.stats[STAT_HEALTH] <= 0) return; // only draw crosshair if the player model is being drawn if(vr_enabled.value && vr_crosshair.value) VR_ShowCrosshair(); if (cl.items & IT_INVISIBILITY) return; currententity = &cl.viewent; if (!currententity->model) return; //johnfitz -- this fixes a crash if (currententity->model->type != mod_alias) return; //johnfitz // hack the depth range to prevent view model from poking into walls // JM - turned off this hack because it doesn't look right in 3d // also the axe going right into enemies is awesome //glDepthRange (0, 0.3); R_DrawAliasModel (currententity); //glDepthRange (0, 1); }
/* ============= R_DrawEntitiesOnList ============= */ void R_DrawEntitiesOnList (qboolean alphapass) //johnfitz -- added parameter { int i; if (!r_drawentities.value) return; //johnfitz -- sprites are not a special case for (i=0 ; i<cl_numvisedicts ; i++) { currententity = cl_visedicts[i]; //johnfitz -- if alphapass is true, draw only alpha entites this time //if alphapass is false, draw only nonalpha entities this time if ((ENTALPHA_DECODE(currententity->alpha) < 1 && !alphapass) || (ENTALPHA_DECODE(currententity->alpha) == 1 && alphapass)) continue; //johnfitz -- chasecam if (currententity == &cl_entities[cl.viewentity]) currententity->angles[0] *= 0.3; //johnfitz switch (currententity->model->type) { case mod_alias: R_DrawAliasModel (currententity); break; case mod_brush: R_DrawBrushModel (currententity); break; case mod_sprite: R_DrawSpriteModel (currententity); break; } } }
/* ============= R_DrawViewModel ============= */ void R_DrawViewModel (void) { float ambient[4], diffuse[4]; int j; int lnum; vec3_t dist; float add; dlight_t *dl; int ambientlight, shadelight; if (!r_drawviewmodel.value) return; if (chase_active.value) return; if (envmap) return; if (!r_drawentities.value) return; if (cl.items & IT_INVISIBILITY) return; if (cl.stats[STAT_HEALTH] <= 0) return; currententity = &cl.viewent; if (!currententity->model) return; j = R_LightPoint (currententity->origin); if (j < 24) j = 24; // allways give some light on gun ambientlight = j; shadelight = j; // add dynamic lights for (lnum=0 ; lnum<MAX_DLIGHTS ; lnum++) { dl = &cl_dlights[lnum]; if (!dl->radius) continue; if (!dl->radius) continue; if (dl->die < cl.time) continue; VectorSubtract (currententity->origin, dl->origin, dist); add = dl->radius - Length(dist); if (add > 0) ambientlight += add; } ambient[0] = ambient[1] = ambient[2] = ambient[3] = (float)ambientlight / 128; diffuse[0] = diffuse[1] = diffuse[2] = diffuse[3] = (float)shadelight / 128; // hack the depth range to prevent view model from poking into walls glDepthRange (gldepthmin, gldepthmin + 0.3*(gldepthmax-gldepthmin)); R_DrawAliasModel (currententity); glDepthRange (gldepthmin, gldepthmax); }
/* ============= R_DrawViewModel ============= */ void R_DrawViewModel (void) { if (!r_drawviewmodel->value) return; if (chase_active->value) return; if (envmap) return; if (!r_drawentities->value) return; if (cl.items & IT_INVISIBILITY) return; if (cl.stats[STAT_HEALTH] <= 0) return; currententity = &cl.viewent; if (!currententity->model) return; // 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes start /* j = R_LightPoint (currententity->origin); if (j < 24) j = 24; // always give some light on gun ambientlight = j; shadelight = j; // add dynamic lights for (lnum=0 ; lnum<MAX_DLIGHTS ; lnum++) { dl = &cl_dlights[lnum]; if (!dl->radius) continue; if (!dl->radius) continue; if (dl->die < cl.time) continue; VectorSubtract (currententity->origin, dl->origin, dist); add = dl->radius - Length(dist); if (add > 0) ambientlight += add; } ambient[0] = ambient[1] = ambient[2] = ambient[3] = (float)ambientlight / 128; diffuse[0] = diffuse[1] = diffuse[2] = diffuse[3] = (float)shadelight / 128; */ // 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes end // hack the depth range to prevent view model from poking into walls glDepthRange (gldepthmin, gldepthmin + 0.3*(gldepthmax-gldepthmin)); R_DrawAliasModel (currententity); glDepthRange (gldepthmin, gldepthmax); }