CCEGLView::CCEGLView() : m_pDelegate(NULL) , m_fScreenScaleFactor(1.0) , m_bNotHVGA(false) , m_bCaptured(false) , m_bAccelState(false) , m_Key(s3eKeyFirst) { IW_CALLSTACK("CCEGLView::CCEGLView"); IwGLInit(); m_sSizeInPixel.width = IwGLGetInt(IW_GL_WIDTH); m_sSizeInPixel.height = IwGLGetInt(IW_GL_HEIGHT); m_pSet = new CCSet; m_pTouch = new CCTouch; // Register pointer touch button event handler s3ePointerRegister(S3E_POINTER_BUTTON_EVENT, &TouchEventHandler, this); // Register pointer motion button event handler s3ePointerRegister(S3E_POINTER_MOTION_EVENT, &MotionEventHandler, this); // Register keyboard event handler s3eKeyboardRegister(S3E_KEYBOARD_KEY_EVENT, &KeyEventHandler, this); }
CCEGLView::CCEGLView() : m_bCaptured(false) , m_bAccelState(false) , m_Key(s3eKeyFirst) { IW_CALLSTACK("CCEGLView::CCEGLView"); IwGLInit(); setFrameSize((float)IwGLGetInt(IW_GL_WIDTH), (float)IwGLGetInt(IW_GL_HEIGHT)); // Determine if the device supports multi-touch m_isMultiTouch = s3ePointerGetInt(S3E_POINTER_MULTI_TOUCH_AVAILABLE) ? true : false; // For multi-touch devices we handle touch and motion events using different callbacks if (m_isMultiTouch) { s3ePointerRegister(S3E_POINTER_TOUCH_EVENT, &MultiTouchEventHandler, this); s3ePointerRegister(S3E_POINTER_TOUCH_MOTION_EVENT, &MultiMotionEventHandler, this); } else { // Register pointer touch button event handler s3ePointerRegister(S3E_POINTER_BUTTON_EVENT, &TouchEventHandler, this); // Register pointer motion button event handler s3ePointerRegister(S3E_POINTER_MOTION_EVENT, &MotionEventHandler, this); } // Register keyboard event handler // s3eKeyboardRegister(S3E_KEYBOARD_KEY_EVENT, &KeyEventHandler, this); // s3eKeyboardRegister(S3E_KEYBOARD_CHAR_EVENT, &CharEventHandler, this); }
int main(int argc, char **argv) { IwGLInit(); AndroidInit(); s3eKeyboardRegister(S3E_KEYBOARD_KEY_EVENT, key_handler, NULL); while (!s3eDeviceCheckQuitRequest()) { AndroidStep(IwGLGetInt(IW_GL_WIDTH), IwGLGetInt(IW_GL_HEIGHT)); s3eDeviceYield(0); IwGLSwapBuffers(); } AndroidQuit(); }
CCEGLView::CCEGLView() : m_pDelegate(NULL) , m_fScreenScaleFactor(1.0) , m_bNotHVGA(false) , m_bCaptured(false) , m_bAccelState(false) , m_Key(s3eKeyFirst) { IW_CALLSTACK("CCEGLView::CCEGLView"); IwGLInit(); m_sSizeInPixel.width = IwGLGetInt(IW_GL_WIDTH); m_sSizeInPixel.height = IwGLGetInt(IW_GL_HEIGHT); m_pSet = new CCSet; m_pTouch = new CCTouch; // Determine if the device supports multi-touch m_isMultiTouch = s3ePointerGetInt(S3E_POINTER_MULTI_TOUCH_AVAILABLE) ? true : false; // For multi-touch devices we handle touch and motion events using different callbacks if (m_isMultiTouch) { s3ePointerRegister(S3E_POINTER_TOUCH_EVENT, &MultiTouchEventHandler, this); s3ePointerRegister(S3E_POINTER_TOUCH_MOTION_EVENT, &MultiMotionEventHandler, this); for (int i = 0; i < S3E_POINTER_TOUCH_MAX; i++) { touchSet[i] = NULL; } } else { // Register pointer touch button event handler s3ePointerRegister(S3E_POINTER_BUTTON_EVENT, &TouchEventHandler, this); // Register pointer motion button event handler s3ePointerRegister(S3E_POINTER_MOTION_EVENT, &MotionEventHandler, this); } // Register keyboard event handler // s3eKeyboardRegister(S3E_KEYBOARD_KEY_EVENT, &KeyEventHandler, this); // s3eKeyboardRegister(S3E_KEYBOARD_CHAR_EVENT, &CharEventHandler, this); }
int Game::eglInit() { if ( !IwGLInit() ) { s3eDebugErrorShow(S3E_MESSAGE_CONTINUE, "eglInit failed"); return 1; } // enable depth buffering glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); // enable alpha blending glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); return 0; }
void init(init_desc* desc_ptr) { Input::instance.__removeFromDebugList(); log::messageln("initialize oxygine"); if (desc_ptr) desc = *desc_ptr; #ifdef __S3E__ log::messageln("S3E build"); if (!IwGLInit()) { s3eDebugErrorShow(S3E_MESSAGE_CONTINUE, "IwGLInit failed"); return; } //init_ext(); int width = IwGLGetInt(IW_GL_WIDTH); int height = IwGLGetInt(IW_GL_HEIGHT); log::messageln("Screen BPP : %d", s3eSurfaceGetInt(S3E_SURFACE_PIXEL_TYPE) & S3E_SURFACE_PIXEL_SIZE_MASK); log::messageln("Screen Size : %dx%d", width, height); log::messageln("Vendor : %s", (const char*)glGetString(GL_VENDOR)); log::messageln("Renderer : %s", (const char*)glGetString(GL_RENDERER)); const char* version = (const char*)glGetString(GL_VERSION); log::messageln("Version : %s", version); s3ePointerUpdate(); if (s3ePointerGetInt(S3E_POINTER_MULTI_TOUCH_AVAILABLE)) { s3ePointerRegister(S3E_POINTER_TOUCH_EVENT, &pointerTouchEvent, 0); s3ePointerRegister(S3E_POINTER_TOUCH_MOTION_EVENT, &pointerTouchMotionEvent, 0); } else { s3ePointerRegister(S3E_POINTER_BUTTON_EVENT, &pointerEvent, 0); s3ePointerRegister(S3E_POINTER_MOTION_EVENT, &pointerMotionEvent, 0); } s3eDeviceRegister(S3E_DEVICE_UNPAUSE, applicationUnPause, 0); s3eDeviceRegister(S3E_DEVICE_PAUSE, applicationPause, 0); #elif EMSCRIPTEN log::messageln("EMSCRIPTEN build"); if (desc.w == -1 && desc.h == -1) { int fs = 0; emscripten_get_canvas_size(&desc.w, &desc.h, &fs); } if (SDL_Init(SDL_INIT_VIDEO) != 0) { log::error("Unable to initialize SDL: %s\n", SDL_GetError()); } SDL_Surface* screen; screen = SDL_SetVideoMode(desc.w, desc.h, 32, SDL_OPENGL); _displaySize = Point(desc.w, desc.h); emscripten_SDL_SetEventHandler(SDL_eventsHandler, 0); int v = EM_ASM_INT( { var p = navigator.platform; if (p == 'iPad' || p == 'iPhone' || p == 'iPod') return 1; return 0; }, 0);
void init(init_desc* desc_ptr) { std::string t; #ifdef OX_DEBUG t += "OX_DEBUG "; #endif #ifdef NDEBUG t += "NDEBUG "; #endif #ifdef _DEBUG t += "_DEBUG "; #endif #ifdef DEBUG t += "DEBUG "; #endif log::messageln("build settings %s", t.c_str()); init0(); log::messageln("initialize oxygine"); if (desc_ptr) desc = *desc_ptr; #ifdef __S3E__ log::messageln("S3E build"); if (!IwGLInit()) { s3eDebugErrorShow(S3E_MESSAGE_CONTINUE, "IwGLInit failed"); return; } //init_ext(); int width = IwGLGetInt(IW_GL_WIDTH); int height = IwGLGetInt(IW_GL_HEIGHT); log::messageln("Screen BPP : %d", s3eSurfaceGetInt(S3E_SURFACE_PIXEL_TYPE) & S3E_SURFACE_PIXEL_SIZE_MASK); log::messageln("Screen Size : %dx%d", width, height); log::messageln("Vendor : %s", (const char*)glGetString(GL_VENDOR)); log::messageln("Renderer : %s", (const char*)glGetString(GL_RENDERER)); const char* version = (const char*)glGetString(GL_VERSION); log::messageln("Version : %s", version); s3ePointerUpdate(); if (s3ePointerGetInt(S3E_POINTER_MULTI_TOUCH_AVAILABLE)) { s3ePointerRegister(S3E_POINTER_TOUCH_EVENT, &pointerTouchEvent, 0); s3ePointerRegister(S3E_POINTER_TOUCH_MOTION_EVENT, &pointerTouchMotionEvent, 0); } else { s3ePointerRegister(S3E_POINTER_BUTTON_EVENT, &pointerEvent, 0); s3ePointerRegister(S3E_POINTER_MOTION_EVENT, &pointerMotionEvent, 0); } s3eDeviceRegister(S3E_DEVICE_UNPAUSE, applicationUnPause, 0); s3eDeviceRegister(S3E_DEVICE_PAUSE, applicationPause, 0); #elif OXYGINE_SDL log::messageln("SDL build"); SDL_SetHint(SDL_HINT_VIDEO_ALLOW_SCREENSAVER, "1"); SDL_Init(SDL_INIT_VIDEO); if (desc.mode24bpp) { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); } else { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); } SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); //SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); if (desc.force_gles) { SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_EGL, 1); } SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN; #if TARGET_OS_IPHONE flags |= SDL_WINDOW_BORDERLESS; flags |= SDL_WINDOW_ALLOW_HIGHDPI; flags |= SDL_WINDOW_FULLSCREEN; #endif //SDL_DisplayMode mode; //SDL_GetCurrentDisplayMode(0, &mode); //log::messageln("display mode: %d %d", mode.w, mode.h); if (desc.w == -1 && desc.h == -1) { desc.w = 960; desc.h = 640; } if (desc.fullscreen) flags |= SDL_WINDOW_FULLSCREEN; { Event ev(EVENT_PRECREATEWINDOW); _dispatcher->dispatchEvent(&ev); } log::messageln("creating window %d %d", desc.w, desc.h); _window = SDL_CreateWindow(desc.title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, desc.w, desc.h, flags); if (!_window) { log::error("can't create window: %s", SDL_GetError()); return; } _context = SDL_GL_CreateContext(_window); if (!_context) { log::error("can't create gl context: %s", SDL_GetError()); return; } SDL_GL_SetSwapInterval(desc.vsync ? 1 : 0); #ifdef EMSCRIPTEN SDL_SetEventFilter(SDL_eventsHandler, 0); int v = EM_ASM_INT( { var p = navigator.platform; if (p == 'iPad' || p == 'iPhone' || p == 'iPod') return 1; return 0; }, 0);
void init(init_desc *desc_ptr) { Input::instance.__removeFromDebugList(); log::messageln("initialize oxygine"); if (desc_ptr) desc = *desc_ptr; #ifdef __S3E__ log::messageln("S3E build"); if (!IwGLInit()) { s3eDebugErrorShow(S3E_MESSAGE_CONTINUE, "IwGLInit failed"); return; } //init_ext(); int width = IwGLGetInt(IW_GL_WIDTH); int height = IwGLGetInt(IW_GL_HEIGHT); log::messageln("Screen BPP : %d", s3eSurfaceGetInt(S3E_SURFACE_PIXEL_TYPE) & S3E_SURFACE_PIXEL_SIZE_MASK); log::messageln("Screen Size : %dx%d", width, height); log::messageln("Vendor : %s", (const char*)glGetString( GL_VENDOR ) ); log::messageln("Renderer : %s", (const char*)glGetString( GL_RENDERER )); const char *version = (const char*)glGetString( GL_VERSION ); log::messageln( "Version : %s", version); s3ePointerUpdate(); if (s3ePointerGetInt(S3E_POINTER_MULTI_TOUCH_AVAILABLE)) { s3ePointerRegister(S3E_POINTER_TOUCH_EVENT, &pointerTouchEvent, 0); s3ePointerRegister(S3E_POINTER_TOUCH_MOTION_EVENT, &pointerTouchMotionEvent, 0); } else { s3ePointerRegister(S3E_POINTER_BUTTON_EVENT, &pointerEvent, 0); s3ePointerRegister(S3E_POINTER_MOTION_EVENT, &pointerMotionEvent, 0); } s3eDeviceRegister(S3E_DEVICE_UNPAUSE, applicationUnPause, 0); s3eDeviceRegister(S3E_DEVICE_PAUSE, applicationPause, 0); #elif EMSCRIPTEN log::messageln("EMSCRIPTEN build"); if (desc.w == -1 && desc.h == -1) { int fs = 0; emscripten_get_canvas_size(&desc.w, &desc.h, &fs); } if ( SDL_Init(SDL_INIT_VIDEO) != 0 ) { log::error("Unable to initialize SDL: %s\n", SDL_GetError()); } SDL_Surface *screen; screen = SDL_SetVideoMode(desc.w, desc.h, 32, SDL_OPENGL); _displaySize = Point(desc.w, desc.h); emscripten_SDL_SetEventHandler(SDL_eventsHandler, 0); #elif OXYGINE_SDL log::messageln("SDL build"); SDL_Init(SDL_INIT_VIDEO); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 0); //SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN; #if TARGET_OS_IPHONE flags |= SDL_WINDOW_BORDERLESS; #endif SDL_DisplayMode mode; SDL_GetCurrentDisplayMode(0, &mode); log::messageln("display mode: %d %d", mode.w, mode.h); if (desc.w == -1 && desc.h == -1) { desc.w = 960; desc.h = 640; } if (desc.fullscreen) flags |= SDL_WINDOW_FULLSCREEN; log::messageln("creating window %d %d", desc.w, desc.h); _window = SDL_CreateWindow(desc.title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, desc.w, desc.h, flags); if (!_window) { log::error("can't create window: %s", SDL_GetError()); return; } _context = SDL_GL_CreateContext(_window); if (!_context) { log::error("can't create gl context: %s", SDL_GetError()); return; } SDL_GL_SetSwapInterval(desc.vsync ? 1 : 0); //SDL_SetEventFilter(eventsFilter, 0); #endif file::init(desc.companyName, desc.appName); init2(); }
static bool InitializeOpenGL () { bool hasGLSL = false; #if GOT_GFX #if defined(_MSC_VER) && !defined(__S3E__) // setup minimal required GL HWND wnd = CreateWindowA( "STATIC", "GL", WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0, 0, 16, 16, NULL, NULL, GetModuleHandle(NULL), NULL ); HDC dc = GetDC( wnd ); PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 }; int fmt = ChoosePixelFormat( dc, &pfd ); SetPixelFormat( dc, fmt, &pfd ); HGLRC rc = wglCreateContext( dc ); wglMakeCurrent( dc, rc ); #elif defined(__APPLE__) CGLPixelFormatAttribute attributes[] = { kCGLPFAAccelerated, // no software rendering (CGLPixelFormatAttribute) 0 }; CGLPixelFormatAttribute attributes3[] = { kCGLPFAAccelerated, // no software rendering kCGLPFAOpenGLProfile, // core profile with the version stated below (CGLPixelFormatAttribute) kCGLOGLPVersion_3_2_Core, (CGLPixelFormatAttribute) 0 }; GLint num; CGLPixelFormatObj pix; // create legacy context CGLChoosePixelFormat(attributes, &pix, &num); if (pix == NULL) return false; CGLCreateContext(pix, NULL, &s_GLContext); if (s_GLContext == NULL) return false; CGLDestroyPixelFormat(pix); CGLSetCurrentContext(s_GLContext); // create core 3.2 context CGLChoosePixelFormat(attributes3, &pix, &num); if (pix == NULL) return false; CGLCreateContext(pix, NULL, &s_GLContext3); if (s_GLContext3 == NULL) return false; CGLDestroyPixelFormat(pix); #elif defined(__S3E__) IwGLInit() ; hasGLSL = true ; #endif #endif // GOT_GFX // check if we have GLSL #if !defined(__S3E__) const char* extensions = (const char*)glGetString(GL_EXTENSIONS); hasGLSL = extensions != NULL && strstr(extensions, "GL_ARB_shader_objects") && strstr(extensions, "GL_ARB_vertex_shader") && strstr(extensions, "GL_ARB_fragment_shader"); #endif #if defined(__APPLE__) // using core profile; always has GLSL hasGLSL = true; #endif #if defined(_MSC_VER) && !defined(__S3E__) if (hasGLSL) { glDeleteShader = (PFNGLDELETESHADERPROC)wglGetProcAddress("glDeleteShader"); glCreateShader = (PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader"); glShaderSource = (PFNGLSHADERSOURCEPROC)wglGetProcAddress("glShaderSource"); glCompileShader = (PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader"); glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)wglGetProcAddress("glGetShaderInfoLog"); glGetShaderiv = (PFNGLGETSHADERIVPROC)wglGetProcAddress("glGetShaderiv"); } #endif return hasGLSL; }