mirror of
https://github.com/Gigaslav/HL2Overcharged.git
synced 2026-01-06 10:10:03 +03:00
Init commit
This commit is contained in:
88
game/client/splinepatch.h
Normal file
88
game/client/splinepatch.h
Normal file
@@ -0,0 +1,88 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: A little helper class that computes a spline patch
|
||||
//
|
||||
// $Workfile: $
|
||||
// $Date: $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// $Log: $
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef SPLINEPATCH_H
|
||||
#define SPLINEPATCH_H
|
||||
#pragma once
|
||||
|
||||
#include "mathlib/vector4d.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Spline patch:
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class CSplinePatch
|
||||
{
|
||||
public:
|
||||
// The last argument represents the number of float channels in addition to position
|
||||
CSplinePatch( );
|
||||
~CSplinePatch();
|
||||
|
||||
// Call this to initialize the patch
|
||||
void Init( int w, int h, int extraChannels );
|
||||
|
||||
// 0 = linear, 1 = spliney!
|
||||
void SetLinearBlend( float factor );
|
||||
|
||||
// Hooks the patch up to externally controlled data...
|
||||
void SetControlPositions( Vector const** pPositions );
|
||||
void SetChannelData( int channel, float* pChannel );
|
||||
|
||||
// This interface isn't wonderful; it's limited by optimization issues...
|
||||
|
||||
// Call this before querying the patch for data at (i,j)
|
||||
void SetupPatchQuery( float i, float j );
|
||||
|
||||
// Gets the point and normal at (i,j) specified above
|
||||
void GetPointAndNormal( Vector& position, Vector& normal ) const;
|
||||
|
||||
// Gets at other channels
|
||||
float GetChannel( int channel ) const;
|
||||
|
||||
// Gets at the dimensions
|
||||
int Width() const { return m_Width; }
|
||||
int Height() const { return m_Height; }
|
||||
|
||||
public:
|
||||
// The integer + float values for the patch query
|
||||
int m_is, m_it;
|
||||
float m_fs, m_ft;
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
MAX_CHANNELS = 4
|
||||
};
|
||||
|
||||
// no copy constructor
|
||||
CSplinePatch( const CSplinePatch& );
|
||||
|
||||
// Computes indices of the samples to read for this interpolation
|
||||
void ComputeIndices( );
|
||||
|
||||
// input data
|
||||
int m_Width;
|
||||
int m_Height;
|
||||
int m_ChannelCount;
|
||||
Vector const** m_ppPositions;
|
||||
float const* m_pChannel[MAX_CHANNELS];
|
||||
|
||||
// temporary data used for a single patch query
|
||||
int m_SampleIndices[4][4];
|
||||
Vector4D m_SVec;
|
||||
Vector4D m_TVec;
|
||||
|
||||
float m_LinearFactor;
|
||||
};
|
||||
|
||||
#endif // SPLINEPATCH_H
|
||||
Reference in New Issue
Block a user