Mercurial > sdl-ios-xcode
changeset 2350:eb828d6c3efb gsoc2008_iphone
SDL_uikitopengles is responsible for OpenGLES related functions in the UIKit video driver. The main thing to note is UIKit_GL_CreateContext which creates an instance of the SDL_uikitopenglview class, an OpenGL ES View. Most the real functionality is in SDL_uikitopenglview.
author | Holmes Futrell <hfutrell@umail.ucsb.edu> |
---|---|
date | Thu, 17 Jul 2008 22:32:16 +0000 |
parents | 0381047f2210 |
children | d2a519d2cc57 |
files | src/video/uikit/SDL_uikitopengles.h src/video/uikit/SDL_uikitopengles.m |
diffstat | 2 files changed, 115 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/video/uikit/SDL_uikitopengles.h Thu Jul 17 22:32:16 2008 +0000 @@ -0,0 +1,23 @@ +/* + * SDL_uikitopengles.h + * iPodSDL + * + * Created by Holmes Futrell on 5/29/08. + * Copyright 2008 __MyCompanyName__. All rights reserved. + * + */ + +#include "SDL_config.h" + +#ifndef _SDL_uikitopengles +#define _SDL_uikitopengles + +#include "SDL_uikitvideo.h" + +extern int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); +extern void UIKit_GL_SwapWindow(_THIS, SDL_Window * window); +extern SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window); +extern void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context); +extern void *UIKit_GL_GetProcAddress(_THIS, const char *proc); +extern int UIKit_GL_LoadLibrary(_THIS, const char *path); +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/video/uikit/SDL_uikitopengles.m Thu Jul 17 22:32:16 2008 +0000 @@ -0,0 +1,92 @@ +/* + * SDL_uikitopengles.c + * iPodSDL + * + * Created by Holmes Futrell on 5/29/08. + * Copyright 2008 __MyCompanyName__. All rights reserved. + * + */ + +#include "SDL_uikitopengles.h" +#include "SDL_uikitopenglview.h" +#include "jump.h" +#include "SDL_sysvideo.h" +#include "SDL_loadso.h" +#include <dlfcn.h> + +extern SDL_uikitopenglview *uikitEAGLView; +extern UIWindow *uikitWindow; + +static int UIKit_GL_Initialize(_THIS); + +void * +UIKit_GL_GetProcAddress(_THIS, const char *proc) +{ + /* Look through all SO's for the proc symbol. Here's why: + -Looking for the path to the OpenGL Library seems not to work in the iPhone Simulator. + -We don't know that the path won't change in the future. + */ + return SDL_LoadFunction(RTLD_DEFAULT, proc); +} + +int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) +{ + [uikitEAGLView setCurrentContext]; + return 0; +} + +int +UIKit_GL_LoadLibrary(_THIS, const char *path) +{ + /* shouldn't be passing a path into this function */ + if (path != NULL) { + SDL_SetError("iPhone GL Load Library just here for compatibility"); + return -1; + } + return 0; +} + + +void UIKit_GL_SwapWindow(_THIS, SDL_Window * window) +{ + + [uikitEAGLView swapBuffers]; + + /* since now we've got something to draw + make the window visible */ + [uikitWindow makeKeyAndVisible]; + + /* we need to let the event cycle run, or the OS won't update the OpenGL view! */ + SDL_PumpEvents(); + +} + +SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window) +{ + + uikitEAGLView = [[SDL_uikitopenglview alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame] \ + retainBacking: _this->gl_config.retained_backing \ + rBits: _this->gl_config.red_size \ + gBits: _this->gl_config.green_size \ + bBits: _this->gl_config.blue_size \ + aBits: _this->gl_config.alpha_size \ + depthBits: _this->gl_config.depth_size]; + + [uikitWindow addSubview: [uikitEAGLView autorelease]]; + uikitEAGLView.multipleTouchEnabled = YES; + + if ( UIKit_GL_MakeCurrent(_this, window, NULL) < 0 ) { + //Cocoa_GL_DeleteContext(_this, context); + return NULL; + } + + return [uikitEAGLView context]; +} + +void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context) +{ + + return; +} + +