mirror of
https://github.com/nillerusr/source-engine.git
synced 2025-06-09 00:38:04 +00:00
Compare commits
161 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
29985681a1 | ||
![]() |
53cb673849 | ||
![]() |
f72cf388aa | ||
![]() |
87150cc028 | ||
![]() |
704b8aa98e | ||
![]() |
c4f13f04a8 | ||
![]() |
f402495b24 | ||
![]() |
b45295ef7c | ||
![]() |
327ea9dee7 | ||
![]() |
ade05ab153 | ||
![]() |
bfe1baf323 | ||
![]() |
a84ee9062c | ||
![]() |
7c863a351b | ||
![]() |
8fcac9c164 | ||
![]() |
97f6cdfbe2 | ||
![]() |
7a3b3cd96f | ||
![]() |
90e2937b32 | ||
![]() |
23204fcc73 | ||
![]() |
abb470a471 | ||
![]() |
ab527be41a | ||
![]() |
cd1c5bd397 | ||
![]() |
8f8c2556b7 | ||
![]() |
b8558de63e | ||
![]() |
047f8b1185 | ||
![]() |
035861bf52 | ||
![]() |
a7096679aa | ||
![]() |
1f3f05d14a | ||
![]() |
c444095293 | ||
![]() |
57f6bf6eea | ||
![]() |
2636f1a66d | ||
![]() |
e7addfc9ad | ||
![]() |
6447101546 | ||
![]() |
efeda62add | ||
![]() |
b7bd94c52e | ||
![]() |
1d4f7fb2cc | ||
![]() |
b5d6051d98 | ||
![]() |
b73f3b70fa | ||
![]() |
2d3f31d37e | ||
![]() |
5ea9937457 | ||
![]() |
601cfff164 | ||
![]() |
4f10928299 | ||
![]() |
02a3c641a6 | ||
![]() |
7f267853f4 | ||
![]() |
3d0025b594 | ||
![]() |
b6cb0c2696 | ||
![]() |
8acf608b4d | ||
![]() |
0235b1ed4d | ||
![]() |
226d22b896 | ||
![]() |
8b1be47f4d | ||
![]() |
ed901ead1a | ||
![]() |
a6c26f4271 | ||
![]() |
523f4e9eaa | ||
![]() |
697a9f34f9 | ||
![]() |
3b1b08fd93 | ||
![]() |
271c9993da | ||
![]() |
1a584655d9 | ||
![]() |
965ef97212 | ||
![]() |
30f1e02cda | ||
![]() |
657f59ada3 | ||
![]() |
e3edbc2d96 | ||
![]() |
7ceba77616 | ||
![]() |
823e437005 | ||
![]() |
a63138347b | ||
![]() |
852f4052be | ||
![]() |
38fdbf18c2 | ||
![]() |
d9eacc4db7 | ||
![]() |
54c339bdc0 | ||
![]() |
699271f212 | ||
![]() |
ba695d2092 | ||
![]() |
f2fa241ae6 | ||
![]() |
231c1e16b2 | ||
![]() |
1ccbe2bbb6 | ||
![]() |
7d00b0404f | ||
![]() |
89af23bdfb | ||
![]() |
99cad5f7d1 | ||
![]() |
d719a18fa7 | ||
![]() |
e392686d3c | ||
![]() |
d23ae89574 | ||
![]() |
f3b17b77e5 | ||
![]() |
3fcf986853 | ||
![]() |
b2d168c701 | ||
![]() |
92028d4e80 | ||
![]() |
4f063c4053 | ||
![]() |
dcdcf6b733 | ||
![]() |
ceda7d8ad0 | ||
![]() |
f1de24b0b2 | ||
![]() |
d56e855742 | ||
![]() |
46fc2b7090 | ||
![]() |
e998499068 | ||
![]() |
4e87659a1d | ||
![]() |
9008da4f43 | ||
![]() |
5e6e7503bb | ||
![]() |
c0b63d602e | ||
![]() |
88418ebb4d | ||
![]() |
db6a9839fe | ||
![]() |
c970f28804 | ||
![]() |
d06435a8bc | ||
![]() |
6a8da7084b | ||
![]() |
9075ccd9e4 | ||
![]() |
6e7915b6c3 | ||
![]() |
5198d808fa | ||
![]() |
1e3389c70d | ||
![]() |
e84ad80c46 | ||
![]() |
30a97f855e | ||
![]() |
1d39be1a97 | ||
![]() |
92a1eae995 | ||
![]() |
cc7541f132 | ||
![]() |
9919f7ee95 | ||
![]() |
c7056b1aa4 | ||
![]() |
ec3ab23a0e | ||
![]() |
2aa14bb24c | ||
![]() |
e4f5549cbd | ||
![]() |
e9af8c6876 | ||
![]() |
e10f29854e | ||
![]() |
c3417ca08d | ||
![]() |
0fda062e8e | ||
![]() |
67ef35bb78 | ||
![]() |
c48da00b92 | ||
![]() |
2b2ca63b48 | ||
![]() |
efbcaf7820 | ||
![]() |
dda12fcec6 | ||
![]() |
70cc94bd01 | ||
![]() |
bca8a497ad | ||
![]() |
12716fd07f | ||
![]() |
474df720e7 | ||
![]() |
746aa8b1cc | ||
![]() |
0ffcbff303 | ||
![]() |
cf467ff7c8 | ||
![]() |
591534e7e4 | ||
![]() |
6428e90fa2 | ||
![]() |
3345902612 | ||
![]() |
a08b6ae7bf | ||
![]() |
64f7bf9f96 | ||
![]() |
c4b93b30d7 | ||
![]() |
41aa50e66e | ||
![]() |
9586dc98e4 | ||
![]() |
548be38a0b | ||
![]() |
0df7838ee1 | ||
![]() |
17ff01c7ab | ||
![]() |
c69afba381 | ||
![]() |
88cf25ff80 | ||
![]() |
bfb5b44d38 | ||
![]() |
f735e7a036 | ||
![]() |
a15db00bc0 | ||
![]() |
de32c758c1 | ||
![]() |
fed2719657 | ||
![]() |
d7a2277804 | ||
![]() |
ecfe257da2 | ||
![]() |
02c60cf2c7 | ||
![]() |
ef9f4b2965 | ||
![]() |
edb08661f2 | ||
![]() |
3458c36d5a | ||
![]() |
3d43e9fe3a | ||
![]() |
b6de5bb712 | ||
![]() |
e26b40d889 | ||
![]() |
f63849bb34 | ||
![]() |
bc909e9f96 | ||
![]() |
ff2211f0ad | ||
![]() |
af8c358ce9 | ||
![]() |
8404418202 | ||
![]() |
eff77f0a0a |
58
.github/workflows/build.yml
vendored
58
.github/workflows/build.yml
vendored
@ -1,16 +1,10 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "*"
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build-linux-i386:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@ -19,7 +13,7 @@ jobs:
|
||||
scripts/build-ubuntu-i386.sh
|
||||
|
||||
build-linux-amd64:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@ -28,7 +22,7 @@ jobs:
|
||||
scripts/build-ubuntu-amd64.sh
|
||||
|
||||
build-android-armv7a:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@ -42,6 +36,17 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build windows-i386
|
||||
run: |
|
||||
git submodule init && git submodule update
|
||||
./waf.bat configure -T debug --32bits
|
||||
./waf.bat build
|
||||
|
||||
build-windows-amd64:
|
||||
runs-on: windows-2019
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build windows-amd64
|
||||
run: |
|
||||
git submodule init && git submodule update
|
||||
./waf.bat configure -T debug
|
||||
@ -58,8 +63,19 @@ jobs:
|
||||
./waf.bat configure -T debug -d
|
||||
./waf.bat build
|
||||
|
||||
build-dedicated-windows-amd64:
|
||||
runs-on: windows-2019
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build dedicated windows-amd64
|
||||
run: |
|
||||
git submodule init && git submodule update
|
||||
./waf.bat configure -T debug -d
|
||||
./waf.bat build
|
||||
|
||||
build-dedicated-linux-i386:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@ -68,10 +84,28 @@ jobs:
|
||||
scripts/build-ubuntu-i386.sh -d
|
||||
|
||||
build-dedicated-linux-amd64:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build dedicated linux-amd64
|
||||
run: |
|
||||
scripts/build-ubuntu-amd64.sh -d
|
||||
|
||||
build-macos-amd64:
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build macos-amd64
|
||||
run: |
|
||||
scripts/build-macos-amd64.sh
|
||||
|
||||
build-dedicated-macos-amd64:
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build dedicated macos-amd64
|
||||
run: |
|
||||
scripts/build-macos-amd64.sh -d
|
||||
|
35
.github/workflows/tests.yml
vendored
35
.github/workflows/tests.yml
vendored
@ -1,16 +1,10 @@
|
||||
name: Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "*"
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
tests-linux-i386:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@ -19,7 +13,7 @@ jobs:
|
||||
scripts/tests-ubuntu-i386.sh
|
||||
|
||||
tests-linux-amd64:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@ -27,12 +21,35 @@ jobs:
|
||||
run: |
|
||||
scripts/tests-ubuntu-amd64.sh
|
||||
|
||||
tests-macos-amd64:
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run tests macos-amd64
|
||||
run: |
|
||||
scripts/tests-macos-amd64.sh
|
||||
|
||||
tests-windows-i386:
|
||||
runs-on: windows-2019
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run tests windows-i386
|
||||
run: |
|
||||
git submodule init && git submodule update
|
||||
./waf.bat configure -T release --tests --prefix=out/ --32bits
|
||||
./waf.bat install
|
||||
cd out
|
||||
$env:Path = "bin";
|
||||
./unittest.exe
|
||||
|
||||
tests-windows-amd64:
|
||||
runs-on: windows-2019
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run tests windows-amd64
|
||||
run: |
|
||||
git submodule init && git submodule update
|
||||
./waf.bat configure -T release --tests --prefix=out/
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -37,5 +37,3 @@ waf3*/
|
||||
.vscode/
|
||||
.depproj/
|
||||
source-engine.sln
|
||||
hl2/
|
||||
|
||||
|
64
.vscode/tasks.json
vendored
Normal file
64
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Configure Waf for Debug 32-bit",
|
||||
"type": "shell",
|
||||
"command": "./waf configure -T debug --prefix=build/out/",
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "./waf.bat configure -T debug --prefix=build/out/"
|
||||
},
|
||||
"osx": {
|
||||
"command": "python3 waf configure -T debug --prefix=build/out/"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Configure Waf for Debug 64-bit",
|
||||
"type": "shell",
|
||||
"command": "./waf configure -T debug --64bits --prefix=build/out/",
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "./waf.bat configure -T debug --64bits --prefix=build/out/"
|
||||
},
|
||||
"osx": {
|
||||
"command": "python3 waf configure -T debug --64bits --prefix=build/out/"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Configure Waf for Debug on Android (NDK r10e)",
|
||||
"type": "shell",
|
||||
"command": "./waf configure -T debug --android=armeabi-v7a-hard,4.9,21",
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "./waf.bat configure -T debug --android=armeabi-v7a-hard,4.9,21"
|
||||
},
|
||||
"osx": {
|
||||
"command": "python3 waf configure -T debug --android=armeabi-v7a-hard,4.9,21"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Build",
|
||||
"type": "shell",
|
||||
"command": "./waf install",
|
||||
"problemMatcher": {
|
||||
"base": "$gcc",
|
||||
"fileLocation": ["relative", "${workspaceFolder}/build"]
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"windows": {
|
||||
"command": "./waf.bat install",
|
||||
"problemMatcher": {
|
||||
"base": "$msCompile",
|
||||
"fileLocation": ["relative", "${workspaceFolder}/build"]
|
||||
}
|
||||
},
|
||||
"osx": {
|
||||
"command": "python3 waf install"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -15,7 +15,7 @@ Source code is based on TF2 2018 leak. Don't use it for commercial purposes.
|
||||
This project is using waf buildsystem. If you have waf-related questions look https://waf.io/book
|
||||
|
||||
# Features:
|
||||
- Android, OSX, FreeBSD, Windows support
|
||||
- Android, OSX, FreeBSD, Windows, Linux( glibc, musl ) support
|
||||
- Arm support( except windows )
|
||||
- 64bit support
|
||||
- Modern toolchains support
|
||||
@ -28,18 +28,17 @@ This project is using waf buildsystem. If you have waf-related questions look ht
|
||||
- Removed useless/unnecessary dependencies
|
||||
- Achivement system working without steam
|
||||
- Fixed many bugs
|
||||
- Serverbrowser works without steam
|
||||
|
||||
# Current tasks
|
||||
- Rewrite materialsystem for OpenGL render
|
||||
- dxvk-native support
|
||||
- Elbrus port
|
||||
- Bink audio support( for video_bink )
|
||||
- Rewrite serverbrowser to work without steam
|
||||
|
||||
# How to Build?
|
||||
- [Windows](https://github.com/nillerusr/source-engine/wiki/How-to-build#on-windows)
|
||||
- [Linux](https://github.com/nillerusr/source-engine/wiki/How-to-build#on-linux)
|
||||
- [For Android under Linux](https://github.com/nillerusr/source-engine/wiki/How-to-build#on-linux-for-android)
|
||||
- [Building instructions(EN)](https://github.com/nillerusr/source-engine/wiki/Source-Engine-(EN))
|
||||
- [Building instructions(RU)](https://github.com/nillerusr/source-engine/wiki/Source-Engine-(RU))
|
||||
|
||||
# Support me
|
||||
BTC: `bc1qnjq92jj9uqjtafcx2zvnwd48q89hgtd6w8a6na`
|
||||
|
@ -14,7 +14,10 @@
|
||||
#include "filesystem_init.h"
|
||||
#include "tier1/convar.h"
|
||||
#include "vstdlib/cvar.h"
|
||||
|
||||
#ifndef DEDICATED
|
||||
#include "togl/rendermechanism.h"
|
||||
#endif
|
||||
|
||||
// NOTE: This has to be the last file included! (turned off below, since this is included like a header)
|
||||
#include "tier0/memdbgon.h"
|
||||
|
@ -404,6 +404,9 @@ private:
|
||||
int m_MouseButtonDownX;
|
||||
int m_MouseButtonDownY;
|
||||
|
||||
bool m_bResetVsync;
|
||||
int m_nFramesToSkip;
|
||||
|
||||
double m_flPrevGLSwapWindowTime;
|
||||
};
|
||||
|
||||
@ -584,6 +587,9 @@ InitReturnVal_t CSDLMgr::Init()
|
||||
m_nWarpDelta = 0;
|
||||
m_bRawInput = false;
|
||||
|
||||
m_nFramesToSkip = 0;
|
||||
m_bResetVsync = false;
|
||||
|
||||
m_flPrevGLSwapWindowTime = 0.0f;
|
||||
|
||||
memset(m_pixelFormatAttribs, '\0', sizeof (m_pixelFormatAttribs));
|
||||
@ -1431,7 +1437,20 @@ void CSDLMgr::ShowPixels( CShowPixelsParams *params )
|
||||
|
||||
m_flPrevGLSwapWindowTime = tm.GetDurationInProgress().GetMillisecondsF();
|
||||
|
||||
|
||||
#ifdef ANDROID
|
||||
// ADRENO GPU MOMENT, SKIP 5 FRAMES
|
||||
if( m_bResetVsync )
|
||||
{
|
||||
if( m_nFramesToSkip <= 0 )
|
||||
{
|
||||
SDL_GL_SetSwapInterval(swapInterval);
|
||||
m_bResetVsync = false;
|
||||
}
|
||||
else
|
||||
m_nFramesToSkip--;
|
||||
}
|
||||
#endif
|
||||
|
||||
CheckGLError( __LINE__ );
|
||||
}
|
||||
#endif // DX_TO_GL_ABSTRACTION
|
||||
@ -1887,6 +1906,7 @@ void CSDLMgr::PumpWindowsMessageLoop()
|
||||
}
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
{
|
||||
m_bResetVsync = true; m_nFramesToSkip = 3;
|
||||
m_bHasFocus = true;
|
||||
SDL_ShowCursor( m_bCursorVisible ? 1 : 0 );
|
||||
CCocoaEvent theEvent;
|
||||
@ -2224,7 +2244,7 @@ GLMDisplayDB *CSDLMgr::GetDisplayDB( void )
|
||||
}
|
||||
|
||||
#ifndef OSX
|
||||
# include "glmdisplaydb_linuxwin.inl"
|
||||
#include "glmdisplaydb_linuxwin.inl"
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -24,11 +24,10 @@ def build(bld):
|
||||
source += [
|
||||
'sdlmgr.cpp'
|
||||
]
|
||||
|
||||
if bld.env.DEST_OS == 'darwin':
|
||||
source += [
|
||||
'glmrendererinfo_osx.mm'
|
||||
]
|
||||
|
||||
if bld.env.DEST_OS == 'darwin' and bld.env.GL:
|
||||
source += ['glmrendererinfo_osx.mm']
|
||||
|
||||
|
||||
if bld.env.DEST_OS == 'win32':
|
||||
source += [
|
||||
|
@ -88,14 +88,7 @@ namespace ImageLoader
|
||||
|
||||
Assert( IsFormatValidForConversion( imageFormat ) );
|
||||
|
||||
#if !defined( DX_TO_GL_ABSTRACTION ) && !defined( NO_X360_XDK )
|
||||
if ( IsPC() )
|
||||
{
|
||||
// running as a win32 tool, data is in expected order
|
||||
// for conversion code
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef _X360
|
||||
// running on 360 and converting, input data must be x86 order
|
||||
// swap to ensure conversion code gets valid data
|
||||
XGENDIANTYPE xEndian;
|
||||
@ -137,7 +130,7 @@ namespace ImageLoader
|
||||
{
|
||||
Assert( IsFormatValidForConversion( imageFormat ) );
|
||||
|
||||
#if !defined( DX_TO_GL_ABSTRACTION ) && !defined( NO_X360_XDK )
|
||||
#ifdef _X360
|
||||
// It would have been nice to use the 360 D3DFORMAT bit encodings, but the codes
|
||||
// are different for win32, and this routine is used by a win32 library to
|
||||
// manipulate 360 data, so there can be no reliance on D3DFORMAT bits
|
||||
@ -201,7 +194,7 @@ namespace ImageLoader
|
||||
{
|
||||
Assert( IsFormatValidForConversion( imageFormat ) );
|
||||
|
||||
#if !defined( DX_TO_GL_ABSTRACTION ) && !defined( NO_X360_XDK )
|
||||
#ifdef _X360
|
||||
XGENDIANTYPE xEndian;
|
||||
switch ( imageFormat )
|
||||
{
|
||||
@ -256,5 +249,4 @@ namespace ImageLoader
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -288,13 +288,11 @@ int GetNumMipMapLevels( int width, int height, int depth )
|
||||
// Turn off warning about FOURCC formats below...
|
||||
#pragma warning (disable:4063)
|
||||
|
||||
#ifdef DX_TO_GL_ABSTRACTION
|
||||
#ifndef MAKEFOURCC
|
||||
#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
|
||||
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
|
||||
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
|
||||
#endif //defined(MAKEFOURCC)
|
||||
#endif
|
||||
//-----------------------------------------------------------------------------
|
||||
// convert back and forth from D3D format to ImageFormat, regardless of
|
||||
// whether it's supported or not
|
||||
|
@ -1,350 +0,0 @@
|
||||
/* ftconfig.h. Generated from ftconfig.in by configure. */
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftconfig.in */
|
||||
/* */
|
||||
/* UNIX-specific configuration file (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* This header file contains a number of macro definitions that are used */
|
||||
/* by the rest of the engine. Most of the macros here are automatically */
|
||||
/* determined at compile time, and you should not need to change it to */
|
||||
/* port FreeType, except to compile the library with a non-ANSI */
|
||||
/* compiler. */
|
||||
/* */
|
||||
/* Note however that if some specific modifications are needed, we */
|
||||
/* advise you to place a modified copy in your build directory. */
|
||||
/* */
|
||||
/* The build directory is usually `freetype/builds/<system>', and */
|
||||
/* contains system-specific files that are always included first when */
|
||||
/* building the library. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTCONFIG_H__
|
||||
#define __FTCONFIG_H__
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_CONFIG_OPTIONS_H
|
||||
#include FT_CONFIG_STANDARD_LIBRARY_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */
|
||||
/* */
|
||||
/* These macros can be toggled to suit a specific system. The current */
|
||||
/* ones are defaults used to compile FreeType in an ANSI C environment */
|
||||
/* (16bit compilers are also supported). Copy this file to your own */
|
||||
/* `freetype/builds/<system>' directory, and edit it to port the engine. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_FCNTL_H 1
|
||||
|
||||
#define SIZEOF_INT 4
|
||||
#define SIZEOF_LONG 4
|
||||
|
||||
|
||||
#define FT_SIZEOF_INT SIZEOF_INT
|
||||
#define FT_SIZEOF_LONG SIZEOF_LONG
|
||||
|
||||
#define FT_CHAR_BIT CHAR_BIT
|
||||
|
||||
/* Preferred alignment of data */
|
||||
#define FT_ALIGNMENT 8
|
||||
|
||||
|
||||
/* FT_UNUSED is a macro used to indicate that a given parameter is not */
|
||||
/* used -- this is only used to get rid of unpleasant compiler warnings */
|
||||
#ifndef FT_UNUSED
|
||||
#define FT_UNUSED( arg ) ( (arg) = (arg) )
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* AUTOMATIC CONFIGURATION MACROS */
|
||||
/* */
|
||||
/* These macros are computed from the ones defined above. Don't touch */
|
||||
/* their definition, unless you know precisely what you are doing. No */
|
||||
/* porter should need to mess with them. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Mac support */
|
||||
/* */
|
||||
/* This is the only necessary change, so it is defined here instead */
|
||||
/* providing a new configuration file. */
|
||||
/* */
|
||||
#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
|
||||
( defined( __MWERKS__ ) && defined( macintosh ) )
|
||||
/* no Carbon frameworks for 64bit 10.4.x */
|
||||
#include "AvailabilityMacros.h"
|
||||
#if defined( __LP64__ ) && \
|
||||
( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
|
||||
#define DARWIN_NO_CARBON 1
|
||||
#else
|
||||
#define FT_MACINTOSH 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Fix compiler warning with sgi compiler */
|
||||
#if defined( __sgi ) && !defined( __GNUC__ )
|
||||
#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
|
||||
#pragma set woff 3505
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* IntN types */
|
||||
/* */
|
||||
/* Used to guarantee the size of some specific integers. */
|
||||
/* */
|
||||
typedef signed short FT_Int16;
|
||||
typedef unsigned short FT_UInt16;
|
||||
|
||||
#if FT_SIZEOF_INT == 4
|
||||
|
||||
typedef signed int FT_Int32;
|
||||
typedef unsigned int FT_UInt32;
|
||||
|
||||
#elif FT_SIZEOF_LONG == 4
|
||||
|
||||
typedef signed long FT_Int32;
|
||||
typedef unsigned long FT_UInt32;
|
||||
|
||||
#else
|
||||
#error "no 32bit type found -- please check your configuration files"
|
||||
#endif
|
||||
|
||||
|
||||
/* look up an integer type that is at least 32 bits */
|
||||
#if FT_SIZEOF_INT >= 4
|
||||
|
||||
typedef int FT_Fast;
|
||||
typedef unsigned int FT_UFast;
|
||||
|
||||
#elif FT_SIZEOF_LONG >= 4
|
||||
|
||||
typedef long FT_Fast;
|
||||
typedef unsigned long FT_UFast;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* determine whether we have a 64-bit int type for platforms without */
|
||||
/* Autoconf */
|
||||
#if FT_SIZEOF_LONG == 8
|
||||
|
||||
/* FT_LONG64 must be defined if a 64-bit type is available */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long
|
||||
|
||||
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __BORLANDC__ ) /* Borland C++ */
|
||||
|
||||
/* XXXX: We should probably check the value of __BORLANDC__ in order */
|
||||
/* to test the compiler version. */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __WATCOMC__ ) /* Watcom C++ */
|
||||
|
||||
/* Watcom doesn't provide 64-bit data types */
|
||||
|
||||
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
|
||||
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#elif defined( __GNUC__ )
|
||||
|
||||
/* GCC provides the `long long' type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#endif /* FT_SIZEOF_LONG == 8 */
|
||||
|
||||
|
||||
#define FT_BEGIN_STMNT do {
|
||||
#define FT_END_STMNT } while ( 0 )
|
||||
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* A 64-bit data type will create compilation problems if you compile */
|
||||
/* in strict ANSI mode. To avoid them, we disable their use if */
|
||||
/* __STDC__ is defined. You can however ignore this rule by */
|
||||
/* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
|
||||
/* */
|
||||
#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
|
||||
|
||||
#ifdef __STDC__
|
||||
|
||||
/* Undefine the 64-bit macros in strict ANSI compilation mode. */
|
||||
/* Since `#undef' doesn't survive in configuration header files */
|
||||
/* we use the postprocessing facility of AC_CONFIG_HEADERS to */
|
||||
/* replace the leading `/' with `#'. */
|
||||
#undef FT_LONG64
|
||||
#undef FT_INT64
|
||||
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
|
||||
|
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
|
||||
|
||||
#define FT_LOCAL( x ) static x
|
||||
#define FT_LOCAL_DEF( x ) static x
|
||||
|
||||
#else
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_LOCAL( x ) extern "C" x
|
||||
#define FT_LOCAL_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_LOCAL( x ) extern x
|
||||
#define FT_LOCAL_DEF( x ) x
|
||||
#endif
|
||||
|
||||
#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
|
||||
|
||||
|
||||
#ifndef FT_BASE
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_BASE( x ) extern "C" x
|
||||
#else
|
||||
#define FT_BASE( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_BASE */
|
||||
|
||||
|
||||
#ifndef FT_BASE_DEF
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_BASE_DEF( x ) x
|
||||
#else
|
||||
#define FT_BASE_DEF( x ) x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_BASE_DEF */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_EXPORT( x ) extern "C" x
|
||||
#else
|
||||
#define FT_EXPORT( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_EXPORT */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT_DEF
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_EXPORT_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_EXPORT_DEF( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_EXPORT_DEF */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT_VAR
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_EXPORT_VAR( x ) extern "C" x
|
||||
#else
|
||||
#define FT_EXPORT_VAR( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_EXPORT_VAR */
|
||||
|
||||
/* The following macros are needed to compile the library with a */
|
||||
/* C++ compiler and with 16bit compilers. */
|
||||
/* */
|
||||
|
||||
/* This is special. Within C++, you must specify `extern "C"' for */
|
||||
/* functions which are used via function pointers, and you also */
|
||||
/* must do that for structures which contain function pointers to */
|
||||
/* assure C linkage -- it's not possible to have (local) anonymous */
|
||||
/* functions which are accessed by (global) function pointers. */
|
||||
/* */
|
||||
/* */
|
||||
/* FT_CALLBACK_DEF is used to _define_ a callback function. */
|
||||
/* */
|
||||
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
|
||||
/* contains pointers to callback functions. */
|
||||
/* */
|
||||
/* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
|
||||
/* that contains pointers to callback functions. */
|
||||
/* */
|
||||
/* */
|
||||
/* Some 16bit compilers have to redefine these macros to insert */
|
||||
/* the infamous `_cdecl' or `__fastcall' declarations. */
|
||||
/* */
|
||||
#ifndef FT_CALLBACK_DEF
|
||||
#ifdef __cplusplus
|
||||
#define FT_CALLBACK_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_CALLBACK_DEF( x ) static x
|
||||
#endif
|
||||
#endif /* FT_CALLBACK_DEF */
|
||||
|
||||
#ifndef FT_CALLBACK_TABLE
|
||||
#ifdef __cplusplus
|
||||
#define FT_CALLBACK_TABLE extern "C"
|
||||
#define FT_CALLBACK_TABLE_DEF extern "C"
|
||||
#else
|
||||
#define FT_CALLBACK_TABLE extern
|
||||
#define FT_CALLBACK_TABLE_DEF /* nothing */
|
||||
#endif
|
||||
#endif /* FT_CALLBACK_TABLE */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCONFIG_H__ */
|
||||
|
||||
|
||||
/* END */
|
@ -1,350 +0,0 @@
|
||||
/* ftconfig.h. Generated from ftconfig.in by configure. */
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftconfig.in */
|
||||
/* */
|
||||
/* UNIX-specific configuration file (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* This header file contains a number of macro definitions that are used */
|
||||
/* by the rest of the engine. Most of the macros here are automatically */
|
||||
/* determined at compile time, and you should not need to change it to */
|
||||
/* port FreeType, except to compile the library with a non-ANSI */
|
||||
/* compiler. */
|
||||
/* */
|
||||
/* Note however that if some specific modifications are needed, we */
|
||||
/* advise you to place a modified copy in your build directory. */
|
||||
/* */
|
||||
/* The build directory is usually `freetype/builds/<system>', and */
|
||||
/* contains system-specific files that are always included first when */
|
||||
/* building the library. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTCONFIG_H__
|
||||
#define __FTCONFIG_H__
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_CONFIG_OPTIONS_H
|
||||
#include FT_CONFIG_STANDARD_LIBRARY_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */
|
||||
/* */
|
||||
/* These macros can be toggled to suit a specific system. The current */
|
||||
/* ones are defaults used to compile FreeType in an ANSI C environment */
|
||||
/* (16bit compilers are also supported). Copy this file to your own */
|
||||
/* `freetype/builds/<system>' directory, and edit it to port the engine. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_FCNTL_H 1
|
||||
|
||||
#define SIZEOF_INT 4
|
||||
#define SIZEOF_LONG 8
|
||||
|
||||
|
||||
#define FT_SIZEOF_INT SIZEOF_INT
|
||||
#define FT_SIZEOF_LONG SIZEOF_LONG
|
||||
|
||||
#define FT_CHAR_BIT CHAR_BIT
|
||||
|
||||
/* Preferred alignment of data */
|
||||
#define FT_ALIGNMENT 8
|
||||
|
||||
|
||||
/* FT_UNUSED is a macro used to indicate that a given parameter is not */
|
||||
/* used -- this is only used to get rid of unpleasant compiler warnings */
|
||||
#ifndef FT_UNUSED
|
||||
#define FT_UNUSED( arg ) ( (arg) = (arg) )
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* AUTOMATIC CONFIGURATION MACROS */
|
||||
/* */
|
||||
/* These macros are computed from the ones defined above. Don't touch */
|
||||
/* their definition, unless you know precisely what you are doing. No */
|
||||
/* porter should need to mess with them. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Mac support */
|
||||
/* */
|
||||
/* This is the only necessary change, so it is defined here instead */
|
||||
/* providing a new configuration file. */
|
||||
/* */
|
||||
#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
|
||||
( defined( __MWERKS__ ) && defined( macintosh ) )
|
||||
/* no Carbon frameworks for 64bit 10.4.x */
|
||||
#include "AvailabilityMacros.h"
|
||||
#if defined( __LP64__ ) && \
|
||||
( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
|
||||
#define DARWIN_NO_CARBON 1
|
||||
#else
|
||||
#define FT_MACINTOSH 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Fix compiler warning with sgi compiler */
|
||||
#if defined( __sgi ) && !defined( __GNUC__ )
|
||||
#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
|
||||
#pragma set woff 3505
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* IntN types */
|
||||
/* */
|
||||
/* Used to guarantee the size of some specific integers. */
|
||||
/* */
|
||||
typedef signed short FT_Int16;
|
||||
typedef unsigned short FT_UInt16;
|
||||
|
||||
#if FT_SIZEOF_INT == 4
|
||||
|
||||
typedef signed int FT_Int32;
|
||||
typedef unsigned int FT_UInt32;
|
||||
|
||||
#elif FT_SIZEOF_LONG == 4
|
||||
|
||||
typedef signed long FT_Int32;
|
||||
typedef unsigned long FT_UInt32;
|
||||
|
||||
#else
|
||||
#error "no 32bit type found -- please check your configuration files"
|
||||
#endif
|
||||
|
||||
|
||||
/* look up an integer type that is at least 32 bits */
|
||||
#if FT_SIZEOF_INT >= 4
|
||||
|
||||
typedef int FT_Fast;
|
||||
typedef unsigned int FT_UFast;
|
||||
|
||||
#elif FT_SIZEOF_LONG >= 4
|
||||
|
||||
typedef long FT_Fast;
|
||||
typedef unsigned long FT_UFast;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* determine whether we have a 64-bit int type for platforms without */
|
||||
/* Autoconf */
|
||||
#if FT_SIZEOF_LONG == 8
|
||||
|
||||
/* FT_LONG64 must be defined if a 64-bit type is available */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long
|
||||
|
||||
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __BORLANDC__ ) /* Borland C++ */
|
||||
|
||||
/* XXXX: We should probably check the value of __BORLANDC__ in order */
|
||||
/* to test the compiler version. */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __WATCOMC__ ) /* Watcom C++ */
|
||||
|
||||
/* Watcom doesn't provide 64-bit data types */
|
||||
|
||||
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
|
||||
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#elif defined( __GNUC__ )
|
||||
|
||||
/* GCC provides the `long long' type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#endif /* FT_SIZEOF_LONG == 8 */
|
||||
|
||||
|
||||
#define FT_BEGIN_STMNT do {
|
||||
#define FT_END_STMNT } while ( 0 )
|
||||
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* A 64-bit data type will create compilation problems if you compile */
|
||||
/* in strict ANSI mode. To avoid them, we disable their use if */
|
||||
/* __STDC__ is defined. You can however ignore this rule by */
|
||||
/* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
|
||||
/* */
|
||||
#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
|
||||
|
||||
#ifdef __STDC__
|
||||
|
||||
/* Undefine the 64-bit macros in strict ANSI compilation mode. */
|
||||
/* Since `#undef' doesn't survive in configuration header files */
|
||||
/* we use the postprocessing facility of AC_CONFIG_HEADERS to */
|
||||
/* replace the leading `/' with `#'. */
|
||||
#undef FT_LONG64
|
||||
#undef FT_INT64
|
||||
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
|
||||
|
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
|
||||
|
||||
#define FT_LOCAL( x ) static x
|
||||
#define FT_LOCAL_DEF( x ) static x
|
||||
|
||||
#else
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_LOCAL( x ) extern "C" x
|
||||
#define FT_LOCAL_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_LOCAL( x ) extern x
|
||||
#define FT_LOCAL_DEF( x ) x
|
||||
#endif
|
||||
|
||||
#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
|
||||
|
||||
|
||||
#ifndef FT_BASE
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_BASE( x ) extern "C" x
|
||||
#else
|
||||
#define FT_BASE( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_BASE */
|
||||
|
||||
|
||||
#ifndef FT_BASE_DEF
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_BASE_DEF( x ) x
|
||||
#else
|
||||
#define FT_BASE_DEF( x ) x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_BASE_DEF */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_EXPORT( x ) extern "C" x
|
||||
#else
|
||||
#define FT_EXPORT( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_EXPORT */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT_DEF
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_EXPORT_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_EXPORT_DEF( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_EXPORT_DEF */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT_VAR
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_EXPORT_VAR( x ) extern "C" x
|
||||
#else
|
||||
#define FT_EXPORT_VAR( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_EXPORT_VAR */
|
||||
|
||||
/* The following macros are needed to compile the library with a */
|
||||
/* C++ compiler and with 16bit compilers. */
|
||||
/* */
|
||||
|
||||
/* This is special. Within C++, you must specify `extern "C"' for */
|
||||
/* functions which are used via function pointers, and you also */
|
||||
/* must do that for structures which contain function pointers to */
|
||||
/* assure C linkage -- it's not possible to have (local) anonymous */
|
||||
/* functions which are accessed by (global) function pointers. */
|
||||
/* */
|
||||
/* */
|
||||
/* FT_CALLBACK_DEF is used to _define_ a callback function. */
|
||||
/* */
|
||||
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
|
||||
/* contains pointers to callback functions. */
|
||||
/* */
|
||||
/* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
|
||||
/* that contains pointers to callback functions. */
|
||||
/* */
|
||||
/* */
|
||||
/* Some 16bit compilers have to redefine these macros to insert */
|
||||
/* the infamous `_cdecl' or `__fastcall' declarations. */
|
||||
/* */
|
||||
#ifndef FT_CALLBACK_DEF
|
||||
#ifdef __cplusplus
|
||||
#define FT_CALLBACK_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_CALLBACK_DEF( x ) static x
|
||||
#endif
|
||||
#endif /* FT_CALLBACK_DEF */
|
||||
|
||||
#ifndef FT_CALLBACK_TABLE
|
||||
#ifdef __cplusplus
|
||||
#define FT_CALLBACK_TABLE extern "C"
|
||||
#define FT_CALLBACK_TABLE_DEF extern "C"
|
||||
#else
|
||||
#define FT_CALLBACK_TABLE extern
|
||||
#define FT_CALLBACK_TABLE_DEF /* nothing */
|
||||
#endif
|
||||
#endif /* FT_CALLBACK_TABLE */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCONFIG_H__ */
|
||||
|
||||
|
||||
/* END */
|
@ -1,20 +0,0 @@
|
||||
#ifndef __FTCONFIG_H__MULTILIB
|
||||
#define __FTCONFIG_H__MULTILIB
|
||||
|
||||
#ifdef ANDROID
|
||||
#include <sys/cdefs.h>
|
||||
#elif defined(OSX) || defined(PLATFORM_BSD)
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#include <bits/wordsize.h>
|
||||
#endif
|
||||
|
||||
#if __WORDSIZE == 32
|
||||
# include "ftconfig-32.h"
|
||||
#elif __WORDSIZE == 64
|
||||
# include "ftconfig-64.h"
|
||||
#else
|
||||
# error "unexpected value for __WORDSIZE macro"
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,729 +0,0 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftheader.h */
|
||||
/* */
|
||||
/* Build macros of the FreeType 2 library. */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
#ifndef __FT_HEADER_H__
|
||||
#define __FT_HEADER_H__
|
||||
|
||||
|
||||
/*@***********************************************************************/
|
||||
/* */
|
||||
/* <Macro> */
|
||||
/* FT_BEGIN_HEADER */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This macro is used in association with @FT_END_HEADER in header */
|
||||
/* files to ensure that the declarations within are properly */
|
||||
/* encapsulated in an `extern "C" { .. }' block when included from a */
|
||||
/* C++ compiler. */
|
||||
/* */
|
||||
#ifdef __cplusplus
|
||||
#define FT_BEGIN_HEADER extern "C" {
|
||||
#else
|
||||
#define FT_BEGIN_HEADER /* nothing */
|
||||
#endif
|
||||
|
||||
|
||||
/*@***********************************************************************/
|
||||
/* */
|
||||
/* <Macro> */
|
||||
/* FT_END_HEADER */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This macro is used in association with @FT_BEGIN_HEADER in header */
|
||||
/* files to ensure that the declarations within are properly */
|
||||
/* encapsulated in an `extern "C" { .. }' block when included from a */
|
||||
/* C++ compiler. */
|
||||
/* */
|
||||
#ifdef __cplusplus
|
||||
#define FT_END_HEADER }
|
||||
#else
|
||||
#define FT_END_HEADER /* nothing */
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Aliases for the FreeType 2 public and configuration files. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Section> */
|
||||
/* header_file_macros */
|
||||
/* */
|
||||
/* <Title> */
|
||||
/* Header File Macros */
|
||||
/* */
|
||||
/* <Abstract> */
|
||||
/* Macro definitions used to #include specific header files. */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The following macros are defined to the name of specific */
|
||||
/* FreeType 2 header files. They can be used directly in #include */
|
||||
/* statements as in: */
|
||||
/* */
|
||||
/* { */
|
||||
/* #include FT_FREETYPE_H */
|
||||
/* #include FT_MULTIPLE_MASTERS_H */
|
||||
/* #include FT_GLYPH_H */
|
||||
/* } */
|
||||
/* */
|
||||
/* There are several reasons why we are now using macros to name */
|
||||
/* public header files. The first one is that such macros are not */
|
||||
/* limited to the infamous 8.3 naming rule required by DOS (and */
|
||||
/* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */
|
||||
/* */
|
||||
/* The second reason is that it allows for more flexibility in the */
|
||||
/* way FreeType 2 is installed on a given system. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/* configuration files */
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CONFIG_CONFIG_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing
|
||||
* FreeType 2 configuration data.
|
||||
*
|
||||
*/
|
||||
#ifndef FT_CONFIG_CONFIG_H
|
||||
#define FT_CONFIG_CONFIG_H <freetype/config/ftconfig.h>
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CONFIG_STANDARD_LIBRARY_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing
|
||||
* FreeType 2 interface to the standard C library functions.
|
||||
*
|
||||
*/
|
||||
#ifndef FT_CONFIG_STANDARD_LIBRARY_H
|
||||
#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h>
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CONFIG_OPTIONS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing
|
||||
* FreeType 2 project-specific configuration options.
|
||||
*
|
||||
*/
|
||||
#ifndef FT_CONFIG_OPTIONS_H
|
||||
#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h>
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CONFIG_MODULES_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* list of FreeType 2 modules that are statically linked to new library
|
||||
* instances in @FT_Init_FreeType.
|
||||
*
|
||||
*/
|
||||
#ifndef FT_CONFIG_MODULES_H
|
||||
#define FT_CONFIG_MODULES_H <freetype/config/ftmodule.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* public headers */
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_FREETYPE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* base FreeType 2 API.
|
||||
*
|
||||
*/
|
||||
#define FT_FREETYPE_H <freetype/freetype.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_ERRORS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* list of FreeType 2 error codes (and messages).
|
||||
*
|
||||
* It is included by @FT_FREETYPE_H.
|
||||
*
|
||||
*/
|
||||
#define FT_ERRORS_H <freetype/fterrors.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_MODULE_ERRORS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* list of FreeType 2 module error offsets (and messages).
|
||||
*
|
||||
*/
|
||||
#define FT_MODULE_ERRORS_H <freetype/ftmoderr.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_SYSTEM_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 interface to low-level operations (i.e., memory management
|
||||
* and stream i/o).
|
||||
*
|
||||
* It is included by @FT_FREETYPE_H.
|
||||
*
|
||||
*/
|
||||
#define FT_SYSTEM_H <freetype/ftsystem.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_IMAGE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing type
|
||||
* definitions related to glyph images (i.e., bitmaps, outlines,
|
||||
* scan-converter parameters).
|
||||
*
|
||||
* It is included by @FT_FREETYPE_H.
|
||||
*
|
||||
*/
|
||||
#define FT_IMAGE_H <freetype/ftimage.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_TYPES_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* basic data types defined by FreeType 2.
|
||||
*
|
||||
* It is included by @FT_FREETYPE_H.
|
||||
*
|
||||
*/
|
||||
#define FT_TYPES_H <freetype/fttypes.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_LIST_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* list management API of FreeType 2.
|
||||
*
|
||||
* (Most applications will never need to include this file.)
|
||||
*
|
||||
*/
|
||||
#define FT_LIST_H <freetype/ftlist.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_OUTLINE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* scalable outline management API of FreeType 2.
|
||||
*
|
||||
*/
|
||||
#define FT_OUTLINE_H <freetype/ftoutln.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_SIZES_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* API which manages multiple @FT_Size objects per face.
|
||||
*
|
||||
*/
|
||||
#define FT_SIZES_H <freetype/ftsizes.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_MODULE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* module management API of FreeType 2.
|
||||
*
|
||||
*/
|
||||
#define FT_MODULE_H <freetype/ftmodapi.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_RENDER_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* renderer module management API of FreeType 2.
|
||||
*
|
||||
*/
|
||||
#define FT_RENDER_H <freetype/ftrender.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_TYPE1_TABLES_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* types and API specific to the Type 1 format.
|
||||
*
|
||||
*/
|
||||
#define FT_TYPE1_TABLES_H <freetype/t1tables.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_TRUETYPE_IDS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* enumeration values which identify name strings, languages, encodings,
|
||||
* etc. This file really contains a _large_ set of constant macro
|
||||
* definitions, taken from the TrueType and OpenType specifications.
|
||||
*
|
||||
*/
|
||||
#define FT_TRUETYPE_IDS_H <freetype/ttnameid.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_TRUETYPE_TABLES_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* types and API specific to the TrueType (as well as OpenType) format.
|
||||
*
|
||||
*/
|
||||
#define FT_TRUETYPE_TABLES_H <freetype/tttables.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_TRUETYPE_TAGS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* definitions of TrueType four-byte `tags' which identify blocks in
|
||||
* SFNT-based font formats (i.e., TrueType and OpenType).
|
||||
*
|
||||
*/
|
||||
#define FT_TRUETYPE_TAGS_H <freetype/tttags.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_BDF_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* definitions of an API which accesses BDF-specific strings from a
|
||||
* face.
|
||||
*
|
||||
*/
|
||||
#define FT_BDF_H <freetype/ftbdf.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_GZIP_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* definitions of an API which supports gzip-compressed files.
|
||||
*
|
||||
*/
|
||||
#define FT_GZIP_H <freetype/ftgzip.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_LZW_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* definitions of an API which supports LZW-compressed files.
|
||||
*
|
||||
*/
|
||||
#define FT_LZW_H <freetype/ftlzw.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_WINFONTS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* definitions of an API which supports Windows FNT files.
|
||||
*
|
||||
*/
|
||||
#define FT_WINFONTS_H <freetype/ftwinfnt.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_GLYPH_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* API of the optional glyph management component.
|
||||
*
|
||||
*/
|
||||
#define FT_GLYPH_H <freetype/ftglyph.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_BITMAP_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* API of the optional bitmap conversion component.
|
||||
*
|
||||
*/
|
||||
#define FT_BITMAP_H <freetype/ftbitmap.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_BBOX_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* API of the optional exact bounding box computation routines.
|
||||
*
|
||||
*/
|
||||
#define FT_BBOX_H <freetype/ftbbox.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CACHE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* API of the optional FreeType 2 cache sub-system.
|
||||
*
|
||||
*/
|
||||
#define FT_CACHE_H <freetype/ftcache.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CACHE_IMAGE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* `glyph image' API of the FreeType 2 cache sub-system.
|
||||
*
|
||||
* It is used to define a cache for @FT_Glyph elements. You can also
|
||||
* use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to
|
||||
* store small glyph bitmaps, as it will use less memory.
|
||||
*
|
||||
* This macro is deprecated. Simply include @FT_CACHE_H to have all
|
||||
* glyph image-related cache declarations.
|
||||
*
|
||||
*/
|
||||
#define FT_CACHE_IMAGE_H FT_CACHE_H
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CACHE_SMALL_BITMAPS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* `small bitmaps' API of the FreeType 2 cache sub-system.
|
||||
*
|
||||
* It is used to define a cache for small glyph bitmaps in a relatively
|
||||
* memory-efficient way. You can also use the API defined in
|
||||
* @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images,
|
||||
* including scalable outlines.
|
||||
*
|
||||
* This macro is deprecated. Simply include @FT_CACHE_H to have all
|
||||
* small bitmaps-related cache declarations.
|
||||
*
|
||||
*/
|
||||
#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CACHE_CHARMAP_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* `charmap' API of the FreeType 2 cache sub-system.
|
||||
*
|
||||
* This macro is deprecated. Simply include @FT_CACHE_H to have all
|
||||
* charmap-based cache declarations.
|
||||
*
|
||||
*/
|
||||
#define FT_CACHE_CHARMAP_H FT_CACHE_H
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_MAC_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* Macintosh-specific FreeType 2 API. The latter is used to access
|
||||
* fonts embedded in resource forks.
|
||||
*
|
||||
* This header file must be explicitly included by client applications
|
||||
* compiled on the Mac (note that the base API still works though).
|
||||
*
|
||||
*/
|
||||
#define FT_MAC_H <freetype/ftmac.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_MULTIPLE_MASTERS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* optional multiple-masters management API of FreeType 2.
|
||||
*
|
||||
*/
|
||||
#define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_SFNT_NAMES_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* optional FreeType 2 API which accesses embedded `name' strings in
|
||||
* SFNT-based font formats (i.e., TrueType and OpenType).
|
||||
*
|
||||
*/
|
||||
#define FT_SFNT_NAMES_H <freetype/ftsnames.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_OPENTYPE_VALIDATE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* optional FreeType 2 API which validates OpenType tables (BASE, GDEF,
|
||||
* GPOS, GSUB, JSTF).
|
||||
*
|
||||
*/
|
||||
#define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_GX_VALIDATE_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* optional FreeType 2 API which validates TrueTypeGX/AAT tables (feat,
|
||||
* mort, morx, bsln, just, kern, opbd, trak, prop).
|
||||
*
|
||||
*/
|
||||
#define FT_GX_VALIDATE_H <freetype/ftgxval.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_PFR_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 API which accesses PFR-specific data.
|
||||
*
|
||||
*/
|
||||
#define FT_PFR_H <freetype/ftpfr.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_STROKER_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 API which provides functions to stroke outline paths.
|
||||
*/
|
||||
#define FT_STROKER_H <freetype/ftstroke.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_SYNTHESIS_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 API which performs artificial obliquing and emboldening.
|
||||
*/
|
||||
#define FT_SYNTHESIS_H <freetype/ftsynth.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_XFREE86_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 API which provides functions specific to the XFree86 and
|
||||
* X.Org X11 servers.
|
||||
*/
|
||||
#define FT_XFREE86_H <freetype/ftxf86.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_TRIGONOMETRY_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 API which performs trigonometric computations (e.g.,
|
||||
* cosines and arc tangents).
|
||||
*/
|
||||
#define FT_TRIGONOMETRY_H <freetype/fttrigon.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_LCD_FILTER_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 API which performs color filtering for subpixel rendering.
|
||||
*/
|
||||
#define FT_LCD_FILTER_H <freetype/ftlcdfil.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_GASP_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* FreeType 2 API which returns entries from the TrueType GASP table.
|
||||
*/
|
||||
#define FT_GASP_H <freetype/ftgasp.h>
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h>
|
||||
|
||||
|
||||
/* The internals of the cache sub-system are no longer exposed. We */
|
||||
/* default to FT_CACHE_H at the moment just in case, but we know of */
|
||||
/* no rogue client that uses them. */
|
||||
/* */
|
||||
#define FT_CACHE_MANAGER_H <freetype/ftcache.h>
|
||||
#define FT_CACHE_INTERNAL_MRU_H <freetype/ftcache.h>
|
||||
#define FT_CACHE_INTERNAL_MANAGER_H <freetype/ftcache.h>
|
||||
#define FT_CACHE_INTERNAL_CACHE_H <freetype/ftcache.h>
|
||||
#define FT_CACHE_INTERNAL_GLYPH_H <freetype/ftcache.h>
|
||||
#define FT_CACHE_INTERNAL_IMAGE_H <freetype/ftcache.h>
|
||||
#define FT_CACHE_INTERNAL_SBITS_H <freetype/ftcache.h>
|
||||
|
||||
|
||||
#define FT_INCREMENTAL_H <freetype/ftincrem.h>
|
||||
|
||||
#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h>
|
||||
|
||||
|
||||
/*
|
||||
* Include internal headers definitions from <freetype/internal/...>
|
||||
* only when building the library.
|
||||
*/
|
||||
#ifdef FT2_BUILD_LIBRARY
|
||||
#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
|
||||
#include FT_INTERNAL_INTERNAL_H
|
||||
#endif /* FT2_BUILD_LIBRARY */
|
||||
|
||||
|
||||
#endif /* __FT2_BUILD_H__ */
|
||||
|
||||
|
||||
/* END */
|
@ -1,22 +0,0 @@
|
||||
/* This is a generated file. */
|
||||
FT_USE_MODULE(tt_driver_class)
|
||||
FT_USE_MODULE(t1_driver_class)
|
||||
FT_USE_MODULE(cff_driver_class)
|
||||
FT_USE_MODULE(t1cid_driver_class)
|
||||
FT_USE_MODULE(pfr_driver_class)
|
||||
FT_USE_MODULE(t42_driver_class)
|
||||
FT_USE_MODULE(winfnt_driver_class)
|
||||
FT_USE_MODULE(pcf_driver_class)
|
||||
FT_USE_MODULE(bdf_driver_class)
|
||||
FT_USE_MODULE(sfnt_module_class)
|
||||
FT_USE_MODULE(autofit_module_class)
|
||||
FT_USE_MODULE(pshinter_module_class)
|
||||
FT_USE_MODULE(ft_raster1_renderer_class)
|
||||
FT_USE_MODULE(ft_smooth_renderer_class)
|
||||
FT_USE_MODULE(ft_smooth_lcd_renderer_class)
|
||||
FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
|
||||
FT_USE_MODULE(gxv_module_class)
|
||||
FT_USE_MODULE(otv_module_class)
|
||||
FT_USE_MODULE(psaux_module_class)
|
||||
FT_USE_MODULE(psnames_module_class)
|
||||
/* EOF */
|
@ -1,669 +0,0 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftoption.h */
|
||||
/* */
|
||||
/* User-selectable configuration macros (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTOPTION_H__
|
||||
#define __FTOPTION_H__
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* USER-SELECTABLE CONFIGURATION MACROS */
|
||||
/* */
|
||||
/* This file contains the default configuration macro definitions for */
|
||||
/* a standard build of the FreeType library. There are three ways to */
|
||||
/* use this file to build project-specific versions of the library: */
|
||||
/* */
|
||||
/* - You can modify this file by hand, but this is not recommended in */
|
||||
/* cases where you would like to build several versions of the */
|
||||
/* library from a single source directory. */
|
||||
/* */
|
||||
/* - You can put a copy of this file in your build directory, more */
|
||||
/* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
|
||||
/* is the name of a directory that is included _before_ the FreeType */
|
||||
/* include path during compilation. */
|
||||
/* */
|
||||
/* The default FreeType Makefiles and Jamfiles use the build */
|
||||
/* directory `builds/<system>' by default, but you can easily change */
|
||||
/* that for your own projects. */
|
||||
/* */
|
||||
/* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */
|
||||
/* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
|
||||
/* locate this file during the build. For example, */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
|
||||
/* #include <freetype/config/ftheader.h> */
|
||||
/* */
|
||||
/* will use `$BUILD/myftoptions.h' instead of this file for macro */
|
||||
/* definitions. */
|
||||
/* */
|
||||
/* Note also that you can similarly pre-define the macro */
|
||||
/* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
|
||||
/* that are statically linked to the library at compile time. By */
|
||||
/* default, this file is <freetype/config/ftmodule.h>. */
|
||||
/* */
|
||||
/* We highly recommend using the third method whenever possible. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Uncomment the line below if you want to activate sub-pixel rendering */
|
||||
/* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
|
||||
/* */
|
||||
/* Note that this feature is covered by several Microsoft patents */
|
||||
/* and should not be activated in any default build of the library. */
|
||||
/* */
|
||||
/* This macro has no impact on the FreeType API, only on its */
|
||||
/* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
|
||||
/* FT_Render_Glyph still generates a bitmap that is 3 times larger than */
|
||||
/* the original size; the difference will be that each triplet of */
|
||||
/* subpixels has R=G=B. */
|
||||
/* */
|
||||
/* This is done to allow FreeType clients to run unmodified, forcing */
|
||||
/* them to display normal gray-level anti-aliased glyphs. */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Many compilers provide a non-ANSI 64-bit data type that can be used */
|
||||
/* by FreeType to speed up some computations. However, this will create */
|
||||
/* some problems when compiling the library in strict ANSI mode. */
|
||||
/* */
|
||||
/* For this reason, the use of 64-bit integers is normally disabled when */
|
||||
/* the __STDC__ macro is defined. You can however disable this by */
|
||||
/* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
|
||||
/* */
|
||||
/* For most compilers, this will only create compilation warnings when */
|
||||
/* building the library. */
|
||||
/* */
|
||||
/* ObNote: The compiler-specific 64-bit integers are detected in the */
|
||||
/* file `ftconfig.h' either statically or through the */
|
||||
/* `configure' script on supported platforms. */
|
||||
/* */
|
||||
#undef FT_CONFIG_OPTION_FORCE_INT64
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* LZW-compressed file support. */
|
||||
/* */
|
||||
/* FreeType now handles font files that have been compressed with the */
|
||||
/* `compress' program. This is mostly used to parse many of the PCF */
|
||||
/* files that come with various X11 distributions. The implementation */
|
||||
/* uses NetBSD's `zopen' to partially uncompress the file on the fly */
|
||||
/* (see src/lzw/ftgzip.c). */
|
||||
/* */
|
||||
/* Define this macro if you want to enable this `feature'. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_USE_LZW
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Gzip-compressed file support. */
|
||||
/* */
|
||||
/* FreeType now handles font files that have been compressed with the */
|
||||
/* `gzip' program. This is mostly used to parse many of the PCF files */
|
||||
/* that come with XFree86. The implementation uses `zlib' to */
|
||||
/* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
|
||||
/* */
|
||||
/* Define this macro if you want to enable this `feature'. See also */
|
||||
/* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_USE_ZLIB
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* ZLib library selection */
|
||||
/* */
|
||||
/* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
|
||||
/* It allows FreeType's `ftgzip' component to link to the system's */
|
||||
/* installation of the ZLib library. This is useful on systems like */
|
||||
/* Unix or VMS where it generally is already available. */
|
||||
/* */
|
||||
/* If you let it undefined, the component will use its own copy */
|
||||
/* of the zlib sources instead. These have been modified to be */
|
||||
/* included directly within the component and *not* export external */
|
||||
/* function names. This allows you to link any program with FreeType */
|
||||
/* _and_ ZLib without linking conflicts. */
|
||||
/* */
|
||||
/* Do not #undef this macro here since the build system might define */
|
||||
/* it for certain configurations only. */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* DLL export compilation */
|
||||
/* */
|
||||
/* When compiling FreeType as a DLL, some systems/compilers need a */
|
||||
/* special keyword in front OR after the return type of function */
|
||||
/* declarations. */
|
||||
/* */
|
||||
/* Two macros are used within the FreeType source code to define */
|
||||
/* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
|
||||
/* */
|
||||
/* FT_EXPORT( return_type ) */
|
||||
/* */
|
||||
/* is used in a function declaration, as in */
|
||||
/* */
|
||||
/* FT_EXPORT( FT_Error ) */
|
||||
/* FT_Init_FreeType( FT_Library* alibrary ); */
|
||||
/* */
|
||||
/* */
|
||||
/* FT_EXPORT_DEF( return_type ) */
|
||||
/* */
|
||||
/* is used in a function definition, as in */
|
||||
/* */
|
||||
/* FT_EXPORT_DEF( FT_Error ) */
|
||||
/* FT_Init_FreeType( FT_Library* alibrary ) */
|
||||
/* { */
|
||||
/* ... some code ... */
|
||||
/* return FT_Err_Ok; */
|
||||
/* } */
|
||||
/* */
|
||||
/* You can provide your own implementation of FT_EXPORT and */
|
||||
/* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
|
||||
/* will be later automatically defined as `extern return_type' to */
|
||||
/* allow normal compilation. */
|
||||
/* */
|
||||
/* Do not #undef these macros here since the build system might define */
|
||||
/* them for certain configurations only. */
|
||||
/* */
|
||||
/* #define FT_EXPORT(x) extern x */
|
||||
/* #define FT_EXPORT_DEF(x) x */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Glyph Postscript Names handling */
|
||||
/* */
|
||||
/* By default, FreeType 2 is compiled with the `PSNames' module. This */
|
||||
/* module is in charge of converting a glyph name string into a */
|
||||
/* Unicode value, or return a Macintosh standard glyph name for the */
|
||||
/* use with the TrueType `post' table. */
|
||||
/* */
|
||||
/* Undefine this macro if you do not want `PSNames' compiled in your */
|
||||
/* build of FreeType. This has the following effects: */
|
||||
/* */
|
||||
/* - The TrueType driver will provide its own set of glyph names, */
|
||||
/* if you build it to support postscript names in the TrueType */
|
||||
/* `post' table. */
|
||||
/* */
|
||||
/* - The Type 1 driver will not be able to synthetize a Unicode */
|
||||
/* charmap out of the glyphs found in the fonts. */
|
||||
/* */
|
||||
/* You would normally undefine this configuration macro when building */
|
||||
/* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Postscript Names to Unicode Values support */
|
||||
/* */
|
||||
/* By default, FreeType 2 is built with the `PSNames' module compiled */
|
||||
/* in. Among other things, the module is used to convert a glyph name */
|
||||
/* into a Unicode value. This is especially useful in order to */
|
||||
/* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */
|
||||
/* through a big table named the `Adobe Glyph List' (AGL). */
|
||||
/* */
|
||||
/* Undefine this macro if you do not want the Adobe Glyph List */
|
||||
/* compiled in your `PSNames' module. The Type 1 driver will not be */
|
||||
/* able to synthetize a Unicode charmap out of the glyphs found in the */
|
||||
/* fonts. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Support for Mac fonts */
|
||||
/* */
|
||||
/* Define this macro if you want support for outline fonts in Mac */
|
||||
/* format (mac dfont, mac resource, macbinary containing a mac */
|
||||
/* resource) on non-Mac platforms. */
|
||||
/* */
|
||||
/* Note that the `FOND' resource isn't checked. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_MAC_FONTS
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Guessing methods to access embedded resource forks */
|
||||
/* */
|
||||
/* Enable extra Mac fonts support on non-Mac platforms (e.g. */
|
||||
/* GNU/Linux). */
|
||||
/* */
|
||||
/* Resource forks which include fonts data are stored sometimes in */
|
||||
/* locations which users or developers don't expected. In some cases, */
|
||||
/* resource forks start with some offset from the head of a file. In */
|
||||
/* other cases, the actual resource fork is stored in file different */
|
||||
/* from what the user specifies. If this option is activated, */
|
||||
/* FreeType tries to guess whether such offsets or different file */
|
||||
/* names must be used. */
|
||||
/* */
|
||||
/* Note that normal, direct access of resource forks is controlled via */
|
||||
/* the FT_CONFIG_OPTION_MAC_FONTS option. */
|
||||
/* */
|
||||
#ifdef FT_CONFIG_OPTION_MAC_FONTS
|
||||
#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Allow the use of FT_Incremental_Interface to load typefaces that */
|
||||
/* contain no glyph data, but supply it via a callback function. */
|
||||
/* This allows FreeType to be used with the PostScript language, using */
|
||||
/* the GhostScript interpreter. */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTION_INCREMENTAL */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* The size in bytes of the render pool used by the scan-line converter */
|
||||
/* to do all of its work. */
|
||||
/* */
|
||||
/* This must be greater than 4KByte if you use FreeType to rasterize */
|
||||
/* glyphs; otherwise, you may set it to zero to avoid unnecessary */
|
||||
/* allocation of the render pool. */
|
||||
/* */
|
||||
#define FT_RENDER_POOL_SIZE 16384L
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* FT_MAX_MODULES */
|
||||
/* */
|
||||
/* The maximum number of modules that can be registered in a single */
|
||||
/* FreeType library object. 32 is the default. */
|
||||
/* */
|
||||
#define FT_MAX_MODULES 32
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Debug level */
|
||||
/* */
|
||||
/* FreeType can be compiled in debug or trace mode. In debug mode, */
|
||||
/* errors are reported through the `ftdebug' component. In trace */
|
||||
/* mode, additional messages are sent to the standard output during */
|
||||
/* execution. */
|
||||
/* */
|
||||
/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
|
||||
/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
|
||||
/* */
|
||||
/* Don't define any of these macros to compile in `release' mode! */
|
||||
/* */
|
||||
/* Do not #undef these macros here since the build system might define */
|
||||
/* them for certain configurations only. */
|
||||
/* */
|
||||
/* #define FT_DEBUG_LEVEL_ERROR */
|
||||
/* #define FT_DEBUG_LEVEL_TRACE */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Memory Debugging */
|
||||
/* */
|
||||
/* FreeType now comes with an integrated memory debugger that is */
|
||||
/* capable of detecting simple errors like memory leaks or double */
|
||||
/* deletes. To compile it within your build of the library, you */
|
||||
/* should define FT_DEBUG_MEMORY here. */
|
||||
/* */
|
||||
/* Note that the memory debugger is only activated at runtime when */
|
||||
/* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
|
||||
/* */
|
||||
/* Do not #undef this macro here since the build system might define */
|
||||
/* it for certain configurations only. */
|
||||
/* */
|
||||
/* #define FT_DEBUG_MEMORY */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Module errors */
|
||||
/* */
|
||||
/* If this macro is set (which is _not_ the default), the higher byte */
|
||||
/* of an error code gives the module in which the error has occurred, */
|
||||
/* while the lower byte is the real error code. */
|
||||
/* */
|
||||
/* Setting this macro makes sense for debugging purposes only, since */
|
||||
/* it would break source compatibility of certain programs that use */
|
||||
/* FreeType 2. */
|
||||
/* */
|
||||
/* More details can be found in the files ftmoderr.h and fterrors.h. */
|
||||
/* */
|
||||
#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
|
||||
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** S F N T D R I V E R C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
|
||||
/* embedded bitmaps in all formats using the SFNT module (namely */
|
||||
/* TrueType & OpenType). */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
|
||||
/* load and enumerate the glyph Postscript names in a TrueType or */
|
||||
/* OpenType file. */
|
||||
/* */
|
||||
/* Note that when you do not compile the `PSNames' module by undefining */
|
||||
/* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
|
||||
/* contain additional code used to read the PS Names table from a font. */
|
||||
/* */
|
||||
/* (By default, the module uses `PSNames' to extract glyph names.) */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
|
||||
/* access the internal name table in a SFNT-based format like TrueType */
|
||||
/* or OpenType. The name table contains various strings used to */
|
||||
/* describe the font, like family name, copyright, version, etc. It */
|
||||
/* does not contain any glyph name though. */
|
||||
/* */
|
||||
/* Accessing SFNT names is done through the functions declared in */
|
||||
/* `freetype/ftnames.h'. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_SFNT_NAMES
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* TrueType CMap support */
|
||||
/* */
|
||||
/* Here you can fine-tune which TrueType CMap table format shall be */
|
||||
/* supported. */
|
||||
#define TT_CONFIG_CMAP_FORMAT_0
|
||||
#define TT_CONFIG_CMAP_FORMAT_2
|
||||
#define TT_CONFIG_CMAP_FORMAT_4
|
||||
#define TT_CONFIG_CMAP_FORMAT_6
|
||||
#define TT_CONFIG_CMAP_FORMAT_8
|
||||
#define TT_CONFIG_CMAP_FORMAT_10
|
||||
#define TT_CONFIG_CMAP_FORMAT_12
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
|
||||
/* a bytecode interpreter in the TrueType driver. Note that there are */
|
||||
/* important patent issues related to the use of the interpreter. */
|
||||
/* */
|
||||
/* By undefining this, you will only compile the code necessary to load */
|
||||
/* TrueType glyphs without hinting. */
|
||||
/* */
|
||||
/* Do not #undef this macro here, since the build system might */
|
||||
/* define it for certain configurations only. */
|
||||
/* */
|
||||
/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
|
||||
/* of the TrueType bytecode interpreter is used that doesn't implement */
|
||||
/* any of the patented opcodes and algorithms. Note that the */
|
||||
/* the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you */
|
||||
/* define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; with other words, */
|
||||
/* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
|
||||
/* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
|
||||
/* */
|
||||
/* This macro is only useful for a small number of font files (mostly */
|
||||
/* for Asian scripts) that require bytecode interpretation to properly */
|
||||
/* load glyphs. For all other fonts, this produces unpleasant results, */
|
||||
/* thus the unpatented interpreter is never used to load glyphs from */
|
||||
/* TrueType fonts unless one of the following two options is used. */
|
||||
/* */
|
||||
/* - The unpatented interpreter is explicitly activated by the user */
|
||||
/* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
|
||||
/* when opening the FT_Face. */
|
||||
/* */
|
||||
/* - FreeType detects that the FT_Face corresponds to one of the */
|
||||
/* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
|
||||
/* contains a hard-coded list of font names and other matching */
|
||||
/* parameters (see function `tt_face_init' in file */
|
||||
/* `src/truetype/ttobjs.c'). */
|
||||
/* */
|
||||
/* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
|
||||
/* */
|
||||
/* { */
|
||||
/* FT_Parameter parameter; */
|
||||
/* FT_Open_Args open_args; */
|
||||
/* */
|
||||
/* */
|
||||
/* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
|
||||
/* */
|
||||
/* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
|
||||
/* open_args.pathname = my_font_pathname; */
|
||||
/* open_args.num_params = 1; */
|
||||
/* open_args.params = ¶meter; */
|
||||
/* */
|
||||
/* error = FT_Open_Face( library, &open_args, index, &face ); */
|
||||
/* ... */
|
||||
/* } */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_UNPATENTED_HINTING
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
|
||||
/* bytecode interpreter with a huge switch statement, rather than a call */
|
||||
/* table. This results in smaller and faster code for a number of */
|
||||
/* architectures. */
|
||||
/* */
|
||||
/* Note however that on some compiler/processor combinations, undefining */
|
||||
/* this macro will generate faster, though larger, code. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
|
||||
/* TrueType glyph loader to use Apple's definition of how to handle */
|
||||
/* component offsets in composite glyphs. */
|
||||
/* */
|
||||
/* Apple and MS disagree on the default behavior of component offsets */
|
||||
/* in composites. Apple says that they should be scaled by the scaling */
|
||||
/* factors in the transformation matrix (roughly, it's more complex) */
|
||||
/* while MS says they should not. OpenType defines two bits in the */
|
||||
/* composite flags array which can be used to disambiguate, but old */
|
||||
/* fonts will not have them. */
|
||||
/* */
|
||||
/* http://partners.adobe.com/asn/developer/opentype/glyf.html */
|
||||
/* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
|
||||
/* */
|
||||
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
|
||||
/* support for Apple's distortable font technology (fvar, gvar, cvar, */
|
||||
/* and avar tables). This has many similarities to Type 1 Multiple */
|
||||
/* Masters support. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_BDF if you want to include support for */
|
||||
/* an embedded `BDF ' table within SFNT-based bitmap formats. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_BDF
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* T1_MAX_DICT_DEPTH is the maximal depth of nest dictionaries and */
|
||||
/* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
|
||||
/* required. */
|
||||
/* */
|
||||
#define T1_MAX_DICT_DEPTH 5
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
|
||||
/* calls during glyph loading. */
|
||||
/* */
|
||||
#define T1_MAX_SUBRS_CALLS 16
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
|
||||
/* minimum of 16 is required. */
|
||||
/* */
|
||||
/* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
|
||||
/* */
|
||||
#define T1_MAX_CHARSTRINGS_OPERANDS 256
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define this configuration macro if you want to prevent the */
|
||||
/* compilation of `t1afm', which is in charge of reading Type 1 AFM */
|
||||
/* files into an existing face. Note that if set, the T1 driver will be */
|
||||
/* unable to produce kerning distances. */
|
||||
/* */
|
||||
#undef T1_CONFIG_OPTION_NO_AFM
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define this configuration macro if you want to prevent the */
|
||||
/* compilation of the Multiple Masters font support in the Type 1 */
|
||||
/* driver. */
|
||||
/* */
|
||||
#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Compile autofit module with CJK script support. */
|
||||
/* */
|
||||
#define AF_CONFIG_OPTION_CJK
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Compile autofit module with Indic script support. */
|
||||
/* */
|
||||
#define AF_CONFIG_OPTION_INDIC
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
/*
|
||||
* Define this variable if you want to keep the layout of internal
|
||||
* structures that was used prior to FreeType 2.2. This also compiles in
|
||||
* a few obsolete functions to avoid linking problems on typical Unix
|
||||
* distributions.
|
||||
*
|
||||
* For embedded systems or building a new distribution from scratch, it
|
||||
* is recommended to disable the macro since it reduces the library's code
|
||||
* size and activates a few memory-saving optimizations as well.
|
||||
*/
|
||||
#define FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
|
||||
/*
|
||||
* This variable is defined if either unpatented or native TrueType
|
||||
* hinting is requested by the definitions above.
|
||||
*/
|
||||
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||
#define TT_USE_BYTECODE_INTERPRETER
|
||||
#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
|
||||
#define TT_USE_BYTECODE_INTERPRETER
|
||||
#endif
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTOPTION_H__ */
|
||||
|
||||
|
||||
/* END */
|
@ -1,180 +0,0 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftstdlib.h */
|
||||
/* */
|
||||
/* ANSI-specific library and header configuration file (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* This file is used to group all #includes to the ANSI C library that */
|
||||
/* FreeType normally requires. It also defines macros to rename the */
|
||||
/* standard functions within the FreeType source code. */
|
||||
/* */
|
||||
/* Load a file which defines __FTSTDLIB_H__ before this one to override */
|
||||
/* it. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTSTDLIB_H__
|
||||
#define __FTSTDLIB_H__
|
||||
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#define ft_ptrdiff_t ptrdiff_t
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* */
|
||||
/* integer limits */
|
||||
/* */
|
||||
/* UINT_MAX and ULONG_MAX are used to automatically compute the size */
|
||||
/* of `int' and `long' in bytes at compile-time. So far, this works */
|
||||
/* for all platforms the library has been tested on. */
|
||||
/* */
|
||||
/* Note that on the extremely rare platforms that do not provide */
|
||||
/* integer types that are _exactly_ 16 and 32 bits wide (e.g. some */
|
||||
/* old Crays where `int' is 36 bits), we do not make any guarantee */
|
||||
/* about the correct behaviour of FT2 with all fonts. */
|
||||
/* */
|
||||
/* In these case, `ftconfig.h' will refuse to compile anyway with a */
|
||||
/* message like `couldn't find 32-bit type' or something similar. */
|
||||
/* */
|
||||
/* IMPORTANT NOTE: We do not define aliases for heap management and */
|
||||
/* i/o routines (i.e. malloc/free/fopen/fread/...) */
|
||||
/* since these functions should all be encapsulated */
|
||||
/* by platform-specific implementations of */
|
||||
/* `ftsystem.c'. */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#define FT_CHAR_BIT CHAR_BIT
|
||||
#define FT_INT_MAX INT_MAX
|
||||
#define FT_UINT_MAX UINT_MAX
|
||||
#define FT_ULONG_MAX ULONG_MAX
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* */
|
||||
/* character and string processing */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#define ft_memchr memchr
|
||||
#define ft_memcmp memcmp
|
||||
#define ft_memcpy memcpy
|
||||
#define ft_memmove memmove
|
||||
#define ft_memset memset
|
||||
#define ft_strcat strcat
|
||||
#define ft_strcmp strcmp
|
||||
#define ft_strcpy strcpy
|
||||
#define ft_strlen strlen
|
||||
#define ft_strncmp strncmp
|
||||
#define ft_strncpy strncpy
|
||||
#define ft_strrchr strrchr
|
||||
#define ft_strstr strstr
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* */
|
||||
/* file handling */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#define FT_FILE FILE
|
||||
#define ft_fclose fclose
|
||||
#define ft_fopen fopen
|
||||
#define ft_fread fread
|
||||
#define ft_fseek fseek
|
||||
#define ft_ftell ftell
|
||||
#define ft_sprintf sprintf
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* */
|
||||
/* sorting */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#define ft_qsort qsort
|
||||
|
||||
#define ft_exit exit /* only used to exit from unhandled exceptions */
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* */
|
||||
/* memory allocation */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
#define ft_scalloc calloc
|
||||
#define ft_sfree free
|
||||
#define ft_smalloc malloc
|
||||
#define ft_srealloc realloc
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* */
|
||||
/* miscellaneous */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
#define ft_atol atol
|
||||
#define ft_labs labs
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* */
|
||||
/* execution control */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
#include <setjmp.h>
|
||||
|
||||
#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */
|
||||
/* jmp_buf is defined as a macro */
|
||||
/* on certain platforms */
|
||||
|
||||
#define ft_longjmp longjmp
|
||||
#define ft_setjmp( b ) setjmp( *(jmp_buf*) &(b) ) /* same thing here */
|
||||
|
||||
|
||||
/* the following is only used for debugging purposes, i.e., if */
|
||||
/* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
|
||||
#endif /* __FTSTDLIB_H__ */
|
||||
|
||||
|
||||
/* END */
|
@ -65,9 +65,12 @@ extern void longjmp( jmp_buf, int ) __attribute__((noreturn));
|
||||
#define JPEGLIB_USE_STDIO
|
||||
#if ANDROID
|
||||
#include "android/jpeglib/jpeglib.h"
|
||||
#else
|
||||
#elif defined WIN32
|
||||
#include "jpeglib/jpeglib.h"
|
||||
#else
|
||||
#include <jpeglib.h>
|
||||
#endif
|
||||
|
||||
#undef JPEGLIB_USE_STDIO
|
||||
|
||||
|
||||
|
@ -16,6 +16,8 @@
|
||||
// This is used, unless overridden in the registry
|
||||
#define VALVE_MASTER_ADDRESS "207.173.177.10:27011"
|
||||
|
||||
#define HB_TIMEOUT 15
|
||||
|
||||
#define PORT_RCON 27015 // defualt RCON port, TCP
|
||||
#define PORT_MASTER 27011 // Default master port, UDP
|
||||
#define PORT_CLIENT 27005 // Default client port, UDP/TCP
|
||||
@ -29,6 +31,8 @@
|
||||
#endif // ENABLE_RPT
|
||||
#define PORT_REPLAY 27040 // Default replay port
|
||||
|
||||
#define PORT_SERVERSINFO 27069 // Default matchmaking port
|
||||
|
||||
// out of band message id bytes
|
||||
|
||||
// M = master, S = server, C = client, A = any
|
||||
@ -80,16 +84,17 @@
|
||||
|
||||
|
||||
// A user is requesting the list of master servers, auth servers, and titan dir servers from the Client Master server
|
||||
#define A2M_GETMASTERSERVERS 'v' // + byte (type of request, TYPE_CLIENT_MASTER or TYPE_SERVER_MASTER)
|
||||
|
||||
// Master server list response
|
||||
#define M2A_MASTERSERVERS 'w' // + byte type + 6 byte IP/Port List
|
||||
#define S2M_GETCHALLENGE 'w' // + dword challenge
|
||||
#define S2M_HEARTBEAT 'y'
|
||||
#define S2M_SHUTDOWN 'z' // Master peering message
|
||||
#define M2S_CHALLENGE 'x' // + dword challenge
|
||||
#define M2C_QUERY 'J' // request module from master
|
||||
#define C2M_CLIENTQUERY '1' // New style server query
|
||||
|
||||
#define A2M_GETACTIVEMODS 'x' // + string Request to master to provide mod statistics ( current usage ). "1" for first mod.
|
||||
|
||||
#define M2A_ACTIVEMODS 'y' // response: modname\r\nusers\r\nservers
|
||||
|
||||
#define M2M_MSG 'z' // Master peering message
|
||||
#define C2S_INFOREQUEST 'v'
|
||||
#define S2C_INFOREPLY 'K'
|
||||
|
||||
// SERVER TO CLIENT/ANY
|
||||
|
||||
@ -106,9 +111,6 @@
|
||||
#define S2A_INFO_SRC 'I' // + Address, hostname, map, gamedir, gamedescription, active players, maxplayers, protocol
|
||||
#define S2A_INFO_GOLDSRC 'm' // Reserved for use by goldsrc servers
|
||||
|
||||
#define S2M_GETFILE 'J' // request module from master
|
||||
#define M2S_SENDFILE 'K' // send module to server
|
||||
|
||||
#define S2C_REDIRECT 'L' // + IP x.x.x.x:port, redirect client to other server/proxy
|
||||
|
||||
#define C2M_CHECKMD5 'M' // player client asks secure master if Module MD5 is valid
|
||||
@ -133,8 +135,6 @@
|
||||
|
||||
#define A2S_KEY_STRING "Source Engine Query" // required postfix to a A2S_INFO query
|
||||
|
||||
#define A2M_GET_SERVERS_BATCH2 '1' // New style server query
|
||||
|
||||
#define A2M_GETACTIVEMODS2 '2' // New style mod info query
|
||||
|
||||
#define C2S_AUTHREQUEST1 '3' //
|
||||
|
@ -12,7 +12,7 @@
|
||||
#endif
|
||||
|
||||
// The current network protocol version. Changing this makes clients and servers incompatible
|
||||
#define PROTOCOL_VERSION 24
|
||||
#define PROTOCOL_VERSION 25
|
||||
|
||||
#define DEMO_BACKWARDCOMPATABILITY
|
||||
|
||||
|
@ -278,7 +278,7 @@ bool CDedicatedAppSystemGroup::PreInit( )
|
||||
return false;
|
||||
|
||||
#ifdef _WIN32
|
||||
g_bVGui = !CommandLine()->CheckParm( "-console" );
|
||||
g_bVGui = CommandLine()->CheckParm( "-vgui" );
|
||||
#endif
|
||||
|
||||
CreateInterfaceFn factory = GetFactory();
|
||||
@ -470,7 +470,7 @@ bool CDedicatedSteamApplication::Create( )
|
||||
//-----------------------------------------------------------------------------
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
#ifndef POSIX
|
||||
#if !defined( POSIX ) && !defined( PLATFORM_64BITS )
|
||||
_asm
|
||||
{
|
||||
fninit
|
||||
|
@ -38,7 +38,12 @@ def build(bld):
|
||||
|
||||
if bld.env.DEST_OS == 'win32':
|
||||
source += [
|
||||
'sys_windows.cpp'
|
||||
'sys_windows.cpp',
|
||||
'vgui/CreateMultiplayerGameServerPage.cpp',
|
||||
'vgui/MainPanel.cpp',
|
||||
'../public/vgui_controls/vgui_controls.cpp',
|
||||
'vgui/vguihelpers.cpp',
|
||||
'console/TextConsoleWin32.cpp'
|
||||
]
|
||||
else:
|
||||
source += [
|
||||
@ -59,6 +64,9 @@ def build(bld):
|
||||
|
||||
libs = ['tier0','vpklib','tier1','tier2','tier3','vstdlib','steam_api','appframework','mathlib', 'EDIT']
|
||||
|
||||
if bld.env.DEST_OS == 'win32':
|
||||
libs += ['vgui_controls', 'USER32', 'SHELL32']
|
||||
|
||||
install_path = bld.env.LIBDIR
|
||||
|
||||
bld.shlib(
|
||||
|
@ -7,7 +7,7 @@
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
@ -199,7 +199,7 @@ bool CNetworkStringTableItem::SetUserData( int tick, int length, const void *use
|
||||
|
||||
if ( length > 0 )
|
||||
{
|
||||
m_pUserData = new unsigned char[ length ];
|
||||
m_pUserData = new unsigned char[ALIGN_VALUE( length, 4 )];
|
||||
Q_memcpy( m_pUserData, userData, length );
|
||||
}
|
||||
else
|
||||
|
@ -706,11 +706,13 @@ bool CBaseClient::SendServerInfo( void )
|
||||
|
||||
serverinfo.WriteToBuffer( msg );
|
||||
|
||||
if ( IsX360() && serverinfo.m_nMaxClients > 1 )
|
||||
#ifdef _X360
|
||||
if ( serverinfo.m_nMaxClients > 1 )
|
||||
{
|
||||
Msg( "Telling clients to connect" );
|
||||
g_pMatchmaking->TellClientsToConnect();
|
||||
}
|
||||
#endif
|
||||
|
||||
// send first tick
|
||||
m_nSignonTick = m_Server->m_nTickCount;
|
||||
@ -1431,7 +1433,7 @@ void CBaseClient::UpdateUserSettings()
|
||||
SetRate( rate, false );
|
||||
|
||||
// set server to client update rate
|
||||
SetUpdateRate( m_ConVars->GetInt( "cl_updaterate", 20), false );
|
||||
SetUpdateRate( m_ConVars->GetInt( "cl_updaterate", 60), false );
|
||||
|
||||
SetMaxRoutablePayloadSize( m_ConVars->GetInt( "net_maxroutable", MAX_ROUTABLE_PAYLOAD ) );
|
||||
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "sv_plugin.h"
|
||||
#include "sys_dll.h"
|
||||
#include "host.h"
|
||||
#include "master.h"
|
||||
#if defined( REPLAY_ENABLED )
|
||||
#include "replay_internal.h"
|
||||
#include "replayserver.h"
|
||||
@ -875,6 +876,8 @@ bool CBaseClientState::ProcessConnectionlessPacket( netpacket_t *packet )
|
||||
|
||||
Assert( packet );
|
||||
|
||||
master->ProcessConnectionlessPacket( packet );
|
||||
|
||||
bf_read &msg = packet->message; // handy shortcut
|
||||
|
||||
int c = msg.ReadByte();
|
||||
|
@ -56,6 +56,7 @@
|
||||
#include "sv_ipratelimit.h"
|
||||
#include "cl_steamauth.h"
|
||||
#include "sv_filter.h"
|
||||
#include "master.h"
|
||||
|
||||
#if defined( _X360 )
|
||||
#include "xbox/xbox_win32stubs.h"
|
||||
@ -663,6 +664,8 @@ bool CBaseServer::ValidInfoChallenge( netadr_t & adr, const char *nugget )
|
||||
|
||||
bool CBaseServer::ProcessConnectionlessPacket(netpacket_t * packet)
|
||||
{
|
||||
master->ProcessConnectionlessPacket( packet );
|
||||
|
||||
bf_read msg = packet->message; // handy shortcut
|
||||
|
||||
char c = msg.ReadChar();
|
||||
@ -1401,12 +1404,12 @@ bool CBaseServer::CheckProtocol( netadr_t &adr, int nProtocol, int clientChallen
|
||||
// Client is newer than server
|
||||
if ( nProtocol > PROTOCOL_VERSION )
|
||||
{
|
||||
RejectConnection( adr, clientChallenge, "#GameUI_ServerRejectOldProtocol" );
|
||||
RejectConnection( adr, clientChallenge, "#GameUI_ServerRejectOldVersion" );
|
||||
}
|
||||
else
|
||||
// Server is newer than client
|
||||
{
|
||||
RejectConnection( adr, clientChallenge, "#GameUI_ServerRejectNewProtocol" );
|
||||
RejectConnection( adr, clientChallenge, "#GameUI_ServerRejectNewVersion" );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -686,7 +686,7 @@ void CDemoRecorder::CloseDemoFile()
|
||||
|
||||
m_DemoFile.Close();
|
||||
|
||||
g_ClientDLL->OnDemoRecordStop();
|
||||
if( g_ClientDLL ) g_ClientDLL->OnDemoRecordStop();
|
||||
}
|
||||
|
||||
m_bCloseDemoFile = false;
|
||||
|
@ -2367,7 +2367,8 @@ bool CL_ShouldLoadBackgroundLevel( const CCommand &args )
|
||||
// don't load the map in developer or console mode
|
||||
if ( developer.GetInt() ||
|
||||
CommandLine()->CheckParm("-console") ||
|
||||
CommandLine()->CheckParm("-dev") )
|
||||
CommandLine()->CheckParm("-dev") ||
|
||||
CommandLine()->CheckParm("-nobackgroundlevel") )
|
||||
return false;
|
||||
|
||||
// don't load the map if we're going straight into a level
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include "client_pch.h"
|
||||
#ifdef SWDS
|
||||
#include "igame.h"
|
||||
#include "hltvclientstate.h"
|
||||
#include "convar.h"
|
||||
#include "enginestats.h"
|
||||
@ -37,9 +38,9 @@ bool CL_IsPortalDemo()
|
||||
|
||||
bool HandleRedirectAndDebugLog( const char *msg );
|
||||
|
||||
void BeginLoadingUpdates( MaterialNonInteractiveMode_t mode ) {}
|
||||
//void BeginLoadingUpdates( MaterialNonInteractiveMode_t mode ) {}
|
||||
//void EndLoadingUpdates() {}
|
||||
void RefreshScreenIfNecessary() {}
|
||||
void EndLoadingUpdates() {}
|
||||
|
||||
|
||||
void Con_ColorPrintf( const Color& clr, const char *fmt, ... )
|
||||
|
@ -1816,14 +1816,14 @@ void CClientState::FinishSignonState_New()
|
||||
//
|
||||
// This is pretty janky, but doesn't really have any cost (and even makes our one-frozen-frame load screen slightly
|
||||
// less likely to trigger OS "not responding" warnings)
|
||||
// extern void V_RenderVGuiOnly();
|
||||
// V_RenderVGuiOnly();
|
||||
extern void V_RenderSwapBuffers();
|
||||
V_RenderSwapBuffers();
|
||||
|
||||
// Before we do anything with the whitelist, make sure we have the proper map pack mounted
|
||||
// this will load the .bsp by setting the world model the string list at the hardcoded index 1.
|
||||
cl.SetModel( 1 );
|
||||
|
||||
//V_RenderVGuiOnly();
|
||||
V_RenderSwapBuffers();
|
||||
|
||||
// Check for a new whitelist. It's good to do it early in the connection process here because if we wait until later,
|
||||
// the client may have loaded some files w/o the proper whitelist restrictions and we'd have to reload them.
|
||||
|
@ -873,9 +873,9 @@ bool IntersectRayWithBoxBrush( TraceInfo_t *pTraceInfo, const cbrush_t *pBrush,
|
||||
FPExceptionDisabler hideExceptions;
|
||||
|
||||
// Load the unaligned ray/box parameters into SIMD registers
|
||||
fltx4 start = LoadUnaligned3SIMD(pTraceInfo->m_start.Base());
|
||||
fltx4 extents = LoadUnaligned3SIMD(pTraceInfo->m_extents.Base());
|
||||
fltx4 delta = LoadUnaligned3SIMD(pTraceInfo->m_delta.Base());
|
||||
fltx4 start = LoadAlignedSIMD(pTraceInfo->m_start.Base());
|
||||
fltx4 extents = LoadAlignedSIMD(pTraceInfo->m_extents.Base());
|
||||
fltx4 delta = LoadAlignedSIMD(pTraceInfo->m_delta.Base());
|
||||
fltx4 boxMins = LoadAlignedSIMD( pBox->mins.Base() );
|
||||
fltx4 boxMaxs = LoadAlignedSIMD( pBox->maxs.Base() );
|
||||
|
||||
@ -899,7 +899,7 @@ bool IntersectRayWithBoxBrush( TraceInfo_t *pTraceInfo, const cbrush_t *pBrush,
|
||||
|
||||
fltx4 crossPlane = OrSIMD(XorSIMD(startOutMins,endOutMins), XorSIMD(startOutMaxs,endOutMaxs));
|
||||
// now build the per-axis interval of t for intersections
|
||||
fltx4 invDelta = LoadUnaligned3SIMD(pTraceInfo->m_invDelta.Base());
|
||||
fltx4 invDelta = LoadAlignedSIMD(pTraceInfo->m_invDelta.Base());
|
||||
fltx4 tmins = MulSIMD( offsetMinsExpanded, invDelta );
|
||||
fltx4 tmaxs = MulSIMD( offsetMaxsExpanded, invDelta );
|
||||
// now sort the interval per axis
|
||||
@ -1037,9 +1037,9 @@ bool IntersectRayWithBox( const Ray_t &ray, const VectorAligned &inInvDelta, con
|
||||
pTrace->fraction = 1.0f;
|
||||
|
||||
// Load the unaligned ray/box parameters into SIMD registers
|
||||
fltx4 start = LoadUnaligned3SIMD(ray.m_Start.Base());
|
||||
fltx4 extents = LoadUnaligned3SIMD(ray.m_Extents.Base());
|
||||
fltx4 delta = LoadUnaligned3SIMD(ray.m_Delta.Base());
|
||||
fltx4 start = LoadAlignedSIMD(ray.m_Start.Base());
|
||||
fltx4 extents = LoadAlignedSIMD(ray.m_Extents.Base());
|
||||
fltx4 delta = LoadAlignedSIMD(ray.m_Delta.Base());
|
||||
fltx4 boxMins = LoadAlignedSIMD( inBoxMins.Base() );
|
||||
fltx4 boxMaxs = LoadAlignedSIMD( inBoxMaxs.Base() );
|
||||
|
||||
@ -1372,9 +1372,9 @@ void FASTCALL CM_ClipBoxToBrush( TraceInfo_t * RESTRICT pTraceInfo, const cbrush
|
||||
|
||||
inline bool IsTraceBoxIntersectingBoxBrush( TraceInfo_t *pTraceInfo, cboxbrush_t *pBox )
|
||||
{
|
||||
fltx4 start = LoadUnaligned3SIMD(pTraceInfo->m_start.Base());
|
||||
fltx4 mins = LoadUnaligned3SIMD(pTraceInfo->m_mins.Base());
|
||||
fltx4 maxs = LoadUnaligned3SIMD(pTraceInfo->m_maxs.Base());
|
||||
fltx4 start = LoadAlignedSIMD(pTraceInfo->m_start.Base());
|
||||
fltx4 mins = LoadAlignedSIMD(pTraceInfo->m_mins.Base());
|
||||
fltx4 maxs = LoadAlignedSIMD(pTraceInfo->m_maxs.Base());
|
||||
|
||||
fltx4 boxMins = LoadAlignedSIMD( pBox->mins.Base() );
|
||||
fltx4 boxMaxs = LoadAlignedSIMD( pBox->maxs.Base() );
|
||||
@ -1569,15 +1569,15 @@ void FASTCALL CM_TraceToLeaf( TraceInfo_t * RESTRICT pTraceInfo, int ndxLeaf, fl
|
||||
if (IsX360())
|
||||
{
|
||||
// set up some relatively constant variables we'll use in the loop below
|
||||
fltx4 traceStart = LoadUnaligned3SIMD(pTraceInfo->m_start.Base());
|
||||
fltx4 traceDelta = LoadUnaligned3SIMD(pTraceInfo->m_delta.Base());
|
||||
fltx4 traceInvDelta = LoadUnaligned3SIMD(pTraceInfo->m_invDelta.Base());
|
||||
fltx4 traceStart = LoadAlignedSIMD(pTraceInfo->m_start.Base());
|
||||
fltx4 traceDelta = LoadAlignedSIMD(pTraceInfo->m_delta.Base());
|
||||
fltx4 traceInvDelta = LoadAlignedSIMD(pTraceInfo->m_invDelta.Base());
|
||||
static const fltx4 vecEpsilon = {DISPCOLL_DIST_EPSILON,DISPCOLL_DIST_EPSILON,DISPCOLL_DIST_EPSILON,DISPCOLL_DIST_EPSILON};
|
||||
// only used in !IS_POINT version:
|
||||
fltx4 extents;
|
||||
if (!IS_POINT)
|
||||
{
|
||||
extents = LoadUnaligned3SIMD(pTraceInfo->m_extents.Base());
|
||||
extents = LoadAlignedSIMD(pTraceInfo->m_extents.Base());
|
||||
}
|
||||
|
||||
// TODO: this loop probably ought to be unrolled so that we can make a more efficient
|
||||
|
@ -42,13 +42,13 @@ struct TraceInfo_t
|
||||
m_nCheckDepth = -1;
|
||||
}
|
||||
|
||||
Vector m_start;
|
||||
Vector m_end;
|
||||
Vector m_mins;
|
||||
Vector m_maxs;
|
||||
Vector m_extents;
|
||||
Vector m_delta;
|
||||
Vector m_invDelta;
|
||||
VectorAligned m_start;
|
||||
VectorAligned m_end;
|
||||
VectorAligned m_mins;
|
||||
VectorAligned m_maxs;
|
||||
VectorAligned m_extents;
|
||||
VectorAligned m_delta;
|
||||
VectorAligned m_invDelta;
|
||||
|
||||
trace_t m_trace;
|
||||
trace_t m_stabTrace;
|
||||
|
@ -97,22 +97,19 @@ COM_ExplainDisconnection
|
||||
*/
|
||||
void COM_ExplainDisconnection( bool bPrint, const char *fmt, ... )
|
||||
{
|
||||
if ( IsX360() )
|
||||
{
|
||||
g_pMatchmaking->SessionNotification( SESSION_NOTIFY_LOST_SERVER );
|
||||
}
|
||||
else
|
||||
{
|
||||
va_list argptr;
|
||||
char string[1024];
|
||||
#ifdef _X360
|
||||
g_pMatchmaking->SessionNotification( SESSION_NOTIFY_LOST_SERVER );
|
||||
#else
|
||||
va_list argptr;
|
||||
char string[1024];
|
||||
|
||||
va_start (argptr, fmt);
|
||||
Q_vsnprintf(string, sizeof( string ), fmt,argptr);
|
||||
va_end (argptr);
|
||||
va_start (argptr, fmt);
|
||||
Q_vsnprintf(string, sizeof( string ), fmt,argptr);
|
||||
va_end (argptr);
|
||||
|
||||
Q_strncpy( gszDisconnectReason, string, 256 );
|
||||
gfExtendedError = true;
|
||||
}
|
||||
Q_strncpy( gszDisconnectReason, string, 256 );
|
||||
gfExtendedError = true;
|
||||
#endif
|
||||
|
||||
if ( bPrint )
|
||||
{
|
||||
@ -146,21 +143,18 @@ COM_ExtendedExplainDisconnection
|
||||
*/
|
||||
void COM_ExtendedExplainDisconnection( bool bPrint, const char *fmt, ... )
|
||||
{
|
||||
if ( IsX360() )
|
||||
{
|
||||
g_pMatchmaking->SessionNotification( SESSION_NOTIFY_LOST_SERVER );
|
||||
}
|
||||
else
|
||||
{
|
||||
va_list argptr;
|
||||
char string[1024];
|
||||
|
||||
va_start (argptr, fmt);
|
||||
Q_vsnprintf(string, sizeof( string ), fmt,argptr);
|
||||
va_end (argptr);
|
||||
#ifdef _X360
|
||||
g_pMatchmaking->SessionNotification( SESSION_NOTIFY_LOST_SERVER );
|
||||
#else
|
||||
va_list argptr;
|
||||
char string[1024];
|
||||
|
||||
Q_strncpy( gszExtendedDisconnectReason, string, 256 );
|
||||
}
|
||||
va_start (argptr, fmt);
|
||||
Q_vsnprintf(string, sizeof( string ), fmt,argptr);
|
||||
va_end (argptr);
|
||||
|
||||
Q_strncpy( gszExtendedDisconnectReason, string, 256 );
|
||||
#endif
|
||||
|
||||
if ( bPrint )
|
||||
{
|
||||
@ -1385,7 +1379,7 @@ bool COM_BufferToBufferDecompress( void *dest, unsigned int *destLen, const void
|
||||
if ( pHeader->id == LZSS_ID )
|
||||
{
|
||||
CLZSS s;
|
||||
int nActualDecompressedSize = s.SafeUncompress( (byte *)source, (byte *)dest, *destLen );
|
||||
int nActualDecompressedSize = s.SafeUncompress( (byte *)source, sourceLen, (byte *)dest, *destLen );
|
||||
if ( nActualDecompressedSize != nDecompressedSize )
|
||||
{
|
||||
Warning( "NET_BufferToBufferDecompress: header said %d bytes would be decompressed, but we LZSS decompressed %d\n", nDecompressedSize, nActualDecompressedSize );
|
||||
|
@ -425,7 +425,7 @@ DWORD __stdcall DownloadThread( void *voidPtr )
|
||||
//Thread_DPrintf( "Requesting full download\n%s", headers );
|
||||
}
|
||||
|
||||
rc.hDataResource = InternetOpenUrl(rc.hOpenResource, fullURL, headerPtr, headerLen, flags,(DWORD)(&rc) );
|
||||
rc.hDataResource = InternetOpenUrl(rc.hOpenResource, fullURL, headerPtr, headerLen, flags, (DWORD_PTR)(&rc) );
|
||||
|
||||
// send the request off
|
||||
if ( !rc.hDataResource )
|
||||
@ -921,7 +921,7 @@ void DownloadThread( void *voidPtr )
|
||||
// Delete rc.data, which was allocated in this thread
|
||||
if ( rc.data != NULL )
|
||||
{
|
||||
delete[] rc.data;
|
||||
free(rc.data);
|
||||
rc.data = NULL;
|
||||
}
|
||||
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "steam/steam_api.h"
|
||||
#include "LoadScreenUpdate.h"
|
||||
#include "datacache/idatacache.h"
|
||||
#include "master.h"
|
||||
|
||||
#if !defined SWDS
|
||||
#include "voice.h"
|
||||
@ -1820,6 +1821,8 @@ void Host_ShutdownServer( void )
|
||||
if ( !sv.IsActive() )
|
||||
return;
|
||||
|
||||
master->ShutdownConnection();
|
||||
|
||||
Host_AllowQueuedMaterialSystem( false );
|
||||
// clear structures
|
||||
#if !defined( SWDS )
|
||||
@ -3497,10 +3500,12 @@ void _Host_RunFrame (float time)
|
||||
//-------------------
|
||||
_Host_RunFrame_Sound();
|
||||
|
||||
#ifndef DEDICATED
|
||||
if ( g_bVCRSingleStep )
|
||||
{
|
||||
VCR_EnterPausedState();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4951,7 +4956,7 @@ void Host_Shutdown(void)
|
||||
TRACESHUTDOWN( HLTV_Shutdown() );
|
||||
|
||||
TRACESHUTDOWN( g_Log.Shutdown() );
|
||||
|
||||
|
||||
TRACESHUTDOWN( g_GameEventManager.Shutdown() );
|
||||
|
||||
TRACESHUTDOWN( sv.Shutdown() );
|
||||
|
@ -4353,20 +4353,20 @@ ModelInstanceHandle_t CModelRender::CreateInstance( IClientRenderable *pRenderab
|
||||
|
||||
// validate static color meshes once, now at load/create time
|
||||
ValidateStaticPropColorData( handle );
|
||||
|
||||
|
||||
// 360 persists the color meshes across same map loads
|
||||
if ( !IsX360() || instance.m_ColorMeshHandle == DC_INVALID_HANDLE )
|
||||
#ifdef _X360
|
||||
if ( r_decalstaticprops.GetBool() && instance.m_LightCacheHandle )
|
||||
instance.m_AmbientLightingState = *(LightcacheGetStatic( *pCache, NULL, LIGHTCACHEFLAGS_STATIC ));
|
||||
#else
|
||||
if ( instance.m_ColorMeshHandle == DC_INVALID_HANDLE )
|
||||
{
|
||||
// builds out color meshes or loads disk colors, now at load/create time
|
||||
RecomputeStaticLighting( handle );
|
||||
}
|
||||
else
|
||||
if ( r_decalstaticprops.GetBool() && instance.m_LightCacheHandle )
|
||||
{
|
||||
instance.m_AmbientLightingState = *(LightcacheGetStatic( *pCache, NULL, LIGHTCACHEFLAGS_STATIC ));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
61
engine/master.h
Normal file
61
engine/master.h
Normal file
@ -0,0 +1,61 @@
|
||||
//======== (C) Copyright 1999, 2000 Valve, L.L.C. All rights reserved. ========
|
||||
//
|
||||
// The copyright to the contents herein is the property of Valve, L.L.C.
|
||||
// The contents may be used and/or copied only with the written permission of
|
||||
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
|
||||
// the agreement/contract under which the contents have been supplied.
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $Workfile: $
|
||||
// $Date: $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// $Log: $
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================
|
||||
#ifndef MASTER_H
|
||||
#define MASTER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "engine/iserversinfo.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Implements a master server interface.
|
||||
//-----------------------------------------------------------------------------
|
||||
class IMaster
|
||||
{
|
||||
public:
|
||||
// Allow master server to register cvars/commands
|
||||
virtual void Init( void ) = 0;
|
||||
// System is shutting down
|
||||
virtual void Shutdown( void ) = 0;
|
||||
// Server is shutting down
|
||||
virtual void ShutdownConnection( void ) = 0;
|
||||
// Sends the actual heartbeat to the master ( after challenge value is parsed )
|
||||
virtual void SendHeartbeat( struct adrlist_s *p ) = 0;
|
||||
// Add server to global master list
|
||||
virtual void AddServer( struct netadr_s *adr ) = 0;
|
||||
// If parsing for server, etc. fails, always have at least one server around to use.
|
||||
virtual void UseDefault ( void ) = 0;
|
||||
// See if it's time to send the next heartbeat
|
||||
virtual void CheckHeartbeat( void ) = 0;
|
||||
// Master sent back a challenge value, read it and send the actual heartbeat
|
||||
virtual void RespondToHeartbeatChallenge( netadr_t &from, bf_read &msg ) = 0;
|
||||
// Console command to set/remove master server
|
||||
virtual void AddMaster_f( const CCommand &args ) = 0;
|
||||
// Force a heartbeat to be issued right away
|
||||
virtual void Heartbeat_f( void ) = 0;
|
||||
|
||||
virtual void ProcessConnectionlessPacket( netpacket_t *packet ) = 0;
|
||||
|
||||
virtual void RunFrame( void ) = 0;
|
||||
};
|
||||
|
||||
extern IMaster *master;
|
||||
extern IServersInfo *g_pServersInfo;
|
||||
|
||||
#endif // MASTER_H
|
722
engine/masterserver.cpp
Normal file
722
engine/masterserver.cpp
Normal file
@ -0,0 +1,722 @@
|
||||
//======177== (C) Copyright 1999, 2000 Valve, L.L.C. All rights reserved. ========
|
||||
//
|
||||
// The copyright to the contents herein is the property of Valve, L.L.C.
|
||||
// The contents may be used and/or copied only with the written permission of
|
||||
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
|
||||
// the agreement/contract under which the contents have been supplied.
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $Workfile: $
|
||||
// $Date: $
|
||||
// $NoKeywords: $
|
||||
//=============================================================================
|
||||
#include "quakedef.h"
|
||||
#include "server.h"
|
||||
#include "master.h"
|
||||
#include "proto_oob.h"
|
||||
#include "host.h"
|
||||
#include "eiface.h"
|
||||
#include "server.h"
|
||||
#include "utlmap.h"
|
||||
|
||||
extern ConVar sv_tags;
|
||||
extern ConVar sv_lan;
|
||||
|
||||
#define S2A_EXTRA_DATA_HAS_GAMETAG_DATA 0x01 // Next bytes are the game tag string
|
||||
#define RETRY_INFO_REQUEST_TIME 0.4 // seconds
|
||||
#define MASTER_RESPONSE_TIMEOUT 1.5 // seconds
|
||||
#define INFO_REQUEST_TIMEOUT 5.0 // seconds
|
||||
|
||||
static char g_MasterServers[][64] =
|
||||
{
|
||||
"185.192.97.130:27010",
|
||||
"168.138.92.21:27016",
|
||||
"135.125.188.162:27010"
|
||||
};
|
||||
|
||||
#ifdef DEDICATED
|
||||
#define IsLan() false
|
||||
#else
|
||||
#define IsLan() sv_lan.GetInt()
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: List of master servers and some state info about them
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef struct adrlist_s
|
||||
{
|
||||
// Next master in chain
|
||||
struct adrlist_s *next;
|
||||
// Challenge request sent to master
|
||||
qboolean heartbeatwaiting;
|
||||
// Challenge request send time
|
||||
float heartbeatwaitingtime;
|
||||
// Last one is Main master
|
||||
int heartbeatchallenge;
|
||||
// Time we sent last heartbeat
|
||||
double last_heartbeat;
|
||||
// Master server address
|
||||
netadr_t adr;
|
||||
} adrlist_t;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Implements the master server interface
|
||||
//-----------------------------------------------------------------------------
|
||||
class CMaster : public IMaster, public IServersInfo
|
||||
{
|
||||
public:
|
||||
CMaster( void );
|
||||
virtual ~CMaster( void );
|
||||
|
||||
// Heartbeat functions.
|
||||
void Init( void );
|
||||
void Shutdown( void );
|
||||
// Sets up master address
|
||||
void ShutdownConnection(void);
|
||||
void SendHeartbeat( struct adrlist_s *p );
|
||||
void AddServer( struct netadr_s *adr );
|
||||
void UseDefault ( void );
|
||||
void CheckHeartbeat (void);
|
||||
void RespondToHeartbeatChallenge( netadr_t &from, bf_read &msg );
|
||||
void PingServer( netadr_t &svadr );
|
||||
|
||||
void ProcessConnectionlessPacket( netpacket_t *packet );
|
||||
|
||||
void AddMaster_f( const CCommand &args );
|
||||
void Heartbeat_f( void );
|
||||
|
||||
void RunFrame();
|
||||
void RetryServersInfoRequest();
|
||||
|
||||
void ReplyInfo( const netadr_t &adr, uint sequence );
|
||||
newgameserver_t &ProcessInfo( bf_read &buf );
|
||||
|
||||
// SeversInfo
|
||||
void RequestInternetServerList( const char *gamedir, IServerListResponse *response );
|
||||
void RequestLANServerList( const char *gamedir, IServerListResponse *response );
|
||||
void AddServerAddresses( netadr_t **adr, int count );
|
||||
void RequestServerInfo( const netadr_t &adr );
|
||||
void StopRefresh();
|
||||
|
||||
private:
|
||||
// List of known master servers
|
||||
adrlist_t *m_pMasterAddresses;
|
||||
|
||||
bool m_bInitialized;
|
||||
bool m_bRefreshing;
|
||||
|
||||
int m_iServersResponded;
|
||||
|
||||
double m_flStartRequestTime;
|
||||
double m_flRetryRequestTime;
|
||||
double m_flMasterRequestTime;
|
||||
|
||||
uint m_iInfoSequence;
|
||||
char m_szGameDir[256];
|
||||
|
||||
// If nomaster is true, the server will not send heartbeats to the master server
|
||||
bool m_bNoMasters;
|
||||
|
||||
CUtlMap<netadr_t, bool> m_serverAddresses;
|
||||
CUtlMap<uint, double> m_serversRequestTime;
|
||||
|
||||
IServerListResponse *m_serverListResponse;
|
||||
};
|
||||
|
||||
static CMaster s_MasterServer;
|
||||
IMaster *master = (IMaster *)&s_MasterServer;
|
||||
|
||||
IServersInfo *g_pServersInfo = (IServersInfo*)&s_MasterServer;
|
||||
|
||||
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CMaster, IServersInfo, SERVERLIST_INTERFACE_VERSION, s_MasterServer );
|
||||
|
||||
#define HEARTBEAT_SECONDS 140.0
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CMaster::CMaster( void )
|
||||
{
|
||||
m_pMasterAddresses = NULL;
|
||||
m_bNoMasters = false;
|
||||
m_bInitialized = false;
|
||||
m_iServersResponded = 0;
|
||||
|
||||
m_serverListResponse = NULL;
|
||||
SetDefLessFunc( m_serverAddresses );
|
||||
SetDefLessFunc( m_serversRequestTime );
|
||||
m_bRefreshing = false;
|
||||
m_iInfoSequence = 1;
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
CMaster::~CMaster( void )
|
||||
{
|
||||
}
|
||||
|
||||
void CMaster::RunFrame()
|
||||
{
|
||||
CheckHeartbeat();
|
||||
|
||||
if( !m_bRefreshing )
|
||||
return;
|
||||
|
||||
if( m_serverListResponse &&
|
||||
m_flStartRequestTime < Plat_FloatTime()-INFO_REQUEST_TIMEOUT )
|
||||
{
|
||||
StopRefresh();
|
||||
m_serverListResponse->RefreshComplete( NServerResponse::nServerFailedToRespond );
|
||||
return;
|
||||
}
|
||||
|
||||
if( m_iServersResponded > 0 &&
|
||||
m_iServersResponded >= m_serverAddresses.Count() &&
|
||||
m_flMasterRequestTime < Plat_FloatTime() - MASTER_RESPONSE_TIMEOUT )
|
||||
{
|
||||
StopRefresh();
|
||||
m_serverListResponse->RefreshComplete( NServerResponse::nServerResponded );
|
||||
return;
|
||||
}
|
||||
|
||||
if( m_flRetryRequestTime < Plat_FloatTime() - RETRY_INFO_REQUEST_TIME )
|
||||
{
|
||||
m_flRetryRequestTime = Plat_FloatTime();
|
||||
|
||||
if( m_serverAddresses.Count() == 0 ) // Retry masterserver request
|
||||
{
|
||||
g_pServersInfo->RequestInternetServerList(m_szGameDir, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
if( m_iServersResponded < m_serverAddresses.Count() )
|
||||
RetryServersInfoRequest();
|
||||
}
|
||||
}
|
||||
|
||||
void CMaster::StopRefresh()
|
||||
{
|
||||
if( !m_bRefreshing )
|
||||
return;
|
||||
|
||||
m_iServersResponded = 0;
|
||||
m_bRefreshing = false;
|
||||
m_serverAddresses.RemoveAll();
|
||||
m_serversRequestTime.RemoveAll();
|
||||
}
|
||||
|
||||
void CMaster::ReplyInfo( const netadr_t &adr, uint sequence )
|
||||
{
|
||||
static char gamedir[MAX_OSPATH];
|
||||
Q_FileBase( com_gamedir, gamedir, sizeof( gamedir ) );
|
||||
|
||||
CUtlBuffer buf;
|
||||
buf.EnsureCapacity( 2048 );
|
||||
|
||||
buf.PutUnsignedInt( LittleDWord( CONNECTIONLESS_HEADER ) );
|
||||
buf.PutUnsignedChar( S2C_INFOREPLY );
|
||||
|
||||
buf.PutUnsignedInt(sequence);
|
||||
buf.PutUnsignedChar( PROTOCOL_VERSION ); // Hardcoded protocol version number
|
||||
buf.PutString( sv.GetName() );
|
||||
buf.PutString( sv.GetMapName() );
|
||||
buf.PutString( gamedir );
|
||||
buf.PutString( serverGameDLL->GetGameDescription() );
|
||||
|
||||
// player info
|
||||
buf.PutUnsignedChar( sv.GetNumClients() );
|
||||
buf.PutUnsignedChar( sv.GetMaxClients() );
|
||||
buf.PutUnsignedChar( sv.GetNumFakeClients() );
|
||||
|
||||
// Password?
|
||||
buf.PutUnsignedChar( sv.GetPassword() != NULL ? 1 : 0 );
|
||||
|
||||
// Write a byte with some flags that describe what is to follow.
|
||||
const char *pchTags = sv_tags.GetString();
|
||||
int nFlags = 0;
|
||||
|
||||
if ( pchTags && pchTags[0] != '\0' )
|
||||
nFlags |= S2A_EXTRA_DATA_HAS_GAMETAG_DATA;
|
||||
|
||||
buf.PutUnsignedInt( nFlags );
|
||||
|
||||
if ( nFlags & S2A_EXTRA_DATA_HAS_GAMETAG_DATA )
|
||||
buf.PutString( pchTags );
|
||||
|
||||
NET_SendPacket( NULL, NS_SERVER, adr, (unsigned char *)buf.Base(), buf.TellPut() );
|
||||
}
|
||||
|
||||
newgameserver_t &CMaster::ProcessInfo(bf_read &buf)
|
||||
{
|
||||
static newgameserver_t s;
|
||||
memset( &s, 0, sizeof(s) );
|
||||
|
||||
s.m_nProtocolVersion = buf.ReadByte();
|
||||
|
||||
buf.ReadString( s.m_szServerName, sizeof(s.m_szServerName) );
|
||||
buf.ReadString( s.m_szMap, sizeof(s.m_szMap) );
|
||||
buf.ReadString( s.m_szGameDir, sizeof(s.m_szGameDir) );
|
||||
|
||||
buf.ReadString( s.m_szGameDescription, sizeof(s.m_szGameDescription) );
|
||||
|
||||
// player info
|
||||
s.m_nPlayers = buf.ReadByte();
|
||||
s.m_nMaxPlayers = buf.ReadByte();
|
||||
s.m_nBotPlayers = buf.ReadByte();
|
||||
|
||||
// Password?
|
||||
s.m_bPassword = buf.ReadByte();
|
||||
s.m_iFlags = buf.ReadLong();
|
||||
|
||||
if( s.m_iFlags & S2A_EXTRA_DATA_HAS_GAMETAG_DATA )
|
||||
{
|
||||
buf.ReadString( s.m_szGameTags, sizeof(s.m_szGameTags) );
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
void CMaster::ProcessConnectionlessPacket( netpacket_t *packet )
|
||||
{
|
||||
static ALIGN4 char string[2048] ALIGN4_POST; // Buffer for sending heartbeat
|
||||
|
||||
uint ip; uint16 port;
|
||||
|
||||
bf_read msg = packet->message;
|
||||
char c = msg.ReadChar();
|
||||
|
||||
if ( c == 0 )
|
||||
return;
|
||||
|
||||
switch( c )
|
||||
{
|
||||
case M2S_CHALLENGE:
|
||||
{
|
||||
RespondToHeartbeatChallenge( packet->from, msg );
|
||||
break;
|
||||
}
|
||||
case M2C_QUERY:
|
||||
{
|
||||
if( !m_bRefreshing )
|
||||
break;
|
||||
|
||||
ip = msg.ReadLong();
|
||||
port = msg.ReadShort();
|
||||
|
||||
while( ip != 0 && port != 0 )
|
||||
{
|
||||
netadr_t adr(ip, port);
|
||||
|
||||
unsigned short index = m_serverAddresses.Find(adr);
|
||||
if( index != m_serverAddresses.InvalidIndex() )
|
||||
{
|
||||
ip = msg.ReadLong();
|
||||
port = msg.ReadShort();
|
||||
continue;
|
||||
}
|
||||
|
||||
m_serverAddresses.Insert(adr, false);
|
||||
RequestServerInfo(adr);
|
||||
|
||||
ip = msg.ReadLong();
|
||||
port = msg.ReadShort();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case C2S_INFOREQUEST:
|
||||
{
|
||||
ReplyInfo(packet->from, msg.ReadLong());
|
||||
break;
|
||||
}
|
||||
case S2C_INFOREPLY:
|
||||
{
|
||||
if( !m_bRefreshing )
|
||||
break;
|
||||
|
||||
uint sequence = msg.ReadLong();
|
||||
newgameserver_t &s = ProcessInfo( msg );
|
||||
|
||||
unsigned short index = m_serverAddresses.Find(packet->from);
|
||||
unsigned short rindex = m_serversRequestTime.Find(sequence);
|
||||
|
||||
if( index == m_serverAddresses.InvalidIndex() ||
|
||||
rindex == m_serversRequestTime.InvalidIndex() )
|
||||
break;
|
||||
|
||||
double requestTime = m_serversRequestTime[rindex];
|
||||
|
||||
if( m_serverAddresses[index] ) // shit happens
|
||||
return;
|
||||
|
||||
m_serverAddresses[index] = true;
|
||||
s.m_nPing = (Plat_FloatTime()-requestTime)*1000.0;
|
||||
s.m_NetAdr = packet->from;
|
||||
m_serverListResponse->ServerResponded( s );
|
||||
|
||||
m_iServersResponded++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CMaster::RequestServerInfo( const netadr_t &adr )
|
||||
{
|
||||
static ALIGN4 char string[256] ALIGN4_POST; // Buffer for sending heartbeat
|
||||
bf_write msg( string, sizeof(string) );
|
||||
|
||||
msg.WriteLong( CONNECTIONLESS_HEADER );
|
||||
msg.WriteByte( C2S_INFOREQUEST );
|
||||
msg.WriteLong( m_iInfoSequence );
|
||||
m_serversRequestTime.Insert(m_iInfoSequence, Plat_FloatTime());
|
||||
|
||||
m_iInfoSequence++;
|
||||
NET_SendPacket( NULL, NS_CLIENT, adr, msg.GetData(), msg.GetNumBytesWritten() );
|
||||
}
|
||||
|
||||
void CMaster::RetryServersInfoRequest()
|
||||
{
|
||||
FOR_EACH_MAP_FAST( m_serverAddresses, i )
|
||||
{
|
||||
bool bResponded = m_serverAddresses.Element(i);
|
||||
if( bResponded )
|
||||
continue;
|
||||
|
||||
const netadr_t adr = m_serverAddresses.Key(i);
|
||||
RequestServerInfo( adr );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Sends a heartbeat to the master server
|
||||
// Input : *p - x00\x00\x00\x00\x00\x00
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::SendHeartbeat ( adrlist_t *p )
|
||||
{
|
||||
static ALIGN4 char string[256] ALIGN4_POST; // Buffer for sending heartbeat
|
||||
char szGD[ MAX_OSPATH ];
|
||||
|
||||
if ( !p )
|
||||
return;
|
||||
|
||||
// Still waiting on challenge response?
|
||||
if ( p->heartbeatwaiting )
|
||||
return;
|
||||
|
||||
// Waited too long
|
||||
if ( (realtime - p->heartbeatwaitingtime ) >= HB_TIMEOUT )
|
||||
return;
|
||||
|
||||
// Send to master
|
||||
Q_FileBase( com_gamedir, szGD, sizeof( szGD ) );
|
||||
|
||||
bf_write buf( string, sizeof(string) );
|
||||
buf.WriteByte( S2M_HEARTBEAT );
|
||||
buf.WriteLong( p->heartbeatchallenge );
|
||||
buf.WriteShort( PROTOCOL_VERSION );
|
||||
buf.WriteString( szGD );
|
||||
|
||||
NET_SendPacket( NULL, NS_SERVER, p->adr, buf.GetData(), buf.GetNumBytesWritten() );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Requests a challenge so we can then send a heartbeat
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::CheckHeartbeat (void)
|
||||
{
|
||||
adrlist_t *p;
|
||||
ALIGN4 char buf[256] ALIGN4_POST;
|
||||
|
||||
if ( m_bNoMasters || // We are ignoring heartbeats
|
||||
IsLan() || // Lan servers don't heartbeat
|
||||
(sv.GetMaxClients() <= 1) || // not a multiplayer server.
|
||||
!sv.IsActive() ) // only heartbeat if a server is running.
|
||||
return;
|
||||
|
||||
p = m_pMasterAddresses;
|
||||
while ( p )
|
||||
{
|
||||
// Time for another try?
|
||||
if ( ( realtime - p->last_heartbeat) < HEARTBEAT_SECONDS) // not time to send yet
|
||||
{
|
||||
p = p->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Should we resend challenge request?
|
||||
if ( p->heartbeatwaiting &&
|
||||
( ( realtime - p->heartbeatwaitingtime ) < HB_TIMEOUT ) )
|
||||
{
|
||||
p = p->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
int32 challenge = RandomInt( 0, INT_MAX );
|
||||
|
||||
p->heartbeatwaiting = true;
|
||||
p->heartbeatwaitingtime = realtime;
|
||||
|
||||
p->last_heartbeat = realtime; // Flag at start so we don't just keep trying for hb's when
|
||||
p->heartbeatchallenge = challenge;
|
||||
|
||||
bf_write msg("Master Join", buf, sizeof(buf));
|
||||
|
||||
msg.WriteByte( S2M_GETCHALLENGE );
|
||||
msg.WriteLong( challenge );
|
||||
|
||||
// Send to master asking for a challenge #
|
||||
NET_SendPacket( NULL, NS_SERVER, p->adr, msg.GetData(), msg.GetNumBytesWritten() );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Server is shutting down, unload master servers list, tell masters that we are closing the server
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::ShutdownConnection( void )
|
||||
{
|
||||
adrlist_t *p;
|
||||
|
||||
if ( !host_initialized )
|
||||
return;
|
||||
|
||||
if ( m_bNoMasters || // We are ignoring heartbeats
|
||||
IsLan() || // Lan servers don't heartbeat
|
||||
(sv.GetMaxClients() <= 1) ) // not a multiplayer server.
|
||||
return;
|
||||
|
||||
const char packet = S2M_SHUTDOWN;
|
||||
|
||||
p = m_pMasterAddresses;
|
||||
while ( p )
|
||||
{
|
||||
NET_SendPacket( NULL, NS_SERVER, p->adr, (unsigned char*)&packet, 1);
|
||||
p->last_heartbeat = -99999.0;
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Add server to the master list
|
||||
// Input : *adr -
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::AddServer( netadr_t *adr )
|
||||
{
|
||||
adrlist_t *n;
|
||||
|
||||
// See if it's there
|
||||
n = m_pMasterAddresses;
|
||||
while ( n )
|
||||
{
|
||||
if ( n->adr.CompareAdr( *adr ) )
|
||||
break;
|
||||
n = n->next;
|
||||
}
|
||||
|
||||
// Found it in the list.
|
||||
if ( n )
|
||||
return;
|
||||
|
||||
n = ( adrlist_t * ) malloc ( sizeof( adrlist_t ) );
|
||||
if ( !n )
|
||||
Sys_Error( "Error allocating %zd bytes for master address.", sizeof( adrlist_t ) );
|
||||
|
||||
memset( n, 0, sizeof( adrlist_t ) );
|
||||
|
||||
n->adr = *adr;
|
||||
|
||||
// Queue up a full heartbeat to all master servers.
|
||||
n->last_heartbeat = -99999.0;
|
||||
|
||||
// Link it in.
|
||||
n->next = m_pMasterAddresses;
|
||||
m_pMasterAddresses = n;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Add built-in default master if woncomm.lst doesn't parse
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::UseDefault ( void )
|
||||
{
|
||||
netadr_t adr;
|
||||
|
||||
for( int i = 0; i < ARRAYSIZE(g_MasterServers);i++ )
|
||||
{
|
||||
// Convert to netadr_t
|
||||
if ( NET_StringToAdr ( g_MasterServers[i], &adr ) )
|
||||
{
|
||||
// Add to master list
|
||||
AddServer( &adr );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::RespondToHeartbeatChallenge( netadr_t &from, bf_read &msg )
|
||||
{
|
||||
adrlist_t *p;
|
||||
uint challenge, challenge2;
|
||||
|
||||
// No masters, just ignore.
|
||||
if ( !m_pMasterAddresses )
|
||||
return;
|
||||
|
||||
p = m_pMasterAddresses;
|
||||
while ( p )
|
||||
{
|
||||
if ( from.CompareAdr( p->adr ) )
|
||||
break;
|
||||
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
// Not a known master server.
|
||||
if ( !p )
|
||||
return;
|
||||
|
||||
challenge = msg.ReadLong();
|
||||
challenge2 = msg.ReadLong();
|
||||
|
||||
if( p->heartbeatchallenge != challenge2 )
|
||||
{
|
||||
Warning("unexpected master server info query packet (wrong challenge!)\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// Kill timer
|
||||
p->heartbeatwaiting = false;
|
||||
p->heartbeatchallenge = challenge;
|
||||
|
||||
// Send the actual heartbeat request to this master server.
|
||||
SendHeartbeat( p );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Add/remove master servers
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::AddMaster_f ( const CCommand &args )
|
||||
{
|
||||
CUtlString cmd( ( args.ArgC() > 1 ) ? args[ 1 ] : "" );
|
||||
|
||||
netadr_t adr;
|
||||
|
||||
if( !NET_StringToAdr(cmd.String(), &adr) )
|
||||
{
|
||||
Warning("Invalid address\n");
|
||||
return;
|
||||
}
|
||||
|
||||
this->AddServer(&adr);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Send a new heartbeat to the master
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::Heartbeat_f (void)
|
||||
{
|
||||
adrlist_t *p;
|
||||
|
||||
p = m_pMasterAddresses;
|
||||
while ( p )
|
||||
{
|
||||
// Queue up a full hearbeat
|
||||
p->last_heartbeat = -9999.0;
|
||||
p->heartbeatwaitingtime = -9999.0;
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void AddMaster_f( const CCommand &args )
|
||||
{
|
||||
master->AddMaster_f( args );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void Heartbeat1_f( void )
|
||||
{
|
||||
master->Heartbeat_f();
|
||||
}
|
||||
|
||||
static ConCommand setmaster("addmaster", AddMaster_f );
|
||||
static ConCommand heartbeat("heartbeat", Heartbeat1_f, "Force heartbeat of master servers" );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Adds master server console commands
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::Init( void )
|
||||
{
|
||||
// Already able to initialize at least once?
|
||||
if ( m_bInitialized )
|
||||
return;
|
||||
|
||||
// So we don't do this a send time.sv_mas
|
||||
m_bInitialized = true;
|
||||
|
||||
UseDefault();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CMaster::Shutdown(void)
|
||||
{
|
||||
adrlist_t *p, *n;
|
||||
|
||||
// Free the master list now.
|
||||
p = m_pMasterAddresses;
|
||||
while ( p )
|
||||
{
|
||||
n = p->next;
|
||||
free( p );
|
||||
p = n;
|
||||
}
|
||||
|
||||
m_pMasterAddresses = NULL;
|
||||
}
|
||||
|
||||
// ServersInfo
|
||||
void CMaster::RequestInternetServerList(const char *gamedir, IServerListResponse *response)
|
||||
{
|
||||
if( m_bNoMasters ) return;
|
||||
strncpy( m_szGameDir, gamedir, sizeof(m_szGameDir) );
|
||||
|
||||
if( response )
|
||||
{
|
||||
StopRefresh();
|
||||
m_bRefreshing = true;
|
||||
m_serverListResponse = response;
|
||||
m_flRetryRequestTime = m_flStartRequestTime = m_flMasterRequestTime = Plat_FloatTime();
|
||||
}
|
||||
|
||||
ALIGN4 char buf[256] ALIGN4_POST;
|
||||
bf_write msg(buf, sizeof(buf));
|
||||
|
||||
msg.WriteByte( C2M_CLIENTQUERY );
|
||||
msg.WriteString(gamedir);
|
||||
|
||||
adrlist_t *p;
|
||||
|
||||
p = m_pMasterAddresses;
|
||||
while ( p )
|
||||
{
|
||||
NET_SendPacket(NULL, NS_CLIENT, p->adr, msg.GetData(), msg.GetNumBytesWritten() );
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
void CMaster::RequestLANServerList(const char *gamedir, IServerListResponse *response)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMaster::AddServerAddresses( netadr_t **adr, int count )
|
||||
{
|
||||
|
||||
}
|
@ -387,7 +387,8 @@ IModelLoader *modelloader = ( IModelLoader * )&g_ModelLoader;
|
||||
//-----------------------------------------------------------------------------
|
||||
// Globals used by the CMapLoadHelper
|
||||
//-----------------------------------------------------------------------------
|
||||
static dheader_t s_MapHeader;
|
||||
dheader_t s_MapHeader;
|
||||
|
||||
static FileHandle_t s_MapFileHandle = FILESYSTEM_INVALID_HANDLE;
|
||||
static char s_szLoadName[128];
|
||||
static char s_szMapName[128];
|
||||
@ -395,6 +396,8 @@ static worldbrushdata_t *s_pMap = NULL;
|
||||
static int s_nMapLoadRecursion = 0;
|
||||
static CUtlBuffer s_MapBuffer;
|
||||
|
||||
int s_MapVersion = 0;
|
||||
|
||||
// Lump files are patches for a shipped map
|
||||
// List of lump files found when map was loaded. Each entry is the lump file index for that lump id.
|
||||
struct lumpfiles_t
|
||||
@ -468,6 +471,8 @@ void CMapLoadHelper::Init( model_t *pMapModel, const char *loadname )
|
||||
return;
|
||||
}
|
||||
|
||||
s_MapVersion = s_MapHeader.version;
|
||||
|
||||
V_strcpy_safe( s_szLoadName, loadname );
|
||||
|
||||
// Store map version, but only do it once so that the communication between the engine and Hammer isn't broken. The map version
|
||||
@ -951,13 +956,13 @@ void EnableHDR( bool bEnable )
|
||||
/// ancient bugs, hence the kill switch.
|
||||
bool bUpdateOffline = mod_offline_hdr_switch.GetBool();
|
||||
#ifndef DEDICATED
|
||||
extern void V_RenderVGuiOnly();
|
||||
extern void V_RenderSwapBuffers();
|
||||
#endif
|
||||
|
||||
if ( bUpdateOffline )
|
||||
{
|
||||
#ifndef DEDICATED
|
||||
V_RenderVGuiOnly();
|
||||
V_RenderSwapBuffers();
|
||||
#endif
|
||||
materials->ReleaseResources();
|
||||
}
|
||||
@ -981,7 +986,7 @@ void EnableHDR( bool bEnable )
|
||||
#ifndef DEDICATED
|
||||
if ( bUpdateOffline )
|
||||
{
|
||||
V_RenderVGuiOnly();
|
||||
V_RenderSwapBuffers();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -5448,6 +5453,15 @@ bool CModelLoader::Map_IsValid( char const *pMapFile, bool bQuiet /* = false */
|
||||
V_strcpy_safe( szMapFile, szMapName360 );
|
||||
}
|
||||
|
||||
bool bHaveBspFormatInPath = strstr(szMapFile, ".bsp");
|
||||
bool bHaveMapsInPath = strstr(szMapFile, "maps/");
|
||||
|
||||
if( !bHaveMapsInPath )
|
||||
snprintf(szMapFile, sizeof(szMapFile), "maps/%s", pMapFile);
|
||||
|
||||
if( !bHaveBspFormatInPath )
|
||||
strncat(szMapFile, ".bsp", sizeof(szMapFile));
|
||||
|
||||
mapfile = g_pFileSystem->OpenEx( szMapFile, "rb", IsX360() ? FSOPEN_NEVERINPACK : 0, "GAME" );
|
||||
if ( mapfile != FILESYSTEM_INVALID_HANDLE )
|
||||
{
|
||||
|
@ -64,9 +64,6 @@ extern int NET_ReceiveStream( int nSock, char * buf, int len, int flags );
|
||||
// We only need to checksum packets on the PC and only when we're actually sending them over the network.
|
||||
static bool ShouldChecksumPackets()
|
||||
{
|
||||
if ( !IsPC() )
|
||||
return false;
|
||||
|
||||
return NET_IsMultiplayer();
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "net_ws_headers.h"
|
||||
#include "net_ws_queued_packet_sender.h"
|
||||
#include "fmtstr.h"
|
||||
#include "master.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
@ -44,7 +45,7 @@ static ConVar droppackets ( "net_droppackets", "0", FCVAR_CHEAT, "Drops next n p
|
||||
static ConVar fakejitter ( "net_fakejitter", "0", FCVAR_CHEAT, "Jitter fakelag packet time" );
|
||||
|
||||
static ConVar net_compressvoice( "net_compressvoice", "0", 0, "Attempt to compress out of band voice payloads (360 only)." );
|
||||
ConVar net_usesocketsforloopback( "net_usesocketsforloopback", "1", 0, "Use network sockets layer even for listen server local player's packets (multiplayer only)." );
|
||||
ConVar net_usesocketsforloopback( "net_usesocketsforloopback", "0", 0, "Use network sockets layer even for listen server local player's packets (multiplayer only)." );
|
||||
|
||||
#ifdef _DEBUG
|
||||
static ConVar fakenoise ( "net_fakenoise", "0", FCVAR_CHEAT, "Simulate corrupt network packets (changes n bits per packet randomly)" );
|
||||
@ -1644,7 +1645,7 @@ netpacket_t *NET_GetPacket (int sock, byte *scratch )
|
||||
// Check loopback first
|
||||
if ( !NET_GetLoopPacket( &inpacket ) )
|
||||
{
|
||||
if ( !NET_IsMultiplayer() )
|
||||
if ( !NET_IsMultiplayer() && sock != NS_CLIENT )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
@ -2351,7 +2352,7 @@ int NET_SendPacket ( INetChannel *chan, int sock, const netadr_t &to, const uns
|
||||
Msg("UDP -> %s: sz=%i OOB '%c'\n", to.ToString(), length, data[4] );
|
||||
}
|
||||
|
||||
if ( !NET_IsMultiplayer() || to.type == NA_LOOPBACK || ( to.IsLocalhost() && !net_usesocketsforloopback.GetBool() ) )
|
||||
if ( (!NET_IsMultiplayer() && sock != NS_CLIENT) || to.type == NA_LOOPBACK || ( to.IsLocalhost() && !net_usesocketsforloopback.GetBool() ) )
|
||||
{
|
||||
Assert( !pVoicePayload );
|
||||
|
||||
@ -2988,6 +2989,8 @@ void NET_RunFrame( double flRealtime )
|
||||
|
||||
#endif // SWDS
|
||||
|
||||
master->RunFrame();
|
||||
|
||||
#ifdef _X360
|
||||
if ( net_logserver.GetInt() )
|
||||
{
|
||||
@ -3110,7 +3113,7 @@ void NET_ListenSocket( int sock, bool bListen )
|
||||
NET_CloseSocket( netsock->hTCP, sock );
|
||||
}
|
||||
|
||||
if ( !NET_IsMultiplayer() || net_notcp )
|
||||
if ( (!NET_IsMultiplayer() && sock != NS_CLIENT) || net_notcp )
|
||||
return;
|
||||
|
||||
if ( bListen )
|
||||
@ -3296,6 +3299,11 @@ void NET_Init( bool bIsDedicated )
|
||||
ipname.SetValue( ip ); // update the cvar right now, this will get overwritten by "stuffcmds" later
|
||||
}
|
||||
|
||||
const int nProtocol = X360SecureNetwork() ? IPPROTO_VDP : IPPROTO_UDP;
|
||||
|
||||
// open client socket for masterserver
|
||||
OpenSocketInternal( NS_CLIENT, clientport.GetInt(), PORT_SERVER, "client", nProtocol, true );
|
||||
|
||||
if ( bIsDedicated )
|
||||
{
|
||||
// set dedicated MP mode
|
||||
|
@ -226,7 +226,7 @@ bool CPureServerWhitelist::LoadCommandsFromKeyValues( KeyValues *kv )
|
||||
else
|
||||
Warning( "Unknown modifier in whitelist file: %s.\n", mods[i] );
|
||||
}
|
||||
mods.PurgeAndDeleteElements();
|
||||
mods.PurgeAndDeleteElementsArray();
|
||||
if (
|
||||
( bFromTrustedSource && ( bAllowFromDisk || bCheckCRC || bAny ) )
|
||||
|| ( bAny && bCheckCRC ) )
|
||||
|
@ -987,7 +987,7 @@ private:
|
||||
int m_iTree;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
class CIntersectPoint : public CPartitionVisitor
|
||||
{
|
||||
public:
|
||||
@ -1009,7 +1009,7 @@ public:
|
||||
private:
|
||||
fltx4 m_f4Point;
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
class CIntersectBox : public CPartitionVisitor
|
||||
{
|
||||
@ -1040,8 +1040,8 @@ class CIntersectRay : public CPartitionVisitor
|
||||
public:
|
||||
CIntersectRay( CVoxelTree *pPartition, const Ray_t &ray, const Vector &vecInvDelta ) : CPartitionVisitor( pPartition )
|
||||
{
|
||||
m_f4Start = LoadUnaligned3SIMD( ray.m_Start.Base() );
|
||||
m_f4Delta = LoadUnaligned3SIMD( ray.m_Delta.Base() );
|
||||
m_f4Start = LoadAlignedSIMD( ray.m_Start.Base() );
|
||||
m_f4Delta = LoadAlignedSIMD( ray.m_Delta.Base() );
|
||||
m_f4InvDelta = LoadUnaligned3SIMD( vecInvDelta.Base() );
|
||||
}
|
||||
|
||||
@ -1069,10 +1069,10 @@ class CIntersectSweptBox : public CPartitionVisitor
|
||||
public:
|
||||
CIntersectSweptBox( CVoxelTree *pPartition, const Ray_t &ray, const Vector &vecInvDelta ) : CPartitionVisitor( pPartition )
|
||||
{
|
||||
m_f4Start = LoadUnaligned3SIMD( ray.m_Start.Base() );
|
||||
m_f4Delta = LoadUnaligned3SIMD( ray.m_Delta.Base() );
|
||||
m_f4Start = LoadAlignedSIMD( ray.m_Start.Base() );
|
||||
m_f4Delta = LoadAlignedSIMD( ray.m_Delta.Base() );
|
||||
m_f4Extents = LoadAlignedSIMD( ray.m_Extents.Base() );
|
||||
m_f4InvDelta = LoadUnaligned3SIMD( vecInvDelta.Base() );
|
||||
m_f4Extents = LoadUnaligned3SIMD( ray.m_Extents.Base() );
|
||||
}
|
||||
|
||||
bool Intersects( const float *pMins, const float *pMaxs ) const
|
||||
|
@ -60,6 +60,7 @@ ConVar r_staticpropinfo( "r_staticpropinfo", "0" );
|
||||
ConVar r_drawmodeldecals( "r_drawmodeldecals", "1" );
|
||||
extern ConVar mat_fullbright;
|
||||
static bool g_MakingDevShots = false;
|
||||
extern int s_MapVersion;
|
||||
//-----------------------------------------------------------------------------
|
||||
// Index into the fade list
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -535,12 +536,12 @@ bool CStaticProp::Init( int index, StaticPropLump_t &lump, model_t *pModel )
|
||||
m_Flags = ( lump.m_Flags & (STATIC_PROP_SCREEN_SPACE_FADE | STATIC_PROP_FLAG_FADES | STATIC_PROP_NO_PER_VERTEX_LIGHTING) );
|
||||
|
||||
int nCurrentDXLevel = g_pMaterialSystemHardwareConfig->GetDXSupportLevel();
|
||||
/* bool bNoDraw = ( lump.m_nMinDXLevel && lump.m_nMinDXLevel > nCurrentDXLevel );
|
||||
bool bNoDraw = ( lump.m_nMinDXLevel && lump.m_nMinDXLevel > nCurrentDXLevel );
|
||||
bNoDraw = bNoDraw || ( lump.m_nMaxDXLevel && lump.m_nMaxDXLevel < nCurrentDXLevel );
|
||||
if ( bNoDraw )
|
||||
{
|
||||
m_Flags |= STATIC_PROP_NO_DRAW;
|
||||
}*/
|
||||
}
|
||||
|
||||
// Cache the model to world matrix since it never changes.
|
||||
AngleMatrix( lump.m_Angles, lump.m_Origin, m_ModelToWorld );
|
||||
@ -1328,70 +1329,31 @@ void CStaticPropMgr::UnserializeModels( CUtlBuffer& buf )
|
||||
|
||||
// Gotta preallocate the static props here so no rellocations take place
|
||||
// the leaf list stores pointers to these tricky little guys.
|
||||
bool bSkip = false;
|
||||
m_StaticProps.EnsureCapacity(count);
|
||||
m_StaticProps.AddMultipleToTail(count);
|
||||
for ( int i = 0; i < count; ++i )
|
||||
{
|
||||
// Reset every loop.
|
||||
bSkip = false;
|
||||
|
||||
StaticPropLump_t lump;
|
||||
switch ( nLumpVersion )
|
||||
{
|
||||
case 4:
|
||||
buf.Get( &lump, sizeof(StaticPropLumpV4_t) );
|
||||
lump.m_flForcedFadeScale = 1.0f;
|
||||
lump.m_nMinCPULevel = lump.m_nMaxCPULevel = lump.m_nMinGPULevel = lump.m_nMaxGPULevel = 0;
|
||||
lump.m_DiffuseModulation.r = lump.m_DiffuseModulation.g = lump.m_DiffuseModulation.b = lump.m_DiffuseModulation.a = 255; // default color/alpha modulation to identity
|
||||
lump.m_bDisableX360 = false;
|
||||
lump.m_FlagsEx = 0;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
buf.Get( &lump, sizeof(StaticPropLumpV5_t) );
|
||||
lump.m_nMinCPULevel = lump.m_nMaxCPULevel = lump.m_nMinGPULevel = lump.m_nMaxGPULevel = 0;
|
||||
lump.m_DiffuseModulation.r = lump.m_DiffuseModulation.g = lump.m_DiffuseModulation.b = lump.m_DiffuseModulation.a = 255; // default color/alpha modulation to identity
|
||||
lump.m_bDisableX360 = false;
|
||||
lump.m_FlagsEx = 0;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
buf.Get( &lump, sizeof( StaticPropLumpV6_t ) );
|
||||
lump.m_nMinCPULevel = lump.m_nMaxCPULevel = lump.m_nMinGPULevel = lump.m_nMaxGPULevel = 0;
|
||||
lump.m_DiffuseModulation.r = lump.m_DiffuseModulation.g = lump.m_DiffuseModulation.b = lump.m_DiffuseModulation.a = 255; // default color/alpha modulation to identity
|
||||
lump.m_bDisableX360 = false;
|
||||
lump.m_FlagsEx = 0;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
buf.Get( &lump, sizeof( StaticPropLumpV7_t ) );
|
||||
lump.m_nMinCPULevel = lump.m_nMaxCPULevel = lump.m_nMinGPULevel = lump.m_nMaxGPULevel = 0;
|
||||
lump.m_bDisableX360 = false;
|
||||
lump.m_FlagsEx = 0;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
buf.Get( &lump, sizeof( StaticPropLumpV8_t ) );
|
||||
lump.m_bDisableX360 = false;
|
||||
lump.m_FlagsEx = 0;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
buf.Get( &lump, sizeof( StaticPropLumpV9_t ) );
|
||||
lump.m_FlagsEx = 0;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
buf.Get( &lump, sizeof( StaticPropLumpV10_t ) );
|
||||
break;
|
||||
|
||||
case 11:
|
||||
buf.Get( &lump, sizeof( StaticPropLump_t ) );
|
||||
break;
|
||||
case 4: UnserializeLump<StaticPropLumpV4_t>(&lump, buf); break;
|
||||
case 5: UnserializeLump<StaticPropLumpV5_t>(&lump, buf); break;
|
||||
case 6: UnserializeLump<StaticPropLumpV6_t>(&lump, buf); break;
|
||||
case 7: // Falls down to version 10. We promoted TF to version 10 to deal with SFM.
|
||||
case 10:
|
||||
{
|
||||
if( s_MapVersion == 21 )
|
||||
UnserializeLump<StaticPropLumpV10_21_t>(&lump, buf);
|
||||
else
|
||||
UnserializeLump<StaticPropLumpV10_t>(&lump, buf);
|
||||
break;
|
||||
}
|
||||
case 9: UnserializeLump<StaticPropLumpV9_t>(&lump, buf); break;
|
||||
case 11: UnserializeLump<StaticPropLumpV11_t>(&lump, buf); break;
|
||||
default:
|
||||
Assert("Unexpected version while deserializing lumps.");
|
||||
}
|
||||
|
||||
int j = m_StaticProps.AddToTail();
|
||||
m_StaticProps[j].Init( j, lump, m_StaticPropDict[lump.m_PropType].m_pModel );
|
||||
m_StaticProps[i].Init( i, lump, m_StaticPropDict[lump.m_PropType].m_pModel );
|
||||
|
||||
// For distance-based fading, keep a list of the things that need
|
||||
// to be faded out. Not sure if this is the optimal way of doing it
|
||||
|
@ -41,8 +41,8 @@ static ConVar sv_timeout( "sv_timeout", "65", 0, "After this many seconds withou
|
||||
static ConVar sv_maxrate( "sv_maxrate", "0", FCVAR_REPLICATED, "Max bandwidth rate allowed on server, 0 == unlimited" );
|
||||
static ConVar sv_minrate( "sv_minrate", "3500", FCVAR_REPLICATED, "Min bandwidth rate allowed on server, 0 == unlimited" );
|
||||
|
||||
ConVar sv_maxupdaterate( "sv_maxupdaterate", "66", FCVAR_REPLICATED, "Maximum updates per second that the server will allow" );
|
||||
ConVar sv_minupdaterate( "sv_minupdaterate", "10", FCVAR_REPLICATED, "Minimum updates per second that the server will allow" );
|
||||
ConVar sv_maxupdaterate( "sv_maxupdaterate", "100", FCVAR_REPLICATED, "Maximum updates per second that the server will allow" );
|
||||
ConVar sv_minupdaterate( "sv_minupdaterate", "20", FCVAR_REPLICATED, "Minimum updates per second that the server will allow" );
|
||||
|
||||
ConVar sv_stressbots("sv_stressbots", "0", FCVAR_DEVELOPMENTONLY, "If set to 1, the server calculates data and fills packets to bots. Used for perf testing.");
|
||||
static ConVar sv_allowdownload ("sv_allowdownload", "1", 0, "Allow clients to download files");
|
||||
|
@ -697,12 +697,14 @@ static bool CreateTempFilename( TempFilename_t &info, const char *filenameBase,
|
||||
if ( info.fh.file )
|
||||
return true;
|
||||
}
|
||||
#if HAVE_ZLIB
|
||||
else
|
||||
{
|
||||
info.fh.gzfile = gzopen( info.Filename, "wb6" );
|
||||
if ( info.fh.gzfile )
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -80,8 +80,8 @@
|
||||
|
||||
extern CNetworkStringTableContainer *networkStringTableContainerServer;
|
||||
extern CNetworkStringTableContainer *networkStringTableContainerClient;
|
||||
//void OnHibernateWhenEmptyChanged( IConVar *var, const char *pOldValue, float flOldValue );
|
||||
//ConVar sv_hibernate_when_empty( "sv_hibernate_when_empty", "1", 0, "Puts the server into extremely low CPU usage mode when no clients connected", OnHibernateWhenEmptyChanged );
|
||||
static void OnHibernateWhenEmptyChanged( IConVar *var, const char *pOldValue, float flOldValue );
|
||||
ConVar sv_hibernate_when_empty( "sv_hibernate_when_empty", "1", 0, "Puts the server into extremely low CPU usage mode when no clients connected", OnHibernateWhenEmptyChanged );
|
||||
//ConVar sv_hibernate_ms( "sv_hibernate_ms", "20", 0, "# of milliseconds to sleep per frame while hibernating" );
|
||||
//ConVar sv_hibernate_ms_vgui( "sv_hibernate_ms_vgui", "20", 0, "# of milliseconds to sleep per frame while hibernating but running the vgui dedicated server frontend" );
|
||||
//static ConVar sv_hibernate_postgame_delay( "sv_hibernate_postgame_delay", "5", 0, "# of seconds to wait after final client leaves before hibernating.");
|
||||
@ -218,8 +218,8 @@ static ConVar sv_voicecodec( "sv_voicecodec", "vaudio_opus", 0,
|
||||
"steam - Use Steam voice API" );
|
||||
|
||||
|
||||
ConVar sv_mincmdrate( "sv_mincmdrate", "10", FCVAR_REPLICATED, "This sets the minimum value for cl_cmdrate. 0 == unlimited." );
|
||||
ConVar sv_maxcmdrate( "sv_maxcmdrate", "66", FCVAR_REPLICATED, "(If sv_mincmdrate is > 0), this sets the maximum value for cl_cmdrate." );
|
||||
ConVar sv_mincmdrate( "sv_mincmdrate", "20", FCVAR_REPLICATED, "This sets the minimum value for cl_cmdrate. 0 == unlimited." );
|
||||
ConVar sv_maxcmdrate( "sv_maxcmdrate", "100", FCVAR_REPLICATED, "(If sv_mincmdrate is > 0), this sets the maximum value for cl_cmdrate." );
|
||||
ConVar sv_client_cmdrate_difference( "sv_client_cmdrate_difference", "20", FCVAR_REPLICATED,
|
||||
"cl_cmdrate is moved to within sv_client_cmdrate_difference units of cl_updaterate before it "
|
||||
"is clamped between sv_mincmdrate and sv_maxcmdrate." );
|
||||
@ -1227,7 +1227,7 @@ void SV_DetermineMulticastRecipients( bool usepas, const Vector& origin, CBitVec
|
||||
serverGameClients->ClientEarPosition( pClient->edict, &vecEarPosition );
|
||||
|
||||
int iBitNumber = CM_LeafCluster( CM_PointLeafnum( vecEarPosition ) );
|
||||
if ( !(pMask[iBitNumber>>3] & (1<<(iBitNumber&7)) ) )
|
||||
if ( iBitNumber < 0 || !(pMask[iBitNumber>>3] & (1<<(iBitNumber&7)) ) )
|
||||
continue;
|
||||
|
||||
playerbits.Set( i );
|
||||
@ -1541,13 +1541,13 @@ CPureServerWhitelist * CGameServer::GetPureServerWhitelist() const
|
||||
return m_pPureServerWhitelist;
|
||||
}
|
||||
|
||||
//void OnHibernateWhenEmptyChanged( IConVar *var, const char *pOldValue, float flOldValue )
|
||||
//{
|
||||
// // We only need to do something special if we were preventing hibernation
|
||||
// // with sv_hibernate_when_empty but we would otherwise have been hibernating.
|
||||
// // In that case, punt all connected clients.
|
||||
// sv.UpdateHibernationState( );
|
||||
//}
|
||||
static void OnHibernateWhenEmptyChanged( IConVar *var, const char *pOldValue, float flOldValue )
|
||||
{
|
||||
// We only need to do something special if we were preventing hibernation
|
||||
// with sv_hibernate_when_empty but we would otherwise have been hibernating.
|
||||
// In that case, punt all connected clients.
|
||||
sv.UpdateHibernationState( );
|
||||
}
|
||||
|
||||
static bool s_bExitWhenEmpty = false;
|
||||
static ConVar sv_memlimit( "sv_memlimit", "0", 0,
|
||||
@ -1753,8 +1753,7 @@ void CGameServer::UpdateHibernationState()
|
||||
s_bExitWhenEmpty = true;
|
||||
}
|
||||
|
||||
//SetHibernating( sv_hibernate_when_empty.GetBool() && hibernateFromGCServer && !bHaveAnyClients );
|
||||
SetHibernating( hibernateFromGCServer && !bHaveAnyClients );
|
||||
SetHibernating( sv_hibernate_when_empty.GetBool() && hibernateFromGCServer && !bHaveAnyClients );
|
||||
}
|
||||
|
||||
void CGameServer::FinishRestore()
|
||||
|
@ -1005,7 +1005,7 @@ void Heartbeat_f()
|
||||
}
|
||||
}
|
||||
|
||||
static ConCommand heartbeat( "heartbeat", Heartbeat_f, "Force heartbeat of master servers", 0 );
|
||||
//static ConCommand heartbeat( "heartbeat", Heartbeat_f, "Force heartbeat of master servers", 0 );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -1534,7 +1534,7 @@ void Sys_NoCrashDialog()
|
||||
|
||||
void Sys_TestSendKey( const char *pKey )
|
||||
{
|
||||
#if defined(_WIN32) && !defined(USE_SDL) && !defined(_XBOX)
|
||||
#if defined(_WIN32) && !defined(USE_SDL) && !defined(_XBOX) && !defined(DEDICATED)
|
||||
int key = pKey[0];
|
||||
if ( pKey[0] == '\\' && pKey[1] == 'r' )
|
||||
{
|
||||
@ -1578,7 +1578,7 @@ CON_COMMAND( star_memory, "Dump memory stats" )
|
||||
{
|
||||
// get a current stat of available memory
|
||||
// 32 MB is reserved and fixed by OS, so not reporting to allow memory loggers sync
|
||||
#ifdef LINUX
|
||||
#if defined( PLATFORM_GLIBC )
|
||||
struct mallinfo memstats = mallinfo( );
|
||||
Msg( "sbrk size: %.2f MB, Used: %.2f MB, #mallocs = %d\n",
|
||||
memstats.arena / ( 1024.0 * 1024.0), memstats.uordblks / ( 1024.0 * 1024.0 ), memstats.hblks );
|
||||
@ -1586,14 +1586,14 @@ CON_COMMAND( star_memory, "Dump memory stats" )
|
||||
struct mstats memstats = mstats( );
|
||||
Msg( "Available %.2f MB, Used: %.2f MB, #mallocs = %lu\n",
|
||||
memstats.bytes_free / ( 1024.0 * 1024.0), memstats.bytes_used / ( 1024.0 * 1024.0 ), memstats.chunks_used );
|
||||
#elif PLATFORM_BSD
|
||||
# warning TODO: Implement memory stats (peace of sheet of course)
|
||||
#else // Win32
|
||||
#elif defined( _WIN32 ) // Win32
|
||||
MEMORYSTATUS stat;
|
||||
GlobalMemoryStatus( &stat );
|
||||
Msg( "Available: %.2f MB, Used: %.2f MB, Free: %.2f MB\n",
|
||||
stat.dwTotalPhys/( 1024.0f*1024.0f ) - 32.0f,
|
||||
( stat.dwTotalPhys - stat.dwAvailPhys )/( 1024.0f*1024.0f ) - 32.0f,
|
||||
stat.dwAvailPhys/( 1024.0f*1024.0f ) );
|
||||
#else
|
||||
#warning TODO: Implement memory stats
|
||||
#endif
|
||||
}
|
||||
|
@ -279,10 +279,6 @@ static void posix_signal_handler( int i )
|
||||
#define DO_TRY if ( sigsetjmp( g_mark, 1 ) == 0 )
|
||||
#define DO_CATCH else
|
||||
|
||||
#if defined( OSX ) || defined(PLATFORM_BSD)
|
||||
#define __sighandler_t sig_t
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define DO_TRY try
|
||||
@ -390,7 +386,7 @@ public:
|
||||
_se_translator_function curfilter = _set_se_translator( &FailSafe );
|
||||
#elif defined( POSIX )
|
||||
// Only need to worry about this function crashing when we're dealing with a real crash.
|
||||
__sighandler_t curfilter = bRealCrash ? signal( SIGSEGV, posix_signal_handler ) : 0;
|
||||
sig_t curfilter = bRealCrash ? signal( SIGSEGV, posix_signal_handler ) : 0;
|
||||
#endif
|
||||
|
||||
DO_TRY
|
||||
|
@ -819,10 +819,13 @@ void CVideoMode_Common::SetupStartupGraphic()
|
||||
|
||||
// loading.vtf
|
||||
buf.Clear(); // added this Clear() because we saw cases where LoadVTF was not emptying the buf fully in the above section
|
||||
m_pLoadingTexture = LoadVTF( buf, "materials/console/startup_loading.vtf" );
|
||||
const char* loading = "materials/console/startup_loading.vtf";
|
||||
if ( IsSteamDeck() )
|
||||
loading = "materials/gamepadui/game_logo.vtf";
|
||||
m_pLoadingTexture = LoadVTF( buf, loading );
|
||||
if ( !m_pLoadingTexture )
|
||||
{
|
||||
Error( "Can't find background image materials/console/startup_loading.vtf\n" );
|
||||
Error( "Can't find background image '%s'\n", loading );
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -883,8 +886,12 @@ void CVideoMode_Common::DrawStartupGraphic()
|
||||
pVMTKeyValues->SetInt( "$nocull", 1 );
|
||||
IMaterial *pMaterial = g_pMaterialSystem->CreateMaterial( "__background", pVMTKeyValues );
|
||||
|
||||
const char* loading = "console/startup_loading.vtf";
|
||||
if ( IsSteamDeck() )
|
||||
loading = "gamepadui/game_logo.vtf";
|
||||
|
||||
pVMTKeyValues = new KeyValues( "UnlitGeneric" );
|
||||
pVMTKeyValues->SetString( "$basetexture", "Console/startup_loading.vtf" );
|
||||
pVMTKeyValues->SetString( "$basetexture", loading );
|
||||
pVMTKeyValues->SetInt( "$translucent", 1 );
|
||||
pVMTKeyValues->SetInt( "$ignorez", 1 );
|
||||
pVMTKeyValues->SetInt( "$nofog", 1 );
|
||||
@ -922,7 +929,11 @@ void CVideoMode_Common::DrawStartupGraphic()
|
||||
slide = 0;
|
||||
|
||||
DrawScreenSpaceRectangle( pMaterial, 0, 0+slide, w, h-50, 0, 0, tw-1, th-1, tw, th, NULL,1,1,depth );
|
||||
DrawScreenSpaceRectangle( pLoadingMaterial, w-lw, h-lh+slide/2, lw, lh, 0, 0, lw-1, lh-1, lw, lh, NULL,1,1,depth-0.1 );
|
||||
if ( !IsSteamDeck() )
|
||||
DrawScreenSpaceRectangle( pLoadingMaterial, w-lw, h-lh+slide/2, lw, lh, 0, 0, lw-1, lh-1, lw, lh, NULL,1,1,depth-0.1 );
|
||||
else
|
||||
// TODO: Steam Deck
|
||||
DrawScreenSpaceRectangle( pLoadingMaterial, w-lw, h-lh+slide/2, lw, lh, 0, 0, lw-1, lh-1, lw, lh, NULL,1,1,depth-0.1 );
|
||||
}
|
||||
|
||||
if(0)
|
||||
|
@ -263,7 +263,6 @@ GameMessageHandler_t g_GameMessageHandlers[] =
|
||||
{ IE_Quit, &CGame::HandleMsg_Close },
|
||||
};
|
||||
|
||||
|
||||
void CGame::AppActivate( bool fActive )
|
||||
{
|
||||
// If text mode, force it to be active.
|
||||
@ -299,8 +298,18 @@ void CGame::AppActivate( bool fActive )
|
||||
// Clear keyboard states (should be cleared already but...)
|
||||
// VGui_ActivateMouse will reactivate the mouse soon.
|
||||
ClearIOStates();
|
||||
|
||||
UpdateMaterialSystemConfig();
|
||||
|
||||
#ifdef ANDROID
|
||||
ConVarRef mat_queue_mode( "mat_queue_mode" );
|
||||
|
||||
// Hack to reset internal queue buffers
|
||||
int nSavedQueueMode = mat_queue_mode.GetInt();
|
||||
mat_queue_mode.SetValue( 0 );
|
||||
materials->BeginFrame( host_frametime );
|
||||
materials->EndFrame();
|
||||
mat_queue_mode.SetValue( nSavedQueueMode );
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -355,7 +364,7 @@ void CGame::HandleMsg_Close( const InputEvent_t &event )
|
||||
|
||||
void CGame::DispatchInputEvent( const InputEvent_t &event )
|
||||
{
|
||||
switch( event.m_nType & 0xFFFF )
|
||||
switch( event.m_nType )
|
||||
{
|
||||
// Handle button events specially,
|
||||
// since we have all manner of crazy filtering going on when dealing with them
|
||||
|
@ -322,10 +322,17 @@ int ParseDirective( const char *pText )
|
||||
{
|
||||
if ( ParseFloats( pText, tempFloat, 4 ) )
|
||||
{
|
||||
for ( int i = 0; i < 4; ++i )
|
||||
// that's original code, msvc2015 generates illegal instruction on amd64 architecture
|
||||
/*for ( int i = 0; i < 4; ++i )
|
||||
{
|
||||
gMessageParms.boxcolor[ i ] = (byte)(int)tempFloat[ i ];
|
||||
}
|
||||
}*/
|
||||
|
||||
// workaround
|
||||
gMessageParms.boxcolor[0] = (int)tempFloat[0];
|
||||
gMessageParms.boxcolor[1] = (int)tempFloat[1];
|
||||
gMessageParms.boxcolor[2] = (int)tempFloat[2];
|
||||
gMessageParms.boxcolor[3] = (int)tempFloat[3];
|
||||
}
|
||||
}
|
||||
else if ( IsToken( pText, "clearmessage" ) )
|
||||
|
@ -1842,7 +1842,7 @@ void CVEngineServer::PlaybackTempEntity( IRecipientFilter& filter, float delay,
|
||||
|
||||
newEvent->bits = buffer.GetNumBitsWritten();
|
||||
int size = Bits2Bytes( buffer.GetNumBitsWritten() );
|
||||
newEvent->pData = new byte[size];
|
||||
newEvent->pData = new byte[ALIGN_VALUE(size,4)];
|
||||
Q_memcpy( newEvent->pData, data, size );
|
||||
|
||||
// add to list
|
||||
|
@ -613,7 +613,7 @@ void CEngineVGui::Init()
|
||||
return;
|
||||
}
|
||||
|
||||
if ( IsX360() )
|
||||
if ( IsX360() || IsSteamDeck() )
|
||||
{
|
||||
CCommand ccommand;
|
||||
if ( CL_ShouldLoadBackgroundLevel( ccommand ) )
|
||||
@ -1273,7 +1273,7 @@ void CEngineVGui::OnLevelLoadingStarted()
|
||||
}
|
||||
}
|
||||
|
||||
if ( IsX360() )
|
||||
if ( IsX360() || IsSteamDeck() )
|
||||
{
|
||||
// TCR requirement, always!!!
|
||||
m_bShowProgressDialog = true;
|
||||
|
@ -268,7 +268,7 @@ public:
|
||||
|
||||
if ( data )
|
||||
{
|
||||
g_DrawTreeSelectedPanel = (data) ? (vgui::VPANEL)data->GetInt( "PanelPtr", 0 ) : 0;
|
||||
g_DrawTreeSelectedPanel = (data) ? (vgui::VPANEL)data->GetPtr( "PanelPtr", 0 ) : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -388,7 +388,7 @@ void VGui_RecursivePrintTree(
|
||||
Q_snprintf( str, sizeof( str ), "%s", name );
|
||||
|
||||
pVal->SetString( "Text", str );
|
||||
pVal->SetInt( "PanelPtr", current );
|
||||
pVal->SetPtr( "PanelPtr", (void*)current );
|
||||
|
||||
pNewParent = pVal;
|
||||
|
||||
@ -417,7 +417,7 @@ bool UpdateItemState(
|
||||
vgui::IPanel *ipanel = vgui::ipanel();
|
||||
|
||||
KeyValues *pItemData = pTree->GetItemData( iChildItemId );
|
||||
if ( pItemData->GetInt( "PanelPtr" ) != pSub->GetInt( "PanelPtr" ) ||
|
||||
if ( pItemData->GetPtr( "PanelPtr" ) != pSub->GetPtr( "PanelPtr" ) ||
|
||||
Q_stricmp( pItemData->GetString( "Text" ), pSub->GetString( "Text" ) ) != 0 )
|
||||
{
|
||||
pTree->ModifyItem( iChildItemId, pSub );
|
||||
@ -425,7 +425,7 @@ bool UpdateItemState(
|
||||
}
|
||||
|
||||
// Ok, this is a new panel.
|
||||
vgui::VPANEL vPanel = pSub->GetInt( "PanelPtr" );
|
||||
vgui::VPANEL vPanel = (vgui::VPANEL)pSub->GetPtr( "PanelPtr" );
|
||||
|
||||
int iBaseColor[3] = { 255, 255, 255 };
|
||||
if ( ipanel->IsPopup( vPanel ) )
|
||||
@ -433,7 +433,7 @@ bool UpdateItemState(
|
||||
iBaseColor[0] = 255; iBaseColor[1] = 255; iBaseColor[2] = 0;
|
||||
}
|
||||
|
||||
if ( g_FocusPanelList.Find( vPanel ) != -1 )
|
||||
if ( g_FocusPanelList.Find( vPanel ) != vgui::INVALID_PANEL )
|
||||
{
|
||||
iBaseColor[0] = 0; iBaseColor[1] = 255; iBaseColor[2] = 0;
|
||||
pTree->ExpandItem( iChildItemId, true );
|
||||
|
@ -171,6 +171,18 @@ void V_RenderVGuiOnly( void )
|
||||
Shader_SwapBuffers();
|
||||
}
|
||||
|
||||
void V_RenderSwapBuffers( void )
|
||||
{
|
||||
materials->BeginFrame( host_frametime );
|
||||
g_EngineRenderer->FrameBegin();
|
||||
|
||||
UpdateMaterialSystemConfig();
|
||||
|
||||
g_EngineRenderer->FrameEnd( );
|
||||
materials->EndFrame();
|
||||
|
||||
Shader_SwapBuffers();
|
||||
}
|
||||
|
||||
void FullViewColorAdjustment( )
|
||||
{
|
||||
|
@ -196,6 +196,7 @@ def build(bld):
|
||||
'EngineSoundServer.cpp',
|
||||
'audio/voice_wavefile.cpp',
|
||||
'audio/vox.cpp',
|
||||
'masterserver.cpp',
|
||||
|
||||
#'audio/snd_dev_xaudio.cpp',[$X360]
|
||||
#'audio/snd_wave_mixer_xma.cpp', [$X360]
|
||||
@ -211,25 +212,24 @@ def build(bld):
|
||||
]
|
||||
if bld.env.DEST_OS != "darwin":
|
||||
source += ['audio/snd_dev_sdl.cpp']
|
||||
|
||||
|
||||
source_win = [
|
||||
'audio/snd_dev_direct.cpp',
|
||||
'audio/snd_dev_wave.cpp',
|
||||
'audio/voice_mixer_controls.cpp',
|
||||
'audio/voice_record_dsound.cpp'
|
||||
]
|
||||
|
||||
if bld.env.DEST_OS == 'win32':
|
||||
source += [
|
||||
'../public/tier0/memoverride.cpp',
|
||||
'audio/snd_dev_direct.cpp',
|
||||
'audio/snd_dev_wave.cpp',
|
||||
'audio/voice_mixer_controls.cpp',
|
||||
'audio/voice_record_dsound.cpp',
|
||||
]
|
||||
source += ['../public/tier0/memoverride.cpp']
|
||||
else:
|
||||
source += [
|
||||
'sys_linuxwind.cpp',
|
||||
'audio/snd_posix.cpp',
|
||||
]
|
||||
source += ['audio/snd_posix.cpp']
|
||||
|
||||
if bld.env.DEDICATED:
|
||||
source += ['cl_null.cpp']
|
||||
source += ['cl_null.cpp', 'sys_stubwind.cpp']
|
||||
else:
|
||||
source += source_win if bld.env.DEST_OS == 'win32' else ['sys_stubwind.cpp']
|
||||
|
||||
source += [
|
||||
'client_pch.cpp',
|
||||
'cl_rcon.cpp',
|
||||
@ -329,7 +329,7 @@ def build(bld):
|
||||
'vgui_texturebudgetpanel.cpp',
|
||||
'vgui_vprofgraphpanel.cpp',
|
||||
'vgui_vprofpanel.cpp',
|
||||
'toolframework.cpp'
|
||||
'toolframework.cpp',
|
||||
]
|
||||
|
||||
if bld.env.DEST_OS != 'win32':
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user