source-engine/engine/decal_clip.h

74 lines
1.7 KiB
C
Raw Normal View History

2020-04-23 00:56:21 +08:00
//========= 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