this repo has no description
at Multitexture 320 lines 15 kB view raw
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