1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
#pragma once
#include "VFunc.h"
#include "vector.hpp"
#include "color.hpp"
enum FontDrawType_t {
FONT_DRAW_DEFAULT = 0,
FONT_DRAW_NONADDITIVE,
FONT_DRAW_ADDITIVE,
FONT_DRAW_TYPE_COUNT = 2,
};
enum FontFlags_t {
FONTFLAG_NONE,
FONTFLAG_ITALIC = 0x001,
FONTFLAG_UNDERLINE = 0x002,
FONTFLAG_STRIKEOUT = 0x004,
FONTFLAG_SYMBOL = 0x008,
FONTFLAG_ANTIALIAS = 0x010,
FONTFLAG_GAUSSIANBLUR = 0x020,
FONTFLAG_ROTARY = 0x040,
FONTFLAG_DROPSHADOW = 0x080,
FONTFLAG_ADDITIVE = 0x100,
FONTFLAG_OUTLINE = 0x200,
FONTFLAG_CUSTOM = 0x400,
FONTFLAG_BITMAP = 0x800,
};
enum ImageFormat {
IMAGE_FORMAT_UNKNOWN = -1,
IMAGE_FORMAT_RGBA8888 = 0,
IMAGE_FORMAT_ABGR8888,
IMAGE_FORMAT_RGB888,
IMAGE_FORMAT_BGR888,
IMAGE_FORMAT_RGB565,
IMAGE_FORMAT_I8,
IMAGE_FORMAT_IA88,
IMAGE_FORMAT_P8,
IMAGE_FORMAT_A8,
IMAGE_FORMAT_RGB888_BLUESCREEN,
IMAGE_FORMAT_BGR888_BLUESCREEN,
IMAGE_FORMAT_ARGB8888,
IMAGE_FORMAT_BGRA8888,
IMAGE_FORMAT_DXT1,
IMAGE_FORMAT_DXT3,
IMAGE_FORMAT_DXT5,
IMAGE_FORMAT_BGRX8888,
IMAGE_FORMAT_BGR565,
IMAGE_FORMAT_BGRX5551,
IMAGE_FORMAT_BGRA4444,
IMAGE_FORMAT_DXT1_ONEBITALPHA,
IMAGE_FORMAT_BGRA5551,
IMAGE_FORMAT_UV88,
IMAGE_FORMAT_UVWQ8888,
IMAGE_FORMAT_RGBA16161616F,
IMAGE_FORMAT_RGBA16161616,
IMAGE_FORMAT_UVLX8888,
IMAGE_FORMAT_R32F, // Single-channel 32-bit floating point
IMAGE_FORMAT_RGB323232F,
IMAGE_FORMAT_RGBA32323232F,
// Depth-stencil texture formats for shadow depth mapping
IMAGE_FORMAT_NV_DST16, //
IMAGE_FORMAT_NV_DST24, //
IMAGE_FORMAT_NV_INTZ, // Vendor-specific depth-stencil texture
IMAGE_FORMAT_NV_RAWZ, // formats for shadow depth mapping
IMAGE_FORMAT_ATI_DST16, //
IMAGE_FORMAT_ATI_DST24, //
IMAGE_FORMAT_NV_NULL, // Dummy format which takes no video memory
// Compressed normal map formats
IMAGE_FORMAT_ATI2N, // One-surface ATI2N / DXN format
IMAGE_FORMAT_ATI1N, // Two-surface ATI1N format
NUM_IMAGE_FORMATS
};
struct vertex_t {
vertex_t( ) {}
vertex_t( const vec2_t& pos, const vec2_t& coord = vec2_t( 0, 0 ) ) {
m_position = pos;
m_tex_coord = coord;
}
void init( float x, float y, const vec2_t& coord = vec2_t( 0, 0 ) ) {
m_position = vec2_t( x, y );
m_tex_coord = coord;
}
vec2_t m_position;
vec2_t m_tex_coord;
};
using HFont = unsigned long;
using VPANEL = unsigned long;
class IntRect;
class IHTMLEvents;
class IHTML;
using HCursor = unsigned long;
using HTexture = unsigned long;
class CharRenderInfo;
class IVguiMatInfo;
class IImage;
class DrawTexturedRectParms_t;
class IHTMLChromeController;
enum GradientType_t {
GRADIENT_HORIZONTAL = 0,
GRADIENT_VERTICAL = 1
};
class ISurface {
public:
void DrawSetColor( clr_t clr ) {
return call_vfunc< void( __thiscall* )( void*, int , int , int, int ) >( this, 11 )( this, clr.r( ), clr.g( ), clr.b( ), clr.a( ) );
}
void DrawFilledRect( int x, int y, int w, int h ) {
return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 12 )( this, x, y, w, h );
}
void DrawOutlinedRect( int x, int y, int w, int h ) {
return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 14 )( this, x, y, w, h );
}
void DrawLine( int x0, int y0, int x1, int y1 ) {
return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 15 )( this, x0, y0, x1, y1 );
}
void DrawPolyLine( int* x, int* y, int n ) {
return call_vfunc< void( __thiscall* )( void*, int*, int*, int ) >( this, 16 )( this, x, y, n );
}
void DrawSetTextFont( unsigned long index ) {
return call_vfunc< void( __thiscall* )( void*, unsigned long ) >( this, 17 )( this, index );
}
void DrawSetTextColor( clr_t clr ) {
return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 19 )( this, clr.r( ), clr.g( ), clr.b( ), clr.a( ) );
}
void DrawSetTextPos( int x, int y ) {
return call_vfunc< void( __thiscall* )( void*, int, int ) >( this, 20 )( this, x, y );
}
void DrawPrintText( const wchar_t* text, int length, FontDrawType_t drawtype = FontDrawType_t::FONT_DRAW_DEFAULT ) {
return call_vfunc< void( __thiscall* )( void*, const wchar_t*, int, FontDrawType_t ) >( this, 22 )( this, text, length, drawtype );
}
void DrawSetTextureRGBA( int id, const unsigned char* rgba, int w, int h ) {
return call_vfunc< void( __thiscall* )( void*, int, const unsigned char*, int, int, int, bool ) >( this, 31 )( this, id, rgba, w, h, 0, true );
}
void DrawSetTexture( int id ) {
return call_vfunc< void( __thiscall* )( void*, int ) >( this, 32 )( this, id );
}
int CreateNewTextureID( bool procedural ) {
return call_vfunc< int( __thiscall* )( void*, bool ) >( this, 37 )( this, procedural );
}
void SetCursorAlwaysVis( bool vis ) {
return call_vfunc< void( __thiscall* )( void*, bool ) >( this, 52 )( this, vis );
}
unsigned long CreateFnt( ) {
return call_vfunc< unsigned long( __thiscall* )( void* ) >( this, 66 )( this );
}
void UnlockCursor( ) {
return call_vfunc< void( __thiscall* )( void* ) >( this, 61 )( this );
}
void LockCursor( ) {
return call_vfunc< void( __thiscall* )( void* ) >( this, 62 )( this );
}
void SetFontGlyphSet( unsigned long font, const char* windowsFontName, int tall, int weight, int blur, int scanlines, int flags, int nRangeMin = 0, int nRangeMax = 0 ) {
return call_vfunc< void( __thiscall* )( void*, unsigned long, const char*, int, int, int, int, int, int, int ) >( this, 67 )( this, font, windowsFontName, tall, weight, blur, scanlines, flags, nRangeMin, nRangeMax );
}
void GetTextSize( unsigned long font, const wchar_t* text, int& wide, int& tall ) {
return call_vfunc< void( __thiscall* )( void*, unsigned long, const wchar_t*, int&, int& ) >( this, 75 )( this, font, text, wide, tall );
}
void play_sound( const char* fileName ) {
return call_vfunc< void( __thiscall* )( void*, const char* ) >( this, 82 )( this, fileName );
}
void GetCursorPosition( int &x, int &y ) {
return call_vfunc< void( __thiscall* )( void*, int&, int& ) >( this, 96 )( this, x, y );
}
void DrawOutlinedCircle( int x, int y, int radius, int segments ) {
return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 99 )( this, x, y, radius, segments );
}
void DrawTexturedPolygon( int n, vertex_t* pVertice, bool bClipVertices = true ) {
return call_vfunc< void( __thiscall* )( void*, int, vertex_t*, bool ) >( this, 102 )( this, n, pVertice, bClipVertices );
}
void DrawGradient( int x, int y, int w, int h, clr_t first, clr_t second, GradientType_t type )
{
clr_t present_draw_clr = { };
auto draw_filled_rect_gradient = [ & ]( bool reversed ) -> void {
call_vfunc< void( __thiscall* )( void*, int, int, int, int, unsigned, unsigned, bool ) >( this, 118 )
( this, x, y, w, h, reversed ? 255 : 0, reversed ? 0 : 255, type == GRADIENT_HORIZONTAL );
};
DrawSetColor( clr_t::blend( first, second, 0.5f ) );
DrawFilledRect( x, y, w, h );
DrawSetColor( first );
present_draw_clr = first;
draw_filled_rect_gradient( true );
DrawSetColor( second );
present_draw_clr = second;
draw_filled_rect_gradient( false );
}
};
|