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