this repo has no description
1#ifndef _GPU_RENDERERIMPL_H__
2#define _GPU_RENDERERIMPL_H__
3
4#include "SDL_gpu.h"
5
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10// Internal API for managing window mappings
11DECLSPEC void SDLCALL GPU_AddWindowMapping(GPU_Target* target);
12DECLSPEC void SDLCALL GPU_RemoveWindowMapping(Uint32 windowID);
13DECLSPEC void SDLCALL GPU_RemoveWindowMappingByTarget(GPU_Target* target);
14
15/*! Private implementation of renderer members. */
16typedef struct GPU_RendererImpl
17{
18 /*! \see GPU_Init()
19 * \see GPU_InitRenderer()
20 * \see GPU_InitRendererByID()
21 */
22 GPU_Target* (SDLCALL *Init)(GPU_Renderer* renderer, GPU_RendererID renderer_request, Uint16 w, Uint16 h, GPU_WindowFlagEnum SDL_flags);
23
24 /*! \see GPU_CreateTargetFromWindow
25 * The extra parameter is used internally to reuse/reinit a target. */
26 GPU_Target* (SDLCALL *CreateTargetFromWindow)(GPU_Renderer* renderer, Uint32 windowID, GPU_Target* target);
27
28 /*! \see GPU_CreateAliasTarget() */
29 GPU_Target* (SDLCALL *CreateAliasTarget)(GPU_Renderer* renderer, GPU_Target* target);
30
31 /*! \see GPU_MakeCurrent */
32 void (SDLCALL *MakeCurrent)(GPU_Renderer* renderer, GPU_Target* target, Uint32 windowID);
33
34 /*! Sets up this renderer to act as the current renderer. Called automatically by GPU_SetCurrentRenderer(). */
35 void (SDLCALL *SetAsCurrent)(GPU_Renderer* renderer);
36
37 /*! \see GPU_ResetRendererState() */
38 void (SDLCALL *ResetRendererState)(GPU_Renderer* renderer);
39
40 /*! \see GPU_SetWindowResolution() */
41 Uint8 (SDLCALL *SetWindowResolution)(GPU_Renderer* renderer, Uint16 w, Uint16 h);
42
43 /*! \see GPU_SetVirtualResolution() */
44 void (SDLCALL *SetVirtualResolution)(GPU_Renderer* renderer, GPU_Target* target, Uint16 w, Uint16 h);
45
46 /*! \see GPU_UnsetVirtualResolution() */
47 void (SDLCALL *UnsetVirtualResolution)(GPU_Renderer* renderer, GPU_Target* target);
48
49 /*! Clean up the renderer state. */
50 void (SDLCALL *Quit)(GPU_Renderer* renderer);
51
52 /*! \see GPU_SetFullscreen() */
53 Uint8 (SDLCALL *SetFullscreen)(GPU_Renderer* renderer, Uint8 enable_fullscreen, Uint8 use_desktop_resolution);
54
55 /*! \see GPU_SetCamera() */
56 GPU_Camera (SDLCALL *SetCamera)(GPU_Renderer* renderer, GPU_Target* target, GPU_Camera* cam);
57
58 /*! \see GPU_CreateImage() */
59 GPU_Image* (SDLCALL *CreateImage)(GPU_Renderer* renderer, Uint16 w, Uint16 h, GPU_FormatEnum format);
60
61 /*! \see GPU_CreateImageUsingTexture() */
62 GPU_Image* (SDLCALL *CreateImageUsingTexture)(GPU_Renderer* renderer, Uint32 handle, Uint8 take_ownership);
63
64 /*! \see GPU_LoadImage() */
65 GPU_Image* (SDLCALL *LoadImage)(GPU_Renderer* renderer, const char* filename);
66
67 /*! \see GPU_CreateAliasImage() */
68 GPU_Image* (SDLCALL *CreateAliasImage)(GPU_Renderer* renderer, GPU_Image* image);
69
70 /*! \see GPU_SaveImage() */
71 Uint8 (SDLCALL *SaveImage)(GPU_Renderer* renderer, GPU_Image* image, const char* filename, GPU_FileFormatEnum format);
72
73 /*! \see GPU_CopyImage() */
74 GPU_Image* (SDLCALL *CopyImage)(GPU_Renderer* renderer, GPU_Image* image);
75
76 /*! \see GPU_UpdateImage */
77 void (SDLCALL *UpdateImage)(GPU_Renderer* renderer, GPU_Image* image, const GPU_Rect* image_rect, SDL_Surface* surface, const GPU_Rect* surface_rect);
78
79 /*! \see GPU_UpdateImageBytes */
80 void (SDLCALL *UpdateImageBytes)(GPU_Renderer* renderer, GPU_Image* image, const GPU_Rect* image_rect, const unsigned char* bytes, int bytes_per_row);
81
82 /*! \see GPU_ReplaceImage */
83 Uint8 (SDLCALL *ReplaceImage)(GPU_Renderer* renderer, GPU_Image* image, SDL_Surface* surface, const GPU_Rect* surface_rect);
84
85 /*! \see GPU_CopyImageFromSurface() */
86 GPU_Image* (SDLCALL *CopyImageFromSurface)(GPU_Renderer* renderer, SDL_Surface* surface);
87
88 /*! \see GPU_CopyImageFromTarget() */
89 GPU_Image* (SDLCALL *CopyImageFromTarget)(GPU_Renderer* renderer, GPU_Target* target);
90
91 /*! \see GPU_CopySurfaceFromTarget() */
92 SDL_Surface* (SDLCALL *CopySurfaceFromTarget)(GPU_Renderer* renderer, GPU_Target* target);
93
94 /*! \see GPU_CopySurfaceFromImage() */
95 SDL_Surface* (SDLCALL *CopySurfaceFromImage)(GPU_Renderer* renderer, GPU_Image* image);
96
97 /*! \see GPU_FreeImage() */
98 void (SDLCALL *FreeImage)(GPU_Renderer* renderer, GPU_Image* image);
99
100 /*! \see GPU_LoadTarget() */
101 GPU_Target* (SDLCALL *LoadTarget)(GPU_Renderer* renderer, GPU_Image* image);
102
103 /*! \see GPU_FreeTarget() */
104 void (SDLCALL *FreeTarget)(GPU_Renderer* renderer, GPU_Target* target);
105
106 /*! \see GPU_Blit() */
107 void (SDLCALL *Blit)(GPU_Renderer* renderer, GPU_Image* image, GPU_Rect* src_rect, GPU_Target* target, float x, float y);
108
109 /*! \see GPU_BlitRotate() */
110 void (SDLCALL *BlitRotate)(GPU_Renderer* renderer, GPU_Image* image, GPU_Rect* src_rect, GPU_Target* target, float x, float y, float degrees);
111
112 /*! \see GPU_BlitScale() */
113 void (SDLCALL *BlitScale)(GPU_Renderer* renderer, GPU_Image* image, GPU_Rect* src_rect, GPU_Target* target, float x, float y, float scaleX, float scaleY);
114
115 /*! \see GPU_BlitTransform */
116 void (SDLCALL *BlitTransform)(GPU_Renderer* renderer, GPU_Image* image, GPU_Rect* src_rect, GPU_Target* target, float x, float y, float degrees, float scaleX, float scaleY);
117
118 /*! \see GPU_BlitTransformX() */
119 void (SDLCALL *BlitTransformX)(GPU_Renderer* renderer, GPU_Image* image, GPU_Rect* src_rect, GPU_Target* target, float x, float y, float pivot_x, float pivot_y, float degrees, float scaleX, float scaleY);
120
121 void (SDLCALL *MultitextureBlit)(GPU_Renderer* renderer, GPU_Image** images, GPU_Rect* rects, GPU_Target* target, float x, float y);
122
123 /*! \see GPU_TriangleBatch() */
124 void (SDLCALL *TriangleBatch)(GPU_Renderer* renderer, GPU_Image* image, GPU_Target* target, unsigned short num_vertices, float* values, unsigned int num_indices, unsigned short* indices, GPU_BatchFlagEnum flags);
125
126 /*! \see GPU_GenerateMipmaps() */
127 void (SDLCALL *GenerateMipmaps)(GPU_Renderer* renderer, GPU_Image* image);
128
129 /*! \see GPU_SetClip() */
130 GPU_Rect (SDLCALL *SetClip)(GPU_Renderer* renderer, GPU_Target* target, Sint16 x, Sint16 y, Uint16 w, Uint16 h);
131
132 /*! \see GPU_UnsetClip() */
133 void (SDLCALL *UnsetClip)(GPU_Renderer* renderer, GPU_Target* target);
134
135 /*! \see GPU_GetPixel() */
136 SDL_Color (SDLCALL *GetPixel)(GPU_Renderer* renderer, GPU_Target* target, Sint16 x, Sint16 y);
137
138 /*! \see GPU_SetImageFilter() */
139 void (SDLCALL *SetImageFilter)(GPU_Renderer* renderer, GPU_Image* image, GPU_FilterEnum filter);
140
141 /*! \see GPU_SetWrapMode() */
142 void (SDLCALL *SetWrapMode)(GPU_Renderer* renderer, GPU_Image* image, GPU_WrapEnum wrap_mode_x, GPU_WrapEnum wrap_mode_y);
143
144 /*! \see GPU_ClearRGBA() */
145 void (SDLCALL *ClearRGBA)(GPU_Renderer* renderer, GPU_Target* target, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
146 /*! \see GPU_FlushBlitBuffer() */
147 void (SDLCALL *FlushBlitBuffer)(GPU_Renderer* renderer);
148 /*! \see GPU_Flip() */
149 void (SDLCALL *Flip)(GPU_Renderer* renderer, GPU_Target* target);
150
151
152 /*! \see GPU_CreateShaderProgram() */
153 Uint32 (SDLCALL *CreateShaderProgram)(GPU_Renderer* renderer);
154
155 /*! \see GPU_FreeShaderProgram() */
156 void (SDLCALL *FreeShaderProgram)(GPU_Renderer* renderer, Uint32 program_object);
157
158 /*! \see GPU_CompileShader_RW() */
159 Uint32 (SDLCALL *CompileShader_RW)(GPU_Renderer* renderer, GPU_ShaderEnum shader_type, SDL_RWops* shader_source, Uint8 free_rwops);
160
161 /*! \see GPU_CompileShader() */
162 Uint32 (SDLCALL *CompileShader)(GPU_Renderer* renderer, GPU_ShaderEnum shader_type, const char* shader_source);
163
164 /*! \see GPU_FreeShader() */
165 void (SDLCALL *FreeShader)(GPU_Renderer* renderer, Uint32 shader_object);
166
167 /*! \see GPU_AttachShader() */
168 void (SDLCALL *AttachShader)(GPU_Renderer* renderer, Uint32 program_object, Uint32 shader_object);
169
170 /*! \see GPU_DetachShader() */
171 void (SDLCALL *DetachShader)(GPU_Renderer* renderer, Uint32 program_object, Uint32 shader_object);
172
173 /*! \see GPU_LinkShaderProgram() */
174 Uint8 (SDLCALL *LinkShaderProgram)(GPU_Renderer* renderer, Uint32 program_object);
175
176 /*! \see GPU_ActivateShaderProgram() */
177 void (SDLCALL *ActivateShaderProgram)(GPU_Renderer* renderer, Uint32 program_object, GPU_ShaderBlock* block);
178
179 /*! \see GPU_DeactivateShaderProgram() */
180 void (SDLCALL *DeactivateShaderProgram)(GPU_Renderer* renderer);
181
182 /*! \see GPU_GetShaderMessage() */
183 const char* (SDLCALL *GetShaderMessage)(GPU_Renderer* renderer);
184
185 /*! \see GPU_GetAttribLocation() */
186 int (SDLCALL *GetAttributeLocation)(GPU_Renderer* renderer, Uint32 program_object, const char* attrib_name);
187
188 /*! \see GPU_GetUniformLocation() */
189 int (SDLCALL *GetUniformLocation)(GPU_Renderer* renderer, Uint32 program_object, const char* uniform_name);
190
191 /*! \see GPU_LoadShaderBlock() */
192 GPU_ShaderBlock (SDLCALL *LoadShaderBlock)(GPU_Renderer* renderer, Uint32 program_object, const char* position_name, const char* texcoord_name, const char* color_name, const char* modelViewMatrix_name);
193
194 /*! \see GPU_SetShaderBlock() */
195 void (SDLCALL *SetShaderBlock)(GPU_Renderer* renderer, GPU_ShaderBlock block);
196
197 /*! \see GPU_SetShaderImage() */
198 void (SDLCALL *SetShaderImage)(GPU_Renderer* renderer, GPU_Image* image, int location, int image_unit);
199
200 /*! \see GPU_GetUniformiv() */
201 void (SDLCALL *GetUniformiv)(GPU_Renderer* renderer, Uint32 program_object, int location, int* values);
202
203 /*! \see GPU_SetUniformi() */
204 void (SDLCALL *SetUniformi)(GPU_Renderer* renderer, int location, int value);
205
206 /*! \see GPU_SetUniformiv() */
207 void (SDLCALL *SetUniformiv)(GPU_Renderer* renderer, int location, int num_elements_per_value, int num_values, int* values);
208
209 /*! \see GPU_GetUniformuiv() */
210 void (SDLCALL *GetUniformuiv)(GPU_Renderer* renderer, Uint32 program_object, int location, unsigned int* values);
211
212 /*! \see GPU_SetUniformui() */
213 void (SDLCALL *SetUniformui)(GPU_Renderer* renderer, int location, unsigned int value);
214
215 /*! \see GPU_SetUniformuiv() */
216 void (SDLCALL *SetUniformuiv)(GPU_Renderer* renderer, int location, int num_elements_per_value, int num_values, unsigned int* values);
217
218 /*! \see GPU_GetUniformfv() */
219 void (SDLCALL *GetUniformfv)(GPU_Renderer* renderer, Uint32 program_object, int location, float* values);
220
221 /*! \see GPU_SetUniformf() */
222 void (SDLCALL *SetUniformf)(GPU_Renderer* renderer, int location, float value);
223
224 /*! \see GPU_SetUniformfv() */
225 void (SDLCALL *SetUniformfv)(GPU_Renderer* renderer, int location, int num_elements_per_value, int num_values, float* values);
226
227 /*! \see GPU_SetUniformMatrixfv() */
228 void (SDLCALL *SetUniformMatrixfv)(GPU_Renderer* renderer, int location, int num_matrices, int num_rows, int num_columns, Uint8 transpose, float* values);
229
230 /*! \see GPU_SetAttributef() */
231 void (SDLCALL *SetAttributef)(GPU_Renderer* renderer, int location, float value);
232
233 /*! \see GPU_SetAttributei() */
234 void (SDLCALL *SetAttributei)(GPU_Renderer* renderer, int location, int value);
235
236 /*! \see GPU_SetAttributeui() */
237 void (SDLCALL *SetAttributeui)(GPU_Renderer* renderer, int location, unsigned int value);
238
239 /*! \see GPU_SetAttributefv() */
240 void (SDLCALL *SetAttributefv)(GPU_Renderer* renderer, int location, int num_elements, float* value);
241
242 /*! \see GPU_SetAttributeiv() */
243 void (SDLCALL *SetAttributeiv)(GPU_Renderer* renderer, int location, int num_elements, int* value);
244
245 /*! \see GPU_SetAttributeuiv() */
246 void (SDLCALL *SetAttributeuiv)(GPU_Renderer* renderer, int location, int num_elements, unsigned int* value);
247
248 /*! \see GPU_SetAttributeSource() */
249 void (SDLCALL *SetAttributeSource)(GPU_Renderer* renderer, int num_values, GPU_Attribute source);
250
251
252 // Shapes
253
254 /*! \see GPU_SetLineThickness() */
255 float (SDLCALL *SetLineThickness)(GPU_Renderer* renderer, float thickness);
256
257 /*! \see GPU_GetLineThickness() */
258 float (SDLCALL *GetLineThickness)(GPU_Renderer* renderer);
259
260 /*! \see GPU_Pixel() */
261 void (SDLCALL *Pixel)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, SDL_Color color);
262
263 /*! \see GPU_Line() */
264 void (SDLCALL *Line)(GPU_Renderer* renderer, GPU_Target* target, float x1, float y1, float x2, float y2, SDL_Color color);
265
266 /*! \see GPU_Arc() */
267 void (SDLCALL *Arc)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float radius, float start_angle, float end_angle, SDL_Color color);
268
269 /*! \see GPU_ArcFilled() */
270 void (SDLCALL *ArcFilled)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float radius, float start_angle, float end_angle, SDL_Color color);
271
272 /*! \see GPU_Circle() */
273 void (SDLCALL *Circle)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float radius, SDL_Color color);
274
275 /*! \see GPU_CircleFilled() */
276 void (SDLCALL *CircleFilled)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float radius, SDL_Color color);
277
278 /*! \see GPU_Ellipse() */
279 void (SDLCALL *Ellipse)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float rx, float ry, float degrees, SDL_Color color);
280
281 /*! \see GPU_EllipseFilled() */
282 void (SDLCALL *EllipseFilled)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float rx, float ry, float degrees, SDL_Color color);
283
284 /*! \see GPU_Sector() */
285 void (SDLCALL *Sector)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float inner_radius, float outer_radius, float start_angle, float end_angle, SDL_Color color);
286
287 /*! \see GPU_SectorFilled() */
288 void (SDLCALL *SectorFilled)(GPU_Renderer* renderer, GPU_Target* target, float x, float y, float inner_radius, float outer_radius, float start_angle, float end_angle, SDL_Color color);
289
290 /*! \see GPU_Tri() */
291 void (SDLCALL *Tri)(GPU_Renderer* renderer, GPU_Target* target, float x1, float y1, float x2, float y2, float x3, float y3, SDL_Color color);
292
293 /*! \see GPU_TriFilled() */
294 void (SDLCALL *TriFilled)(GPU_Renderer* renderer, GPU_Target* target, float x1, float y1, float x2, float y2, float x3, float y3, SDL_Color color);
295
296 /*! \see GPU_Rectangle() */
297 void (SDLCALL *Rectangle)(GPU_Renderer* renderer, GPU_Target* target, float x1, float y1, float x2, float y2, SDL_Color color);
298
299 /*! \see GPU_RectangleFilled() */
300 void (SDLCALL *RectangleFilled)(GPU_Renderer* renderer, GPU_Target* target, float x1, float y1, float x2, float y2, SDL_Color color);
301
302 /*! \see GPU_RectangleRound() */
303 void (SDLCALL *RectangleRound)(GPU_Renderer* renderer, GPU_Target* target, float x1, float y1, float x2, float y2, float radius, SDL_Color color);
304
305 /*! \see GPU_RectangleRoundFilled() */
306 void (SDLCALL *RectangleRoundFilled)(GPU_Renderer* renderer, GPU_Target* target, float x1, float y1, float x2, float y2, float radius, SDL_Color color);
307
308 /*! \see GPU_Polygon() */
309 void (SDLCALL *Polygon)(GPU_Renderer* renderer, GPU_Target* target, unsigned int num_vertices, float* vertices, SDL_Color color);
310
311 /*! \see GPU_PolygonFilled() */
312 void (SDLCALL *PolygonFilled)(GPU_Renderer* renderer, GPU_Target* target, unsigned int num_vertices, float* vertices, SDL_Color color);
313
314} GPU_RendererImpl;
315
316#ifdef __cplusplus
317}
318#endif
319
320#endif