Counter Strike : Global Offensive Source Code
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.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//
#ifndef LIGHTMAP_H
#define LIGHTMAP_H
#pragma once
#include "mathlib/bumpvects.h"
#include "bsplib.h"
typedef struct { dface_t *faces[2]; Vector interface_normal; qboolean coplanar; } edgeshare_t;
extern edgeshare_t edgeshare[MAX_MAP_EDGES];
//==============================================
// This is incremented each time BuildFaceLights and FinalLightFace
// are called. It's used for a status bar in WorldCraft.
extern int g_iCurFace;
extern int vertexref[MAX_MAP_VERTS]; extern int *vertexface[MAX_MAP_VERTS];
struct faceneighbor_t { int numneighbors; // neighboring faces that share vertices
int *neighbor; // neighboring face list (max of 64)
Vector *normal; // adjusted normal per vertex
Vector facenormal; // face normal
bool bHasDisp; // is this surface a displacement surface???
};
extern faceneighbor_t faceneighbor[MAX_MAP_FACES];
//==============================================
struct sample_t { // in local luxel space
winding_t *w; int s, t; Vector2D coord; Vector2D mins; Vector2D maxs; // in world units
Vector pos; Vector normal; float area; };
struct facelight_t { // irregularly shaped light sample data, clipped by face and luxel grid
int numsamples; sample_t *sample; LightingValue_t *light[MAXLIGHTMAPS][NUM_BUMP_VECTS+1]; // result of direct illumination, indexed by sample
// regularly spaced lightmap grid
int numluxels; Vector *luxel; // world space position of luxel
Vector *luxelNormals; // world space normal of luxel
float worldAreaPerLuxel; };
extern directlight_t *activelights; extern directlight_t *freelights;
extern facelight_t facelight[MAX_MAP_FACES]; extern int numdlights;
//==============================================
struct lightinfo_t { vec_t facedist; Vector facenormal;
Vector facemid; // world coordinates of center
Vector modelorg; // for origined bmodels
Vector luxelOrigin; Vector worldToLuxelSpace[2]; // s = (world - luxelOrigin) . worldToLuxelSpace[0], t = (world - luxelOrigin) . worldToLuxelSpace[1]
Vector luxelToWorldSpace[2]; // world = luxelOrigin + s * luxelToWorldSpace[0] + t * luxelToWorldSpace[1]
int facenum; dface_t *face;
int isflat; int hasbumpmap; };
struct SSE_SampleInfo_t { int m_FaceNum; int m_WarnFace; dface_t *m_pFace; facelight_t *m_pFaceLight; int m_LightmapWidth; int m_LightmapHeight; int m_LightmapSize; int m_NormalCount; int m_iThread; texinfo_t *m_pTexInfo; bool m_IsDispFace;
int m_NumSamples; int m_NumSampleGroups; int m_Clusters[4]; FourVectors m_Points; FourVectors m_PointNormals[ NUM_BUMP_VECTS + 1 ]; };
extern void InitLightinfo( lightinfo_t *l, int facenum );
void FreeDLights();
void ExportDirectLightsToWorldLights();
float CalculateAmbientOcclusion( Vector *pPosition, Vector *pNormal ); fltx4 CalculateAmbientOcclusion4( const FourVectors &position4, const FourVectors &normal4, int static_prop_index_to_ignore );
float SoftenCosineTerm( float flDot ); fltx4 SoftenCosineTerm( fltx4 dots );
#endif // LIGHTMAP_H
|