File: RendererInterface.h

package info (click to toggle)
astromenace 1.3.2%2Brepack-5
  • links: PTS, VCS
  • area: contrib
  • in suites: buster
  • size: 4,484 kB
  • sloc: cpp: 61,665; makefile: 26; sh: 19
file content (626 lines) | stat: -rwxr-xr-x 19,567 bytes parent folder | download | duplicates (5)
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
/************************************************************************************

	AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
	Copyright © 2006-2013 Michael Kurinnoy, Viewizard


	AstroMenace is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	AstroMenace is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.


	Web Site: http://www.viewizard.com/
	Project: http://sourceforge.net/projects/openastromenace/
	E-mail: viewizard@viewizard.com

*************************************************************************************/


#ifndef RendererInterface_H
#define RendererInterface_H


#include "../Base.h"
#include "../Math/Math.h"
#include "../Texture/Texture.h"



struct eCoverageModes
{
	int ColorSamples;
	int CoverageSamples;
};


struct eDevCaps
{
	// версия OpenGL
	int OpenGLmajorVersion;
	int OpenGLminorVersion;
	// Max multtextures
	int MaxMultTextures;
	// Max texture width
	int MaxTextureWidth;
	// Max texture height
	int MaxTextureHeight;
	// макс. кол-во одновременно обрабатываемых источников света
	int MaxActiveLights;
	// максимальный уровень анизотропии
	int MaxAnisotropyLevel;
	// макс. уровень антиалиасинга, 0-нет, 2+ - есть
	int MaxSamples; // MSAA
	int MaxMultisampleCoverageModes; // кол-во профайлов антиалиасинга с CSAA+MSAA
	eCoverageModes MultisampleCoverageModes[32]; // собственно сам список режимов CSAA+MSAA, ставим просто 32 штуки, чтобы не заморачиваться с освобождением памяти
	// есть ли возможность включить сжатие текстур
	bool TexturesCompression;
	// поддержка GL_ARB_texture_compression_bptc
	bool TexturesCompressionBPTC;
	// GL_ARB_texture_storage
	bool TextureStorage;
	// поддержка FBO
	bool FramebufferObject;
	// глубина depth буфера в битах, получаем ее при первой генерации fbo с буфером глубины, по умолчанию 0
	// если работаем с fbo, то еще на этапе инициализации основного fbo прорисовки будут получены данные максимально поддерживаемой глубины
	int FramebufferObjectDepthSize;
	// поддержка VBO
	bool VBOSupported;
	// поддержка VAO
	bool VAOSupported;
	// поддержка загрузки текстур со сторонами не кратные степени двойки
	bool TextureNPOTSupported;
	// поддержка шейдеров GLSL 1.00
	bool GLSL100Supported;
	// шейдерная модель
	float ShaderModel;
	// поддержка Occlusion Query (попадает в видимую область прорисовки)
	bool OcclusionQuerySupported;
	// поддержка генерации мипмеп в железе
	bool HardwareMipMapGeneration;
};










// Point 0-0 in the upper left corner
#define RI_UL_CORNER						0x1011
// Point 0-0 in the bottom left corner
#define RI_BL_CORNER						0x1012

// Buffer clear bit
#define RI_COLOR_BUFFER		0x1000
#define RI_DEPTH_BUFFER		0x0100
#define RI_ACCUM_BUFFER		0x0010
#define RI_STENCIL_BUFFER	0x0001

// Texture filtering modes
#define RI_MAGFILTER_POINT					0x103000
#define RI_MAGFILTER_LINEAR					0x103100
#define RI_MINFILTER_POINT					0x103000
#define RI_MINFILTER_LINEAR					0x103010
#define RI_MIPFILTER_NONE					0x103000
#define RI_MIPFILTER_POINT					0x103001
#define RI_MIPFILTER_LINEAR					0x103002
// Basic filters
#define RI_TEXTURE_NONE			RI_MAGFILTER_POINT | RI_MINFILTER_POINT | RI_MIPFILTER_NONE
#define RI_TEXTURE_BILINEAR		RI_MAGFILTER_LINEAR | RI_MINFILTER_LINEAR | RI_MIPFILTER_POINT
#define RI_TEXTURE_TRILINEAR	RI_MAGFILTER_LINEAR | RI_MINFILTER_LINEAR | RI_MIPFILTER_LINEAR

// Texture address modes
#define RI_WRAP_U							0x10410
#define RI_WRAP_V							0x10401
#define RI_CLAMP_TO_EDGE					0x10400

// Texture blending factors
// Blend factor is (0, 0, 0, 0).
#define RI_BLEND_ZERO						0x1070
// Blend factor is (1, 1, 1, 1).
#define RI_BLEND_ONE						0x1071
// Blend factor is (Rs, Gs, Bs, As).
#define RI_BLEND_SRCCOLOR					0x1072
// Blend factor is (1–Rs, 1–Gs, 1–Bs, 1–As).
#define RI_BLEND_INVSRCCOLOR				0x1073
// Blend factor is (As, As, As, As).
#define RI_BLEND_SRCALPHA					0x1074
// Blend factor is (1–As, 1–As, 1–As, 1–As).
#define RI_BLEND_INVSRCALPHA				0x1075
// Blend factor is (Ad, Ad, Ad, Ad).
#define RI_BLEND_DESTALPHA					0x1076
// Blend factor is (1–Ad, 1–Ad, 1–Ad, 1–Ad).
#define RI_BLEND_INVDESTALPHA				0x1077
// Blend factor is (Rd, Gd, Bd, Ad).
#define RI_BLEND_DESTCOLOR					0x1078
// Blend factor is (1–Rd, 1–Gd, 1–Bd, 1–Ad).
#define RI_BLEND_INVDESTCOLOR				0x1079
// Blend factor is (f, f, f, 1); f = min(As, 1–Ad).
#define RI_BLEND_SRCALPHASAT				0x107A

// Texture blending modes
// Parametre name
#define RI_TBLEND_COLOROP					0x103051
#define RI_TBLEND_ALPHAOP					0x103052
#define RI_TBLEND_ALPHAARG1					0x103053
#define RI_TBLEND_ALPHAARG2					0x103054
#define RI_TBLEND_ALPHAARG3					0x103055
#define RI_TBLEND_COLORARG1					0x103056
#define RI_TBLEND_COLORARG2					0x103057
#define RI_TBLEND_COLORARG3					0x103058
// Parametre
#define RI_TBLEND_SOURCE1					0x103061
#define RI_TBLEND_SOURCE2					0x103062
#define RI_TBLEND_MODULATE					0x103063
#define RI_TBLEND_MODULATE2X				0x103064
#define RI_TBLEND_MODULATE4X				0x103065
#define RI_TBLEND_ADD						0x103066
#define RI_TBLEND_ADDSMOOTH					0x103067
#define RI_TBLEND_ADD_SIGNED				0x103068
#define RI_TBLEND_SUBTRACT					0x103069
#define RI_TBLEND_DIFFUSE_ALPHA				0x103070
#define RI_TBLEND_TEXTURE_ALPHA				0x103071
#define RI_TBLEND_CURRENT_ALPHA				0x103072
#define RI_TBLEND_DOTPRODUCT				0x103073
#define RI_TBLEND_CURRENT					0x103080
#define RI_TBLEND_TEXTURE					0x103081
#define RI_TBLEND_CONSTANT					0x103082
#define RI_TBLEND_DIFFUSE					0x103083
#define RI_TBLEND_SPECULAR					0x103084
// vw_SetTextureEnvMode GL_TEXTURE_ENV_MODE
#define RI_TENV_DECAL		1
#define RI_TENV_BLEND		2
#define RI_TENV_REPLACE		3
#define RI_TENV_ADD			4
#define RI_TENV_MODULATE	5
#define RI_TENV_COMBINE		6

// vw_SetTextureCompare MODE
#define RI_COMPARE_R_TO_TEXTURE		1
#define RI_COMPARE_NONE				2

// vw_SetTextureDepthMode MODE
#define RI_DEPTH_TEXTURE_MODE_LUMINANCE		1
#define RI_DEPTH_TEXTURE_MODE_INTENSITY		2
#define RI_DEPTH_TEXTURE_MODE_ALPHA			3


// Primitives types
#define RI_POINTS							0x1020
#define RI_LINES							0x1021
#define RI_TRIANGLES						0x1022
#define RI_TRIANGLE_STRIP					0x1023
#define RI_TRIANGLE_FAN						0x1024
#define RI_QUADS							0x1025
// Data format
#define RI_3f_XYZ							0x0001000
#define RI_2f_XY							0x0002000
#define RI_3s_XYZ							0x0003000
#define RI_2s_XY							0x0004000
#define RI_3i_XYZ							0x0005000
#define RI_3f_NORMAL						0x0000100
#define RI_4f_COLOR							0x0000010
#define RI_4ub_COLOR						0x0000020
// кол-во текстур
#define RI_1_TEX							0x0000001
#define RI_2_TEX							0x0000002
#define RI_3_TEX							0x0000003
#define RI_4_TEX							0x0000004
#define RI_5_TEX							0x0000005
#define RI_6_TEX							0x0000006
#define RI_7_TEX							0x0000007
#define RI_8_TEX							0x0000008
// размер данных на каждую текстуру
#define RI_1f_TEX							0x0100000
#define RI_2f_TEX							0x0200000 // по умолчанию
#define RI_3f_TEX							0x0300000
#define RI_4f_TEX							0x0400000
#define RI_1s_TEX							0x0500000
#define RI_2s_TEX							0x0600000
#define RI_3s_TEX							0x0700000
#define RI_4s_TEX							0x0800000
// тип работы с координатами текстуры
#define RI_SEPARATE_TEX_COORD				0x0000000
#define RI_DUBLICATE_TEX_COORD				0x1000000

// Polygon Mode
#define RI_POINT							0x10B1
#define RI_LINE								0x10B2
#define RI_FILL								0x10B3

// Cull Face
#define RI_NONE								0x10C1
#define RI_BACK								0x10C2
#define RI_FRONT							0x10C3

// Set depth buffer status and texture compare function
#define RI_NEVER          		1
#define RI_LESS                 2
#define RI_EQUAL                3
#define RI_LESSEQUAL            4
#define RI_GREATER              5
#define RI_NOTEQUAL             6
#define RI_GREATEREQUAL         7
#define RI_ALWAYS               8

// Matrix types
#define RI_PROJECTION_MATRIX				0x1080
#define RI_MODELVIEW_MATRIX					0x1081
#define RI_TEXTURE_MATRIX					0x1082

// Light parametres
#define RI_SPOT_EXPONENT					0x1090
#define RI_SPOT_CUTOFF						0x1091
#define RI_CONSTANT_ATTENUATION				0x1092
#define RI_LINEAR_ATTENUATION				0x1093
#define RI_QUADRATIC_ATTENUATION			0x1094
#define RI_AMBIENT							0x1095
#define RI_DIFFUSE							0x1096
#define RI_SPECULAR							0x1097
#define RI_POSITION							0x1098
#define RI_DIRECTION						0x1099
#define RI_EMISSION							0x109A
#define RI_SHININESS						0x109B

// VBO
#define RI_ARRAY_BUFFER						1
#define RI_ELEMENT_ARRAY_BUFFER				2










// Common functions

// Initialization renderer
int vw_InitWindow(const char* Title, int Width, int Height, int *Bits, BOOL FullScreenFlag, int CurrentVideoModeX, int CurrentVideoModeY, int CurrentVideoModeW, int CurrentVideoModeH, int VSync);
void vw_InitOpenGL(int Width, int Height, int *MSAA, int *CSAA);
// Shutdown renderer dll
void vw_ShutdownRenderer(void);
// Get device capability
eDevCaps *vw_GetDevCaps();

void vw_SetAspectRatio(float nWidth, float nHeight, bool Value);
bool vw_GetAspectWH(float *ARWidth, float *ARHeight);





// Set viewport data
void vw_SetViewport(int x, int y, int width, int height, float znear, float zfar, int Corner = RI_UL_CORNER);
// Get viewport data
void vw_GetViewport(int *x=0, int *y=0, int *width=0, int *height=0, float *znear=0, float *zfar=0);
// Resize scene
void vw_ResizeScene(float nfAngle, float AR, float nfNearClip, float nfFarClip);
// Function for window WM_SIZE message only
void vw_OnChangeSize(int nWidth, int nHeight);





// Basic rendering functions

// Begin rendering
void vw_BeginRendering(int  mask);
// End rendering
void vw_EndRendering(void);
// Clear buffer
void vw_Clear(int mask);
// Start 2D rendering mode
void vw_Start2DMode(float nZ1, float nZ2);
// End 2D rendering mode
void vw_End2DMode(void);
// Set scene clear color
void vw_SetClearColor(float nRed, float nGreen, float nBlue, float nAlpha);
// Set scene color mask
void vw_SetColorMask(bool red, bool green, bool blue, bool alpha);





// Texture functions

// Create texture
GLuint vw_BuildTexture(BYTE *ustDIB, int Width, int Height, bool MipMap, int Bytes, int CompressionType);
// Bind texture
void vw_BindTexture(DWORD Stage, GLuint TextureID);
// Delete texture
void vw_DeleteTexture(GLuint TextureID);
// Set texture filtering mode
void vw_SetTextureFiltering(int nFiltering);
// Set texture Anisotropy Level
void vw_SetTextureAnisotropy(int AnisotropyLevel);
// Set texture address mode
void vw_SetTextureAddressMode(int nAddressMode);
// Set texture Alpha Test value that specifies a reference alpha value against which pixels are tested
void vw_SetTextureAlphaTest(bool Flag, float Value);
// Set texture blending factor
void vw_SetTextureBlend(bool Flag, int Src, int Dst);
// Set texture blending mode
void vw_SetTextureBlendMode(int pname, int param);
// Set texture env mode
void vw_SetTextureEnvMode(int param);
// Set texture compare mode
void vw_SetTextureCompare(int MODE, int FUNC);
// Set texture depth mode
void vw_SetTextureDepthMode(int MODE);
// Set texture by pointer
void vw_SetTexture(DWORD Stage, eTexture *Texture);
// Get texture image bitmap (RGBA) by void pointer
void vw_GetTextureImage(eTexture *Texture, void *bits, int BPP);
// Set texture priority
void vw_SetPrioritizeTextures(GLuint TextureID, float Prior);
// Get texture priority
void vw_GetPrioritizeTextures(GLuint TextureID, float *Prior);









// 3D rendering functions

// Send (draw) vertices
void vw_SendVertices(int PrimitiveType, int NumVertices, int DataFormat, void *Data, int Stride, unsigned int *VBO=0,
						unsigned int RangeStart=0,	unsigned int *DataIndex=0, unsigned int *DataIndexVBO=0, unsigned int *VAO=0);
// Set color
void vw_SetColor(float nRed, float nGreen, float nBlue, float nAlpha);
// Set polygon rasterization mode
void vw_PolygonMode(int mode);
// Set what facets can be culled
void vw_CullFace(int face);
// Set depth buffer
void vw_DepthTest(bool mode, int funct);
// Set polygon offset mode
void vw_PolygonOffset(bool enable, float factor, float units);

// Loads identity in the current matrix
void vw_LoadIdentity(void);
// Determines the product of the current matrix and the computed translation matrix determined by the given factors
void vw_Translate(VECTOR3D Location);
// Determines the product of the current matrix and the computed rotation matrix
void vw_Rotate(float fAngle, float fX, float fY, float fZ);
// Determines the product of the current matrix and the computed scale matrix composed from the given point
void vw_Scale(float fX, float fY, float fZ);
// Adds a matrix to the stack
void vw_PushMatrix(void);
// Removes the current matrix from the top of the stack
void vw_PopMatrix(void);
// Get matrix
void vw_GetMatrix(int pname, float *params);
void vw_SetMatrix(float *params);
// Set Matrix Mode
void vw_MatrixMode(int pname);
// Mult matrix
void vw_MultMatrix(float *params);





// Light

// Set lighting status
void vw_Lighting(bool param);
// Get lighting status
bool vw_GetLighting(void);
// Enable light
void vw_LightEnable(int light, bool param);
// Get light status
bool vw_GetLightEnable(int light);
// Set light parametre by float
void vw_SetLight(int light, int pname, float param);
// Set light parametre by vector
void vw_SetLightV(int light, int pname, const float *param);
// Get light parametre by vector
void vw_GetLightV(int light, int pname, float *param);
// Set matirial parametre by vector
void vw_MaterialV(int pname, const float *param);
// Get matirial parametre by vector
void vw_GetMaterialV(int pname, float *param);







// VBO+IBO

// создаем буфер
bool vw_BuildVBO(int NumVertices, void *Data, int Stride, unsigned int *VBO);
bool vw_BuildIBO(int NumIndex, void *Data, unsigned int *IBO);
// устанавливаем буфер
void vw_BindVBO(int target, unsigned int VBO);
// удаляем буфер
void vw_DeleteVBO(unsigned int VBO);







// VAO

// создаем
bool vw_BuildVAO(unsigned int *VAO, int NumVertices, int DataFormat, void *Data, int Stride, unsigned int *VBO,
						unsigned int RangeStart, unsigned int *DataIndex, unsigned int *DataIndexVBO);
// устанавливаем
void vw_BindVAO(unsigned int VAO);
// удаляем
void vw_DeleteVAO(unsigned int VAO);







// FBO

// структура FBO
struct eFBO
{
	unsigned int 	ColorBuffer;
	unsigned int 	DepthBuffer;
	unsigned int 	ColorTexture;
	unsigned int 	DepthTexture;
	int				DepthSize;
	unsigned int 	FrameBufferObject;
	unsigned int 	Width;
	unsigned int 	Height;
};

// создаем (FBO - уже заранее подготовленный объект, в функции память не выделяем)
bool vw_BuildFBO(eFBO *FBO, int Width, int Height, bool NeedColor, bool NeedDepth, int MSAA=0, int *CSAA=0);
// устанавливаем
void vw_BindFBO(eFBO *FBO);
// получаем текущий установленный FBO, 0 - если фрейм буфер
eFBO *vw_GetCurrentFBO();
// блит цветовой составляющей фбо источника в фбо приемник (нужно для вывода фбо с мультисемплами)
void vw_BlitFBO(eFBO *SourceFBO, eFBO *TargetFBO);
// рисуем цветовую текстуру источника, на весь приемник, если 0 - во фрейм буфер
void vw_DrawColorFBO(eFBO *SourceFBO, eFBO *TargetFBO);
// удаление данных в структуре
void vw_DeleteFBO(eFBO *FBO);







// шейдеры GLSL

// структура шейдера
struct eGLSL
{
	// хендлы
	GLhandleARB Program;
	GLhandleARB VertexShader;
	bool		VertexShaderUse;
	GLhandleARB FragmentShader;
	bool		FragmentShaderUse;

	// для менеждера
	char*	Name;
	eGLSL*	Prev;
	eGLSL*	Next;
	int		Num;
};

void vw_ReleaseAllShaders();
void vw_AttachShader(eGLSL* GLSL);
void vw_DetachShader(eGLSL* GLSL);
eGLSL* vw_FindShaderByNum(int Num);
eGLSL* vw_FindShaderByName(const char *Name);

void vw_ReleaseShader(eGLSL *GLSL);

eGLSL *vw_CreateShader(const char *ShaderName, const char *VertexShaderFileName, const char *FragmentShaderFileName);
bool vw_LinkShaderProgram(eGLSL *GLSL);
bool vw_UseShaderProgram(eGLSL *GLSL);
bool vw_StopShaderProgram();

int vw_GetUniformLocation(eGLSL *GLSL, const char *name);

bool vw_Uniform1i(eGLSL *GLSL, int UniformLocation, int data);
bool vw_Uniform1i(eGLSL *GLSL, const char *name, int data);
bool vw_Uniform1fv(eGLSL *GLSL, int UniformLocation, int count, float *data);
bool vw_Uniform1fv(eGLSL *GLSL, const char *name, int count, float *data);
bool vw_Uniform1f(eGLSL *GLSL, int UniformLocation, float data);
bool vw_Uniform1f(eGLSL *GLSL, const char *name, float data);
bool vw_Uniform3f(eGLSL *GLSL, int UniformLocation, float data1, float data2, float data3);
bool vw_Uniform3f(eGLSL *GLSL, const char *name, float data1, float data2, float data3);
bool vw_Uniform4fv(eGLSL *GLSL, int UniformLocation, int count, float *data);
bool vw_Uniform4fv(eGLSL *GLSL, const char *name, int count, float *data);
bool vw_UniformMatrix4fv(eGLSL *GLSL, int UniformLocation, bool transpose, int count, float *data);
bool vw_UniformMatrix4fv(eGLSL *GLSL, const char *name, bool transpose, int count, float *data);





// Occlusion Query
void vw_GenQueries(int n, unsigned int *ids);
void vw_DeleteQueries(int n, const unsigned int *ids);
bool vw_IsQuery(unsigned int id);
void vw_BeginQuery(unsigned int id);
void vw_EndQuery();
void vw_GetQueryiv(unsigned int target, unsigned int pname, int *params);
void vw_GetQueryObjectiv(unsigned int id, unsigned int pname, int *params);
void vw_GetQueryObjectuiv(unsigned int id, unsigned int pname, unsigned int *params);







// Get rendered primitives count
int vw_GetPrimCount(void);

// Set gamma ramp
void vw_SetGammaRamp(float Gamma, float Contrast, float Brightness);
// Get gamma ramp
void vw_GetGammaRamp(float *Gamma, float *Contrast, float *Brightness);








// 2D rendering functions

// Draw
void vw_Draw(int X, int Y, RECT *SrcRect, eTexture *Tex, bool Alpha, float RotateAngle=0, int DrawCorner = RI_UL_CORNER);
// Draw transparent
void vw_DrawTransparent(RECT *DstRect, RECT *SrcRect, eTexture *Tex, bool Alpha, float Transp, float RotateAngle=0, int DrawCorner = RI_UL_CORNER, float R=1.0f, float G=1.0f, float B=1.0f);






// Дополнительные функции

// Создание скриншота
int vw_Screenshot(SDL_Surface *screen, char *filename);











#endif // RendererInterface_H