You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.7 KiB
74 lines
1.7 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef DECAL_CLIP_H
|
||
|
#define DECAL_CLIP_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#include "mathlib/vector.h"
|
||
|
#include "mathlib/vector2d.h"
|
||
|
#include "mathlib/compressed_vector.h"
|
||
|
#include "materialsystem/imaterialsystem.h"
|
||
|
#include "materialsystem/imaterial.h"
|
||
|
#include "filesystem.h"
|
||
|
#include "decal_private.h"
|
||
|
#include "gl_model_private.h"
|
||
|
|
||
|
|
||
|
#define MAX_DECALCLIPVERT 48
|
||
|
|
||
|
|
||
|
class CDecalVert
|
||
|
{
|
||
|
public:
|
||
|
Vector m_vPos;
|
||
|
int m_decalIndex; // used by the cache code
|
||
|
|
||
|
// These are the texcoords for the decal itself
|
||
|
Vector2D m_ctCoords;
|
||
|
// Lightmap texcoords for the decal.
|
||
|
Vector2D m_cLMCoords;
|
||
|
};
|
||
|
|
||
|
|
||
|
// Clip pOutVerts/nStartVerts into the decal's texture space.
|
||
|
CDecalVert* R_DoDecalSHClip(
|
||
|
CDecalVert *pInVerts,
|
||
|
CDecalVert *pOutVerts,
|
||
|
decal_t *pDecal,
|
||
|
int nStartVerts,
|
||
|
const Vector &vecNormal );
|
||
|
|
||
|
// Generate clipped vertex list for decal pdecal projected onto polygon psurf
|
||
|
CDecalVert* R_DecalVertsClip(
|
||
|
CDecalVert *pOutVerts,
|
||
|
decal_t *pDecal,
|
||
|
SurfaceHandle_t surfID,
|
||
|
IMaterial *pMaterial );
|
||
|
|
||
|
// Compute the unscaled basis for the decal.
|
||
|
void R_DecalComputeBasis(
|
||
|
Vector const& surfaceNormal,
|
||
|
Vector const* pSAxis,
|
||
|
Vector* textureSpaceBasis );
|
||
|
|
||
|
// Compute the basis for the decal and scale the axes so the whole decal fits
|
||
|
// into the (0,0) - (1,1) range.
|
||
|
void R_SetupDecalTextureSpaceBasis(
|
||
|
decal_t *pDecal,
|
||
|
Vector &vSurfNormal,
|
||
|
IMaterial *pMaterial,
|
||
|
Vector textureSpaceBasis[3],
|
||
|
float decalWorldScale[2] );
|
||
|
|
||
|
extern ALIGN16 CDecalVert g_DecalClipVerts[MAX_DECALCLIPVERT] ALIGN16_POST;
|
||
|
|
||
|
#endif // DECAL_CLIP_H
|