Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

223 lines
5.5 KiB

#include "utlvector.h"
#include "materialsystem/imaterialsystem.h"
#include "shaderapi/ishaderutil.h"
#include "shaderapi/ishaderapi.h"
#include "materialsystem/imesh.h"
#include "materialsystem/idebugtextureinfo.h"
#include "materialsystem/deformations.h"
#include "meshgl.h"
#include "shaderapigl.h"
#include "shaderapidevicegl.h"
#include "shadershadowgl.h"
//-----------------------------------------------------------------------------
// The main GL Shader util interface
//-----------------------------------------------------------------------------
IShaderUtil* g_pShaderUtil;
//-----------------------------------------------------------------------------
// Factory to return from SetMode
//-----------------------------------------------------------------------------
static void* ShaderInterfaceFactory( const char *pInterfaceName, int *pReturnCode )
{
if ( pReturnCode )
{
*pReturnCode = IFACE_OK;
}
if ( !Q_stricmp( pInterfaceName, SHADER_DEVICE_INTERFACE_VERSION ) )
return static_cast< IShaderDevice* >( &s_ShaderDeviceGL );
if ( !Q_stricmp( pInterfaceName, SHADERAPI_INTERFACE_VERSION ) )
return static_cast< IShaderAPI* >( &g_ShaderAPIGL );
if ( !Q_stricmp( pInterfaceName, SHADERSHADOW_INTERFACE_VERSION ) )
return static_cast< IShaderShadow* >( &g_ShaderShadow );
if ( pReturnCode )
{
*pReturnCode = IFACE_FAILED;
}
return NULL;
}
//-----------------------------------------------------------------------------
//
// Shader device empty
//
//-----------------------------------------------------------------------------
void CShaderDeviceGL::GetWindowSize( int &width, int &height ) const
{
width = 0;
height = 0;
}
void CShaderDeviceGL::GetBackBufferDimensions( int& width, int& height ) const
{
width = 1600;
height = 900;
}
// Use this to spew information about the 3D layer
void CShaderDeviceGL::SpewDriverInfo() const
{
Warning("GL shader\n");
}
// Creates/ destroys a child window
bool CShaderDeviceGL::AddView( void* hwnd )
{
return true;
}
void CShaderDeviceGL::RemoveView( void* hwnd )
{
}
// Activates a view
void CShaderDeviceGL::SetView( void* hwnd )
{
}
void CShaderDeviceGL::ReleaseResources()
{
}
void CShaderDeviceGL::ReacquireResources()
{
}
// Creates/destroys Mesh
IMesh* CShaderDeviceGL::CreateStaticMesh( VertexFormat_t fmt, const char *pTextureBudgetGroup, IMaterial * pMaterial )
{
return &m_Mesh;
}
void CShaderDeviceGL::DestroyStaticMesh( IMesh* mesh )
{
}
// Creates/destroys static vertex + index buffers
IVertexBuffer *CShaderDeviceGL::CreateVertexBuffer( ShaderBufferType_t type, VertexFormat_t fmt, int nVertexCount, const char *pTextureBudgetGroup )
{
return ( type == SHADER_BUFFER_TYPE_STATIC || type == SHADER_BUFFER_TYPE_STATIC_TEMP ) ? &m_Mesh : &m_DynamicMesh;
}
void CShaderDeviceGL::DestroyVertexBuffer( IVertexBuffer *pVertexBuffer )
{
}
IIndexBuffer *CShaderDeviceGL::CreateIndexBuffer( ShaderBufferType_t bufferType, MaterialIndexFormat_t fmt, int nIndexCount, const char *pTextureBudgetGroup )
{
switch( bufferType )
{
case SHADER_BUFFER_TYPE_STATIC:
case SHADER_BUFFER_TYPE_STATIC_TEMP:
return &m_Mesh;
default:
Assert( 0 );
case SHADER_BUFFER_TYPE_DYNAMIC:
case SHADER_BUFFER_TYPE_DYNAMIC_TEMP:
return &m_DynamicMesh;
}
}
void CShaderDeviceGL::DestroyIndexBuffer( IIndexBuffer *pIndexBuffer )
{
}
IVertexBuffer *CShaderDeviceGL::GetDynamicVertexBuffer( int streamID, VertexFormat_t vertexFormat, bool bBuffered )
{
return &m_DynamicMesh;
}
IIndexBuffer *CShaderDeviceGL::GetDynamicIndexBuffer( MaterialIndexFormat_t fmt, bool bBuffered )
{
return &m_Mesh;
}
//-----------------------------------------------------------------------------
//
// CShaderDeviceMgrGL
//
//-----------------------------------------------------------------------------
bool CShaderDeviceMgrGL::Connect( CreateInterfaceFn factory )
{
// So others can access it
g_pShaderUtil = (IShaderUtil*)factory( SHADER_UTIL_INTERFACE_VERSION, NULL );
return true;
}
void CShaderDeviceMgrGL::Disconnect()
{
g_pShaderUtil = NULL;
}
void *CShaderDeviceMgrGL::QueryInterface( const char *pInterfaceName )
{
if ( !Q_stricmp( pInterfaceName, SHADER_DEVICE_MGR_INTERFACE_VERSION ) )
return static_cast< IShaderDeviceMgr* >( this );
if ( !Q_stricmp( pInterfaceName, MATERIALSYSTEM_HARDWARECONFIG_INTERFACE_VERSION ) )
return static_cast< IMaterialSystemHardwareConfig* >( &g_ShaderAPIGL );
return NULL;
}
InitReturnVal_t CShaderDeviceMgrGL::Init()
{
return INIT_OK;
}
void CShaderDeviceMgrGL::Shutdown()
{
}
// Sets the adapter
bool CShaderDeviceMgrGL::SetAdapter( int nAdapter, int nFlags )
{
return true;
}
// FIXME: Is this a public interface? Might only need to be private to shaderapi
CreateInterfaceFn CShaderDeviceMgrGL::SetMode( void *hWnd, int nAdapter, const ShaderDeviceInfo_t& mode )
{
return ShaderInterfaceFactory;
}
// Gets the number of adapters...
int CShaderDeviceMgrGL::GetAdapterCount() const
{
return 0;
}
bool CShaderDeviceMgrGL::GetRecommendedConfigurationInfo( int nAdapter, int nDXLevel, KeyValues *pKeyValues )
{
return true;
}
// Returns info about each adapter
void CShaderDeviceMgrGL::GetAdapterInfo( int adapter, MaterialAdapterInfo_t& info ) const
{
memset( &info, 0, sizeof( info ) );
info.m_nDXSupportLevel = 90;
}
// Returns the number of modes
int CShaderDeviceMgrGL::GetModeCount( int nAdapter ) const
{
return 0;
}
// Returns mode information..
void CShaderDeviceMgrGL::GetModeInfo( ShaderDisplayMode_t *pInfo, int nAdapter, int nMode ) const
{
}
void CShaderDeviceMgrGL::GetCurrentModeInfo( ShaderDisplayMode_t* pInfo, int nAdapter ) const
{
}