comparison src/render/opengles/SDL_render_gles.c @ 5204:523409574510

Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck This compiles, but it untested.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 06 Feb 2011 00:00:13 -0800
parents bb45ecd958d8
children 25ffd4e5255c
comparison
equal deleted inserted replaced
5203:01bced9a4cc1 5204:523409574510
69 static void GLES_DestroyTexture(SDL_Renderer * renderer, 69 static void GLES_DestroyTexture(SDL_Renderer * renderer,
70 SDL_Texture * texture); 70 SDL_Texture * texture);
71 static void GLES_DestroyRenderer(SDL_Renderer * renderer); 71 static void GLES_DestroyRenderer(SDL_Renderer * renderer);
72 72
73 73
74 SDL_RenderDriver GL_ES_RenderDriver = { 74 SDL_RenderDriver GLES_RenderDriver = {
75 GLES_CreateRenderer, 75 GLES_CreateRenderer,
76 { 76 {
77 "opengl_es", 77 "opengl_es",
78 (SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), 78 (SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED),
79 1, 79 1,
199 renderer->RenderFillRects = GLES_RenderFillRects; 199 renderer->RenderFillRects = GLES_RenderFillRects;
200 renderer->RenderCopy = GLES_RenderCopy; 200 renderer->RenderCopy = GLES_RenderCopy;
201 renderer->RenderPresent = GLES_RenderPresent; 201 renderer->RenderPresent = GLES_RenderPresent;
202 renderer->DestroyTexture = GLES_DestroyTexture; 202 renderer->DestroyTexture = GLES_DestroyTexture;
203 renderer->DestroyRenderer = GLES_DestroyRenderer; 203 renderer->DestroyRenderer = GLES_DestroyRenderer;
204 renderer->info = GL_ES_RenderDriver.info; 204 renderer->info = GLES_RenderDriver.info;
205 renderer->driverdata = data; 205 renderer->driverdata = data;
206 206
207 renderer->info.flags = SDL_RENDERER_ACCELERATED; 207 renderer->info.flags = SDL_RENDERER_ACCELERATED;
208 208
209 if (GLES_LoadFunctions(data) < 0) { 209 if (GLES_LoadFunctions(data) < 0) {
263 static SDL_GLContext SDL_CurrentContext = NULL; 263 static SDL_GLContext SDL_CurrentContext = NULL;
264 264
265 static int 265 static int
266 GLES_ActivateRenderer(SDL_Renderer * renderer) 266 GLES_ActivateRenderer(SDL_Renderer * renderer)
267 { 267 {
268
269 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; 268 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata;
270 SDL_Window *window = renderer->window; 269 SDL_Window *window = renderer->window;
271 270
272 if (SDL_CurrentContext != data->context) { 271 if (SDL_CurrentContext != data->context) {
273 if (SDL_GL_MakeCurrent(window, data->context) < 0) { 272 if (SDL_GL_MakeCurrent(window, data->context) < 0) {
388 return -1; 387 return -1;
389 } 388 }
390 return 0; 389 return 0;
391 } 390 }
392 391
393 static void
394 SetupTextureUpdate(GLES_RenderData * renderdata, SDL_Texture * texture,
395 int pitch)
396 {
397 renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
398 }
399
400 static int 392 static int
401 GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, 393 GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
402 const SDL_Rect * rect, const void *pixels, int pitch) 394 const SDL_Rect * rect, const void *pixels, int pitch)
403 { 395 {
404 GLES_RenderData *renderdata = (GLES_RenderData *) renderer->driverdata; 396 GLES_RenderData *renderdata = (GLES_RenderData *) renderer->driverdata;
410 int i; 402 int i;
411 403
412 GLES_ActivateRenderer(renderer); 404 GLES_ActivateRenderer(renderer);
413 405
414 renderdata->glGetError(); 406 renderdata->glGetError();
415 SetupTextureUpdate(renderdata, texture, pitch); 407 renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
416 renderdata->glEnable(data->type); 408 renderdata->glEnable(data->type);
417 renderdata->glBindTexture(data->type, data->texture); 409 renderdata->glBindTexture(data->type, data->texture);
418 410
419 if( rect->w * bpp == pitch ) { 411 if( rect->w * bpp == pitch ) {
420 temp_buffer = (void *)pixels; /* No need to reformat */ 412 temp_buffer = (void *)pixels; /* No need to reformat */
465 GLES_RenderData *renderdata = (GLES_RenderData *) renderer->driverdata; 457 GLES_RenderData *renderdata = (GLES_RenderData *) renderer->driverdata;
466 GLES_TextureData *data = (GLES_TextureData *) texture->driverdata; 458 GLES_TextureData *data = (GLES_TextureData *) texture->driverdata;
467 459
468 GLES_ActivateRenderer(renderer); 460 GLES_ActivateRenderer(renderer);
469 461
470 SetupTextureUpdate(renderdata, texture, data->pitch); 462 renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
471 renderdata->glEnable(data->type); 463 renderdata->glEnable(data->type);
472 renderdata->glBindTexture(data->type, data->texture); 464 renderdata->glBindTexture(data->type, data->texture);
473 renderdata->glTexSubImage2D(data->type, 0, 0, 0, texture->w, 465 renderdata->glTexSubImage2D(data->type, 0, 0, 0, texture->w,
474 texture->h, data->format, data->formattype, 466 texture->h, data->format, data->formattype,
475 data->pixels); 467 data->pixels);