Mercurial > sdl-ios-xcode
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); |