LRESULT WINAPI WinProcedure(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_CREATE: return WinCreate(hWnd) ? 0 : -1; case WM_DESTROY: return WinDestroy(hWnd) ? 0 : -1; case WM_CLOSE: return WinClose(hWnd) ? 0 : -1; case WM_COMMAND: return WinCommand(hWnd,wParam,lParam) ? 0 : -1; case WM_CONTEXTMENU: return WinContextMenu(hWnd,wParam,lParam) ? 0 : -1; case WM_LBUTTONDOWN: return WinButtonDown(hWnd,msg,LOWORD(lParam),HIWORD(lParam)) ? 0 : -1; case WM_KEYDOWN: return WinKeyDown(hWnd,wParam,lParam) ? 0 : -1; case WM_SIZE: return WinSize(hWnd,msg,wParam,lParam) ? 0 : -1; case WM_PAINT: return WinPaint(hWnd) ? 0 : -1; } return DefWindowProc(hWnd,msg,wParam,lParam); }
/*----------------------------------------------------- Parameters: Returns value: Description ------------------------------------------------------*/ int DiagCreateWindow(unsigned long diag_bits, int wrows, int wcols, int rows,int cols) { int win = -1 ; #if 0 int i; i=wcols; if (diag_bits && !(diag_bits & Gdiag)) return(-1) ; /* create a set of rows x cols windows, each one of which is wrows x wcols in size. */ #if 0 win = WinAlloc("window", 50,50, wcols,wrows) ; WinShow(win) ; #else win = WinCreate("window", 1, wrows, wcols, rows, cols) ; #endif #endif return(win) ; }
//Basic Init, create the font, backbuffer, etc WINDOW *initscr(void) { lastchar=-1; inputdelay=-1; std::string typeface = ""; std::ifstream fin; int fontsize = 0; //actuall size fin.open("data/FONTDATA"); if (!fin.is_open()){ fontheight=16; fontwidth=8; } else { getline(fin, typeface); fin >> fontwidth; fin >> fontheight; fin >> fontsize; if ((fontwidth <= 4) || (fontheight <=4)){ fontheight=16; fontwidth=8; } fin.close(); } halfwidth=fontwidth / 2; halfheight=fontheight / 2; WindowWidth= (55 + (OPTIONS[OPT_VIEWPORT_X] * 2 + 1)) * fontwidth; WindowHeight= (OPTIONS[OPT_VIEWPORT_Y] * 2 + 1) *fontheight; if(!WinCreate()) {}// do something here //make fontdata compatible with wincurse if(!fexists(typeface.c_str())) typeface = "data/font/" + typeface + ".ttf"; //different default font with wincurse if(!fexists(typeface.c_str())) typeface = "data/font/fixedsys.ttf"; if(fontsize<=0) fontsize=fontheight-1; font = TTF_OpenFont(typeface.c_str(), fontsize); //if(!font) something went wrong TTF_SetFontStyle(font, TTF_STYLE_NORMAL); //TTF_SetFontOutline(font, 0); //TTF_SetFontKerning(font, 0); //TTF_SetFontHinting(font, TTF_HINTING_MONO); // glyph height hack by utunnels // SDL_ttf doesn't use FT_HAS_VERTICAL for function TTF_GlyphMetrics // this causes baseline problems for certain fonts // I can only guess by check a certain tall character... cache_glyphs(); mainwin = newwin((OPTIONS[OPT_VIEWPORT_Y] * 2 + 1),(55 + (OPTIONS[OPT_VIEWPORT_Y] * 2 + 1)),0,0); return mainwin; //create the 'stdscr' window and return its ref }
// esCreateWindow() // // title - name for title bar of window // width - width of window to create // height - height of window to create // flags - bitwise or of window creation flags // ES_WINDOW_ALPHA - specifies that the framebuffer should have alpha // ES_WINDOW_DEPTH - specifies that a depth buffer should be created // ES_WINDOW_STENCIL - specifies that a stencil buffer should be created // ES_WINDOW_MULTISAMPLE - specifies that a multi-sample buffer should be created GLboolean ESUTIL_API esCreateWindow ( ESContext *esContext, const char* title, GLint width, GLint height, GLuint flags ) { EGLint attribList[] = { EGL_RED_SIZE, 5, EGL_GREEN_SIZE, 6, EGL_BLUE_SIZE, 5, EGL_ALPHA_SIZE, (flags & ES_WINDOW_ALPHA) ? 8 : EGL_DONT_CARE, EGL_DEPTH_SIZE, (flags & ES_WINDOW_DEPTH) ? 24 : EGL_DONT_CARE, EGL_STENCIL_SIZE, (flags & ES_WINDOW_STENCIL) ? 8 : EGL_DONT_CARE, EGL_SAMPLE_BUFFERS, (flags & ES_WINDOW_MULTISAMPLE) ? 1 : 0, EGL_NONE }; if ( esContext == NULL ) { return GL_FALSE; } // create window (only for windows) #ifdef _WIN32 esContext->width = width; esContext->height = height; if ( !WinCreate ( esContext, title) ) { return GL_FALSE; } #endif if ( !CreateEGLContext ( esContext->hWnd, &esContext->eglDisplay, &esContext->eglContext, &esContext->eglSurface, attribList) ) { return GL_FALSE; } #ifdef __ANDROID__ // get size eglQuerySurface(esContext->eglDisplay, esContext->eglSurface, EGL_WIDTH, &esContext->width); eglQuerySurface(esContext->eglDisplay, esContext->eglSurface, EGL_HEIGHT, & esContext->height); #endif return GL_TRUE; }
/// // esCreateWindow() // // title - name for title bar of window // width - width of window to create // height - height of window to create // flags - bitwise or of window creation flags // ES_WINDOW_ALPHA - specifies that the framebuffer should have alpha // ES_WINDOW_DEPTH - specifies that a depth buffer should be created // ES_WINDOW_STENCIL - specifies that a stencil buffer should be created // ES_WINDOW_MULTISAMPLE - specifies that a multi-sample buffer should be created // ES_WINDOW_POST_SUB_BUFFER_SUPPORTED - specifies that EGL_POST_SUB_BUFFER_NV is supported. // GLboolean ESUTIL_API esCreateWindow ( ESContext *esContext, LPCTSTR title, GLint width, GLint height, GLuint flags ) { EGLint configAttribList[] = { EGL_RED_SIZE, 5, EGL_GREEN_SIZE, 6, EGL_BLUE_SIZE, 5, EGL_ALPHA_SIZE, (flags & ES_WINDOW_ALPHA) ? 8 : EGL_DONT_CARE, EGL_DEPTH_SIZE, (flags & ES_WINDOW_DEPTH) ? 8 : EGL_DONT_CARE, EGL_STENCIL_SIZE, (flags & ES_WINDOW_STENCIL) ? 8 : EGL_DONT_CARE, EGL_SAMPLE_BUFFERS, (flags & ES_WINDOW_MULTISAMPLE) ? 1 : 0, EGL_NONE }; EGLint surfaceAttribList[] = { EGL_POST_SUB_BUFFER_SUPPORTED_NV, flags & (ES_WINDOW_POST_SUB_BUFFER_SUPPORTED) ? EGL_TRUE : EGL_FALSE, EGL_NONE, EGL_NONE }; if ( esContext == NULL ) { return GL_FALSE; } esContext->width = width; esContext->height = height; if ( !WinCreate ( esContext, title) ) { return GL_FALSE; } if ( !CreateEGLContext ( esContext->hWnd, &esContext->eglDisplay, &esContext->eglContext, &esContext->eglSurface, configAttribList, surfaceAttribList ) ) { return GL_FALSE; } return GL_TRUE; }
//Basic Init, create the font, backbuffer, etc WINDOW *curses_init(void) { // _windows = new WINDOW[20]; //initialize all of our variables lastchar=-1; inputdelay=-1; int fontsize = 16; std::string typeface; int map_fontwidth = 8; int map_fontheight = 16; int map_fontsize = 16; std::string map_typeface; int overmap_fontwidth = 8; int overmap_fontheight = 16; int overmap_fontsize = 16; std::string overmap_typeface; bool fontblending; std::ifstream jsonstream(FILENAMES["fontdata"].c_str(), std::ifstream::binary); if (jsonstream.good()) { JsonIn json(jsonstream); JsonObject config = json.get_object(); // fontsize, fontblending, map_* are ignored in wincurse. fontwidth = config.get_int("fontwidth", fontwidth); fontheight = config.get_int("fontheight", fontheight); typeface = config.get_string("typeface", typeface); jsonstream.close(); } else { // User fontdata is missed. Try to load legacy fontdata. // Get and save all values. With unused. std::ifstream InStream(FILENAMES["legacy_fontdata"].c_str(), std::ifstream::binary); if(InStream.good()) { JsonIn jIn(InStream); JsonObject config = jIn.get_object(); fontwidth = config.get_int("fontwidth", fontwidth); fontheight = config.get_int("fontheight", fontheight); fontsize = config.get_int("fontsize", fontsize); typeface = config.get_string("typeface", typeface); map_fontwidth = config.get_int("map_fontwidth", fontwidth); map_fontheight = config.get_int("map_fontheight", fontheight); map_fontsize = config.get_int("map_fontsize", fontsize); map_typeface = config.get_string("map_typeface", typeface); overmap_fontwidth = config.get_int("overmap_fontwidth", fontwidth); overmap_fontheight = config.get_int("overmap_fontheight", fontheight); overmap_fontsize = config.get_int("overmap_fontsize", fontsize); overmap_typeface = config.get_string("overmap_typeface", typeface); InStream.close(); // Save legacy as user fontdata. assure_dir_exist(FILENAMES["config_dir"]); std::ofstream OutStream(FILENAMES["fontdata"].c_str(), std::ofstream::binary); if(!OutStream.good()) { DebugLog( D_ERROR, DC_ALL ) << "Can't save user fontdata file.\n" << "Check permissions for: " << FILENAMES["fontdata"].c_str(); return NULL; } JsonOut jOut(OutStream, true); // pretty-print jOut.start_object(); jOut.member("fontblending", fontblending); jOut.member("fontwidth", fontwidth); jOut.member("fontheight", fontheight); jOut.member("fontsize", fontsize); jOut.member("typeface", typeface); jOut.member("map_fontwidth", map_fontwidth); jOut.member("map_fontheight", map_fontheight); jOut.member("map_fontsize", map_fontsize); jOut.member("map_typeface", map_typeface); jOut.member("overmap_fontwidth", overmap_fontwidth); jOut.member("overmap_fontheight", overmap_fontheight); jOut.member("overmap_fontsize", overmap_fontsize); jOut.member("overmap_typeface", overmap_typeface); jOut.end_object(); OutStream << "\n"; OutStream.close(); } else { DebugLog( D_ERROR, DC_ALL ) << "Can't load fontdata files.\n" << "Check permissions for:\n" << FILENAMES["legacy_fontdata"].c_str() << "\n" << FILENAMES["fontdata"].c_str() << "\n"; return NULL; } } halfwidth=fontwidth / 2; halfheight=fontheight / 2; WindowWidth= OPTIONS["TERMINAL_X"] * fontwidth; WindowHeight = OPTIONS["TERMINAL_Y"] * fontheight; WinCreate(); //Create the actual window, register it, etc timeBeginPeriod(1); // Set Sleep resolution to 1ms CheckMessages(); //Let the message queue handle setting up the window WindowDC = GetDC(WindowHandle); backbuffer = CreateCompatibleDC(WindowDC); BITMAPINFO bmi = BITMAPINFO(); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = WindowWidth; bmi.bmiHeader.biHeight = -WindowHeight; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 8; bmi.bmiHeader.biCompression = BI_RGB; // Raw RGB bmi.bmiHeader.biSizeImage = WindowWidth * WindowHeight * 1; bmi.bmiHeader.biClrUsed = 16; // Colors in the palette bmi.bmiHeader.biClrImportant = 16; // Colors in the palette backbit = CreateDIBSection(0, &bmi, DIB_RGB_COLORS, (void**)&dcbits, NULL, 0); DeleteObject(SelectObject(backbuffer, backbit));//load the buffer into DC // Load private fonts if (SetCurrentDirectoryW(L"data\\font")){ WIN32_FIND_DATA findData; for (HANDLE findFont = FindFirstFileW(L".\\*", &findData); findFont != INVALID_HANDLE_VALUE; ) { if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){ // Skip folders AddFontResourceExW(findData.cFileName, FR_PRIVATE,NULL); } if (!FindNextFile(findFont, &findData)){ FindClose(findFont); break; } } SetCurrentDirectoryW(L"..\\.."); } // Use desired font, if possible font = CreateFontW(fontheight, fontwidth, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_MODERN, widen(typeface).c_str()); SetBkMode(backbuffer, TRANSPARENT);//Transparent font backgrounds SelectObject(backbuffer, font);//Load our font into the DC // WindowCount=0; init_colors(); mainwin = newwin(OPTIONS["TERMINAL_Y"],OPTIONS["TERMINAL_X"],0,0); return mainwin; //create the 'stdscr' window and return its ref }
//Basic Init, create the font, backbuffer, etc WINDOW *curses_init(void) { lastchar=-1; inputdelay=-1; std::string typeface = ""; std::string blending = "solid"; std::ifstream fin; int faceIndex = 0; int fontsize = 0; //actuall size fin.open("data/FONTDATA"); if (!fin.is_open()){ fontheight=16; fontwidth=8; } else { getline(fin, typeface); fin >> fontwidth; fin >> fontheight; fin >> fontsize; fin >> blending; if ((fontwidth <= 4) || (fontheight <= 4)) { fontheight=16; fontwidth=8; } fin.close(); } fontblending = (blending=="blended"); halfwidth=fontwidth / 2; halfheight=fontheight / 2; const int SidebarWidth = (OPTIONS["SIDEBAR_STYLE"] == "narrow") ? 45 : 55; WindowWidth= (SidebarWidth + (OPTIONS["VIEWPORT_X"] * 2 + 1)); if (WindowWidth < FULL_SCREEN_WIDTH) WindowWidth = FULL_SCREEN_WIDTH; WindowWidth *= fontwidth; WindowHeight= (OPTIONS["VIEWPORT_Y"] * 2 + 1) *fontheight; if(!WinCreate()) {}// do something here std::string sysfnt = find_system_font(typeface, faceIndex); if(sysfnt!="") typeface = sysfnt; //make fontdata compatible with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/" + typeface + ".ttf"; } //different default font with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/fixedsys.ttf"; } if(fontsize <= 0) fontsize = fontheight - 1; // SDL_ttf handles bitmap fonts size incorrectly if(0 == strcasecmp(typeface.substr(typeface.length() - 4).c_str(), ".fon")) faceIndex = test_face_size(typeface, fontsize, faceIndex); font = TTF_OpenFontIndex(typeface.c_str(), fontsize, faceIndex); //if(!font) something went wrong TTF_SetFontStyle(font, TTF_STYLE_NORMAL); // glyph height hack by utunnels // SDL_ttf doesn't use FT_HAS_VERTICAL for function TTF_GlyphMetrics // this causes baseline problems for certain fonts // I can only guess by check a certain tall character... cache_glyphs(); #ifdef SDLTILES // Should NOT be doing this for every damned window I think... keeping too much in memory is wasteful of the tiles. // Most definitely should not be doing this multiple times... mainwin = newwin((OPTIONS["VIEWPORT_Y"] * 2 + 1),(((OPTIONS["SIDEBAR_STYLE"] == "narrow") ? 45 : 55) + (OPTIONS["VIEWPORT_X"] * 2 + 1)),0,0); DebugLog() << "Initializing SDL Tiles context\n"; IMG_Init(IMG_INIT_PNG); tilecontext = new cata_tiles; tilecontext->init(screen, "gfx"); #else mainwin = newwin((OPTIONS["VIEWPORT_Y"] * 2 + 1),(((OPTIONS["SIDEBAR_STYLE"] == "narrow") ? 45 : 55) + (OPTIONS["VIEWPORT_Y"] * 2 + 1)),0,0); #endif return mainwin; //create the 'stdscr' window and return its ref }
//Basic Init, create the font, backbuffer, etc WINDOW *curses_init(void) { lastchar=-1; inputdelay=-1; std::string typeface = ""; std::string blending = "solid"; std::ifstream fin; int faceIndex = 0; int fontsize = 0; //actuall size fin.open("data/FONTDATA"); if (!fin.is_open()){ fontheight=16; fontwidth=8; } else { getline(fin, typeface); fin >> fontwidth; fin >> fontheight; fin >> fontsize; fin >> blending; if ((fontwidth <= 4) || (fontheight <= 4)) { fontheight=16; fontwidth=8; } fin.close(); } fontblending = (blending=="blended"); halfwidth=fontwidth / 2; halfheight=fontheight / 2; WindowWidth= (55 + (OPTIONS[OPT_VIEWPORT_X] * 2 + 1)) * fontwidth; WindowHeight= (OPTIONS[OPT_VIEWPORT_Y] * 2 + 1) *fontheight; if(!WinCreate()) {}// do something here std::string sysfnt = find_system_font(typeface, faceIndex); if(sysfnt!="") typeface = sysfnt; //make fontdata compatible with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/" + typeface + ".ttf"; } //different default font with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/fixedsys.ttf"; } if(fontsize <= 0) fontsize = fontheight - 1; // STL_ttf handles bitmap fonts size incorrectly if(0 == strcasecmp(typeface.substr(typeface.length() - 4).c_str(), ".fon")) faceIndex = test_face_size(typeface, fontsize, faceIndex); font = TTF_OpenFontIndex(typeface.c_str(), fontsize, faceIndex); //if(!font) something went wrong TTF_SetFontStyle(font, TTF_STYLE_NORMAL); // glyph height hack by utunnels // SDL_ttf doesn't use FT_HAS_VERTICAL for function TTF_GlyphMetrics // this causes baseline problems for certain fonts // I can only guess by check a certain tall character... cache_glyphs(); mainwin = newwin((OPTIONS[OPT_VIEWPORT_Y] * 2 + 1),(55 + (OPTIONS[OPT_VIEWPORT_Y] * 2 + 1)),0,0); return mainwin; //create the 'stdscr' window and return its ref }
//Basic Init, create the font, backbuffer, etc WINDOW *curses_init(void) { // _windows = new WINDOW[20]; //initialize all of our variables lastchar=-1; inputdelay=-1; std::string typeface; char * typeface_c = 0; std::ifstream fin; fin.open("data\\FONTDATA"); if (!fin.is_open()){ MessageBox(WindowHandle, "Failed to open FONTDATA, loading defaults.", NULL, 0); fontheight = 16; fontwidth = 8; } else { getline(fin, typeface); typeface_c = new char [typeface.size()+1]; strcpy (typeface_c, typeface.c_str()); fin >> fontwidth; fin >> fontheight; if ((fontwidth <= 4) || (fontheight <=4)){ MessageBox(WindowHandle, "Invalid font size specified!", NULL, 0); fontheight = 16; fontwidth = 8; } } halfwidth=fontwidth / 2; halfheight=fontheight / 2; WindowWidth= (55 + (OPTIONS["VIEWPORT_X"] * 2 + 1)) * fontwidth; WindowHeight = (OPTIONS["VIEWPORT_Y"] * 2 + 1) *fontheight; WinCreate(); //Create the actual window, register it, etc timeBeginPeriod(1); // Set Sleep resolution to 1ms CheckMessages(); //Let the message queue handle setting up the window WindowDC = GetDC(WindowHandle); backbuffer = CreateCompatibleDC(WindowDC); BITMAPINFO bmi = BITMAPINFO(); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = WindowWidth; bmi.bmiHeader.biHeight = -WindowHeight; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 8; bmi.bmiHeader.biCompression = BI_RGB; // Raw RGB bmi.bmiHeader.biSizeImage = WindowWidth * WindowHeight * 1; bmi.bmiHeader.biClrUsed = 16; // Colors in the palette bmi.bmiHeader.biClrImportant = 16; // Colors in the palette backbit = CreateDIBSection(0, &bmi, DIB_RGB_COLORS, (void**)&dcbits, NULL, 0); DeleteObject(SelectObject(backbuffer, backbit));//load the buffer into DC // Load private fonts if (SetCurrentDirectory("data\\font")){ WIN32_FIND_DATA findData; for (HANDLE findFont = FindFirstFile(".\\*", &findData); findFont != INVALID_HANDLE_VALUE; ) { if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){ // Skip folders AddFontResourceExA(findData.cFileName, FR_PRIVATE,NULL); } if (!FindNextFile(findFont, &findData)){ FindClose(findFont); break; } } SetCurrentDirectory("..\\.."); } // Use desired font, if possible font = CreateFont(fontheight, fontwidth, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_MODERN, typeface_c); SetBkMode(backbuffer, TRANSPARENT);//Transparent font backgrounds SelectObject(backbuffer, font);//Load our font into the DC // WindowCount=0; delete typeface_c; mainwin = newwin((OPTIONS["VIEWPORT_Y"] * 2 + 1),(55 + (OPTIONS["VIEWPORT_Y"] * 2 + 1)),0,0); return mainwin; //create the 'stdscr' window and return its ref }
EGLBoolean InitEGL( char* title, float screenWidth, float screenHeight, GLuint flags ) { WinCreate( title, screenWidth, screenHeight ); CreateEGLContext( flags ); return EGL_TRUE; }
//Basic Init, create the font, backbuffer, etc WINDOW *initscr(void) { _windows = new WINDOW[20]; //initialize all of our variables BITMAPINFO bmi; lastchar=-1; inputdelay=-1; std::string typeface; char * typeface_c; std::ifstream fin; fin.open("data\\FONTDATA"); if (!fin.is_open()) { MessageBox(WindowHandle, "Failed to open FONTDATA, loading defaults.", NULL, NULL); fontheight=16; fontwidth=8; } else { getline(fin, typeface); typeface_c= new char [typeface.size()+1]; strcpy (typeface_c, typeface.c_str()); fin >> fontwidth; fin >> fontheight; if ((fontwidth <= 4) || (fontheight <=4)) { MessageBox(WindowHandle, "Invalid font size specified!", NULL, NULL); fontheight=16; fontwidth=8; } } halfwidth=fontwidth / 2; halfheight=fontheight / 2; WindowWidth=80*fontwidth; WindowHeight=25*fontheight; WindowX=(GetSystemMetrics(SM_CXSCREEN) / 2)-WindowWidth; //center this WindowY=(GetSystemMetrics(SM_CYSCREEN) / 2)-WindowHeight; //sucker WinCreate(TRUE); //Create the actual window, register it, etc CheckMessages(); //Let the message queue handle setting up the window WindowDC = GetDC(WindowHandle); backbuffer = CreateCompatibleDC(WindowDC); ZeroMemory(&bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = WindowWidth; bmi.bmiHeader.biHeight = -WindowHeight; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount=8; bmi.bmiHeader.biCompression = BI_RGB; //store it in uncompressed bytes bmi.bmiHeader.biSizeImage = WindowWidth * WindowHeight * 1; bmi.bmiHeader.biClrUsed=16; //the number of colors in our palette bmi.bmiHeader.biClrImportant=16; //the number of colors in our palette backbit = CreateDIBSection(0, &bmi, DIB_RGB_COLORS, (void**)&dcbits, NULL, 0); DeleteObject(SelectObject(backbuffer, backbit));//load the buffer into DC int nResults = AddFontResourceExA("data\\termfont",FR_PRIVATE,NULL); if (nResults>0) { font = CreateFont(fontheight, fontwidth, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_MODERN, typeface_c); //Create our font } else { MessageBox(WindowHandle, "Failed to load default font, using FixedSys.", NULL, NULL); font = CreateFont(fontheight, fontwidth, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_MODERN, "FixedSys"); //Create our font } //FixedSys will be user-changable at some point in time?? SetBkMode(backbuffer, TRANSPARENT);//Transparent font backgrounds SelectObject(backbuffer, font);//Load our font into the DC WindowCount=0; delete typeface_c; return newwin(25,80,0,0); //create the 'stdscr' window and return its ref };
/// // esCreateWindow() // // title - name for title bar of window // width - width of window to create // height - height of window to create // flags - bitwise or of window creation flags // ES_WINDOW_ALPHA - specifies that the framebuffer should have alpha // ES_WINDOW_DEPTH - specifies that a depth buffer should be created // ES_WINDOW_STENCIL - specifies that a stencil buffer should be created // ES_WINDOW_MULTISAMPLE - specifies that a multi-sample buffer should be created // GLboolean ESUTIL_API esCreateWindow ( ESContext *esContext, const char *title, GLint width, GLint height, GLuint flags ) { #ifndef __APPLE__ EGLConfig config; EGLint majorVersion; EGLint minorVersion; EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE }; if ( esContext == NULL ) { return GL_FALSE; } #ifdef ANDROID // For Android, get the width/height from the window rather than what the // application requested. esContext->width = ANativeWindow_getWidth ( esContext->eglNativeWindow ); esContext->height = ANativeWindow_getHeight ( esContext->eglNativeWindow ); #else esContext->width = width; esContext->height = height; #endif if ( !WinCreate ( esContext, title ) ) { return GL_FALSE; } esContext->eglDisplay = eglGetDisplay( esContext->eglNativeDisplay ); if ( esContext->eglDisplay == EGL_NO_DISPLAY ) { return GL_FALSE; } // Initialize EGL if ( !eglInitialize ( esContext->eglDisplay, &majorVersion, &minorVersion ) ) { return GL_FALSE; } { EGLint numConfigs = 0; EGLint attribList[] = { EGL_RED_SIZE, 5, EGL_GREEN_SIZE, 6, EGL_BLUE_SIZE, 5, EGL_ALPHA_SIZE, ( flags & ES_WINDOW_ALPHA ) ? 8 : EGL_DONT_CARE, EGL_DEPTH_SIZE, ( flags & ES_WINDOW_DEPTH ) ? 8 : EGL_DONT_CARE, EGL_STENCIL_SIZE, ( flags & ES_WINDOW_STENCIL ) ? 8 : EGL_DONT_CARE, EGL_SAMPLE_BUFFERS, ( flags & ES_WINDOW_MULTISAMPLE ) ? 1 : 0, // if EGL_KHR_create_context extension is supported, then we will use // EGL_OPENGL_ES3_BIT_KHR instead of EGL_OPENGL_ES2_BIT in the attribute list EGL_RENDERABLE_TYPE, GetContextRenderableType ( esContext->eglDisplay ), EGL_NONE }; // Choose config if ( !eglChooseConfig ( esContext->eglDisplay, attribList, &config, 1, &numConfigs ) ) { return GL_FALSE; } if ( numConfigs < 1 ) { return GL_FALSE; } } #ifdef ANDROID // For Android, need to get the EGL_NATIVE_VISUAL_ID and set it using ANativeWindow_setBuffersGeometry { EGLint format = 0; eglGetConfigAttrib ( esContext->eglDisplay, config, EGL_NATIVE_VISUAL_ID, &format ); ANativeWindow_setBuffersGeometry ( esContext->eglNativeWindow, 0, 0, format ); } #endif // ANDROID // Create a surface esContext->eglSurface = eglCreateWindowSurface ( esContext->eglDisplay, config, esContext->eglNativeWindow, NULL ); if ( esContext->eglSurface == EGL_NO_SURFACE ) { return GL_FALSE; } // Create a GL context esContext->eglContext = eglCreateContext ( esContext->eglDisplay, config, EGL_NO_CONTEXT, contextAttribs ); if ( esContext->eglContext == EGL_NO_CONTEXT ) { return GL_FALSE; } // Make the context current if ( !eglMakeCurrent ( esContext->eglDisplay, esContext->eglSurface, esContext->eglSurface, esContext->eglContext ) ) { return GL_FALSE; } #endif // #ifndef __APPLE__ return GL_TRUE; }
//Basic Init, create the font, backbuffer, etc WINDOW *curses_init(void) { lastchar = -1; inputdelay = -1; std::string typeface = "Terminus"; std::string blending = "solid"; std::ifstream fin; int faceIndex = 0; int fontsize = 0; //actuall size fin.open("data/FONTDATA"); if (!fin.is_open()){ fontwidth = 8; fontheight = 16; std::ofstream fout;//create data/FONDATA file fout.open("data/FONTDATA"); if(fout.is_open()) { fout << typeface << "\n"; fout << fontwidth << "\n"; fout << fontheight; fout.close(); } } else { getline(fin, typeface); fin >> fontwidth; fin >> fontheight; fin >> fontsize; fin >> blending; if ((fontwidth <= 4) || (fontheight <= 4)) { fontheight = 16; fontwidth = 8; } fin.close(); } fontblending = (blending=="blended"); halfwidth=fontwidth / 2; halfheight=fontheight / 2; if(!InitSDL()) { DebugLog() << (std::string)"Failed to initialize SDL!\n"; } #ifdef SDLTILES DebugLog() << "Initializing SDL Tiles context\n"; tilecontext = new cata_tiles; tilecontext->init("gfx"); #endif // SDLTILES DebugLog() << (std::string)"Tiles initialized successfully.\n"; WindowWidth= OPTIONS["TERMINAL_X"]; if (WindowWidth < FULL_SCREEN_WIDTH) WindowWidth = FULL_SCREEN_WIDTH; WindowWidth *= fontwidth; WindowHeight = OPTIONS["TERMINAL_Y"] * fontheight; if(!WinCreate()) { DebugLog() << (std::string)"Failed to create game window!\n"; return NULL; } #ifdef SDLTILES tilecontext->set_screen(screen); while(!strcasecmp(typeface.substr(typeface.length()-4).c_str(),".bmp") || !strcasecmp(typeface.substr(typeface.length()-4).c_str(),".png")) { SDL_Surface *asciiload; typeface = "data/font/" + typeface; asciiload = IMG_Load(typeface.c_str()); if(!asciiload || asciiload->w*asciiload->h < (fontwidth * fontheight * 256)) { SDL_FreeSurface(asciiload); break; } Uint32 key = SDL_MapRGB(asciiload->format, 0xFF, 0, 0xFF); SDL_SetColorKey(asciiload,SDL_SRCCOLORKEY,key); ascii[0] = SDL_DisplayFormat(asciiload); SDL_FreeSurface(asciiload); for(int a = 1; a < 16; a++) { ascii[a]=SDL_ConvertSurface(ascii[0],ascii[0]->format,ascii[0]->flags); } init_colors(); for(int a = 0; a < 15; a++) { SDL_LockSurface(ascii[a]); int size = ascii[a]->h * ascii[a]->w; Uint32 *pixels = (Uint32 *)ascii[a]->pixels; Uint32 color = (windowsPalette[a].r << 16) | (windowsPalette[a].g << 8) | windowsPalette[a].b; for(int i=0;i<size;i++) { if(pixels[i] == 0xFFFFFF) pixels[i] = color; } SDL_UnlockSurface(ascii[a]); } if(fontwidth)tilewidth=ascii[0]->w/fontwidth; OutputChar = &OutputImageChar; mainwin = newwin(OPTIONS["TERMINAL_Y"], OPTIONS["TERMINAL_X"],0,0); return mainwin; } #endif // SDLTILES std::string sysfnt = find_system_font(typeface, faceIndex); if(sysfnt != "") typeface = sysfnt; //make fontdata compatible with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/" + typeface + ".ttf"; } //different default font with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/fixedsys.ttf"; } if(fontsize <= 0) fontsize = fontheight - 1; // SDL_ttf handles bitmap fonts size incorrectly if(0 == strcasecmp(typeface.substr(typeface.length() - 4).c_str(), ".fon")) faceIndex = test_face_size(typeface, fontsize, faceIndex); font = TTF_OpenFontIndex(typeface.c_str(), fontsize, faceIndex); //if(!font) something went wrong TTF_SetFontStyle(font, TTF_STYLE_NORMAL); // glyph height hack by utunnels // SDL_ttf doesn't use FT_HAS_VERTICAL for function TTF_GlyphMetrics // this causes baseline problems for certain fonts // I can only guess by check a certain tall character... cache_glyphs(); init_colors(); OutputChar = &OutputFontChar; mainwin = newwin(OPTIONS["TERMINAL_Y"], OPTIONS["TERMINAL_X"],0,0); return mainwin; //create the 'stdscr' window and return its ref }
//Basic Init, create the font, backbuffer, etc WINDOW *curses_init(void) { // _windows = new WINDOW[20]; //initialize all of our variables lastchar=-1; inputdelay=-1; std::string typeface; char * typeface_c; std::ifstream fin; fin.open("data\\FONTDATA"); if (!fin.is_open()){ MessageBox(WindowHandle, "Failed to open FONTDATA, loading defaults.", NULL, 0); fontheight = 16; fontwidth = 8; } else { getline(fin, typeface); typeface_c = new char [typeface.size()+1]; strcpy (typeface_c, typeface.c_str()); fin >> fontwidth; fin >> fontheight; if ((fontwidth <= 4) || (fontheight <=4)){ MessageBox(WindowHandle, "Invalid font size specified!", NULL, 0); fontheight = 16; fontwidth = 8; } } halfwidth=fontwidth / 2; halfheight=fontheight / 2; WindowWidth= (55 + (OPTIONS["VIEWPORT_X"] * 2 + 1)) * fontwidth; WindowHeight = (OPTIONS["VIEWPORT_Y"] * 2 + 1) *fontheight; WinCreate(); //Create the actual window, register it, etc timeBeginPeriod(1); // Set Sleep resolution to 1ms CheckMessages(); //Let the message queue handle setting up the window WindowDC = GetDC(WindowHandle); backbuffer = CreateCompatibleDC(WindowDC); BITMAPINFO bmi = {0}; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = WindowWidth; bmi.bmiHeader.biHeight = -WindowHeight; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 8; bmi.bmiHeader.biCompression = BI_RGB; // Raw RGB bmi.bmiHeader.biSizeImage = WindowWidth * WindowHeight * 1; bmi.bmiHeader.biClrUsed = 16; // Colors in the palette bmi.bmiHeader.biClrImportant = 16; // Colors in the palette backbit = CreateDIBSection(0, &bmi, DIB_RGB_COLORS, (void**)&dcbits, NULL, 0); DeleteObject(SelectObject(backbuffer, backbit));//load the buffer into DC int nResults = AddFontResourceExA("data\\termfont",FR_PRIVATE,NULL); if (nResults>0){ font = CreateFont(fontheight, fontwidth, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_MODERN, typeface_c); //Create our font } else { MessageBox(WindowHandle, "Failed to load default font, using FixedSys.", NULL, 0); font = CreateFont(fontheight, fontwidth, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_MODERN, "FixedSys"); //Create our font } //FixedSys will be user-changable at some point in time?? SetBkMode(backbuffer, TRANSPARENT);//Transparent font backgrounds SelectObject(backbuffer, font);//Load our font into the DC // WindowCount=0; delete typeface_c; mainwin = newwin((OPTIONS["VIEWPORT_Y"] * 2 + 1),(55 + (OPTIONS["VIEWPORT_Y"] * 2 + 1)),0,0); return mainwin; //create the 'stdscr' window and return its ref }
//Basic Init, create the font, backbuffer, etc WINDOW *curses_init(void) { lastchar = -1; inputdelay = -1; std::string typeface = "Terminus"; std::string blending = "solid"; std::ifstream fin; int faceIndex = 0; int fontsize = 0; //actuall size fin.open("data/FONTDATA"); if (!fin.is_open()){ fontwidth = 8; fontheight = 16; std::ofstream fout;//create data/FONDATA file fout.open("data/FONTDATA"); if(fout.is_open()) { fout << typeface << "\n"; fout << fontwidth << "\n"; fout << fontheight; fout.close(); } } else { getline(fin, typeface); fin >> fontwidth; fin >> fontheight; fin >> fontsize; fin >> blending; if ((fontwidth <= 4) || (fontheight <= 4)) { fontheight = 16; fontwidth = 8; } fin.close(); } fontblending = (blending=="blended"); halfwidth=fontwidth / 2; halfheight=fontheight / 2; if(!InitSDL()) { DebugLog() << "Failed to initialize SDL: " << SDL_GetError() << "\n"; return NULL; } TERMINAL_WIDTH = OPTIONS["TERMINAL_X"]; TERMINAL_HEIGHT = OPTIONS["TERMINAL_Y"]; if(OPTIONS["FULLSCREEN"]) { // Fullscreen mode overrides terminal width/height SDL_DisplayMode display_mode; SDL_GetDesktopDisplayMode(0, &display_mode); TERMINAL_WIDTH = display_mode.w / fontwidth; TERMINAL_HEIGHT = display_mode.h / fontheight; WindowWidth = display_mode.w; WindowHeight = display_mode.h; } else { WindowWidth= OPTIONS["TERMINAL_X"]; if (WindowWidth < FULL_SCREEN_WIDTH) WindowWidth = FULL_SCREEN_WIDTH; WindowWidth *= fontwidth; WindowHeight = OPTIONS["TERMINAL_Y"] * fontheight; } if(!WinCreate()) { DebugLog() << "Failed to create game window: " << SDL_GetError() << "\n"; return NULL; } #ifdef SDLTILES DebugLog() << "Initializing SDL Tiles context\n"; tilecontext = new cata_tiles(renderer); try { tilecontext->init("gfx"); DebugLog() << "Tiles initialized successfully.\n"; } catch(std::string err) { // use_tiles is the cached value of the USE_TILES option. // most (all?) code refers to this to see if cata_tiles should be used. // Setting it to false disables this from getting used. use_tiles = false; } #endif // SDLTILES #ifdef SDLTILES while(!strcasecmp(typeface.substr(typeface.length()-4).c_str(),".bmp") || !strcasecmp(typeface.substr(typeface.length()-4).c_str(),".png")) { DebugLog() << "Loading bitmap font [" + typeface + "].\n" ; typeface = "data/font/" + typeface; SDL_Surface *asciiload = IMG_Load(typeface.c_str()); if(!asciiload || asciiload->w*asciiload->h < (fontwidth * fontheight * 256)) { DebugLog() << "Failed to load bitmap font: " << IMG_GetError() << "\n"; SDL_FreeSurface(asciiload); break; } Uint32 key = SDL_MapRGB(asciiload->format, 0xFF, 0, 0xFF); SDL_SetColorKey(asciiload,SDL_TRUE,key); SDL_Surface *ascii_surf[16]; ascii_surf[0] = SDL_ConvertSurface(asciiload,format,0); SDL_SetSurfaceRLE(ascii_surf[0], true); SDL_FreeSurface(asciiload); for(int a = 1; a < 16; ++a) { ascii_surf[a] = SDL_ConvertSurface(ascii_surf[0],format,0); SDL_SetSurfaceRLE(ascii_surf[a], true); } init_colors(); for(int a = 0; a < 15; ++a) { SDL_LockSurface(ascii_surf[a]); int size = ascii_surf[a]->h * ascii_surf[a]->w; Uint32 *pixels = (Uint32 *)ascii_surf[a]->pixels; Uint32 color = (windowsPalette[a].r << 16) | (windowsPalette[a].g << 8) | windowsPalette[a].b; for(int i=0;i<size;i++) { if(pixels[i] == 0xFFFFFF) pixels[i] = color; } SDL_UnlockSurface(ascii_surf[a]); } if(fontwidth) tilewidth = ascii_surf[0]->w / fontwidth; OutputChar = &OutputImageChar; //convert ascii_surf to SDL_Texture for(int a = 0; a < 16; ++a) { ascii[a] = SDL_CreateTextureFromSurface(renderer,ascii_surf[a]); SDL_FreeSurface(ascii_surf[a]); } mainwin = newwin(get_terminal_height(), get_terminal_width(),0,0); return mainwin; } #endif // SDLTILES std::string sysfnt = find_system_font(typeface, faceIndex); if(sysfnt != "") typeface = sysfnt; //make fontdata compatible with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/" + typeface + ".ttf"; } //different default font with wincurse if(!fexists(typeface.c_str())) { faceIndex = 0; typeface = "data/font/fixedsys.ttf"; } DebugLog() << "Loading truetype font [" + typeface + "].\n" ; if(fontsize <= 0) fontsize = fontheight - 1; // SDL_ttf handles bitmap fonts size incorrectly if(0 == strcasecmp(typeface.substr(typeface.length() - 4).c_str(), ".fon")) faceIndex = test_face_size(typeface, fontsize, faceIndex); font = TTF_OpenFontIndex(typeface.c_str(), fontsize, faceIndex); if (font == NULL) { DebugLog() << "Failed to load truetype font: " << TTF_GetError() << "\n"; return NULL; } TTF_SetFontStyle(font, TTF_STYLE_NORMAL); // glyph height hack by utunnels // SDL_ttf doesn't use FT_HAS_VERTICAL for function TTF_GlyphMetrics // this causes baseline problems for certain fonts // I can only guess by check a certain tall character... cache_glyphs(); init_colors(); OutputChar = &OutputFontChar; mainwin = newwin(get_terminal_height(), get_terminal_width(),0,0); return mainwin; //create the 'stdscr' window and return its ref }
int main( int argc, char *argv[] ) { unsigned int frames = 0; int res; Mat4 projection_matrix; Mat4 viewMat; Mat4 rotMat; Mat4 modelMat; float aspect; float dw, dh; int debug_flag = 0; bcm_host_init(); res = WinCreate( &g_sc ); if( !res ) { printf( "Create window error!\n" ); return 0; } res = SurfaceCreate(&g_sc); if( !res ) { printf( "Create surface error!\n" ); return 0; } makeUnit(&viewMat); aspect = (float)g_sc.width / (float)g_sc.height; //makeProjectionMatrix(&g_sp.VpMatrix, 1, 65536, 53, aspect); //setPosition(&viewMat, 0, -4, -24 ); dw = 0.5f * aspect; dh = 0.5f; perspectiveMatrix( -dw, +dw, -dh, +dh, 1, 160, &g_sp.VpMatrix ); setPosition(&viewMat, 0, -12, -32 ); //print_mat4( &g_sp.VpMatrix ); mulMatrix(&g_sp.VpMatrix, &g_sp.VpMatrix, &viewMat); makeUnit(&modelMat); mulMatrix( &projection_matrix, &modelMat, &g_sp.VpMatrix ); makeUnit(&rotMat); setRotationY(&rotMat, 0.5); /* 30 degree/sec */ pmd_file = NULL; vmd_file = NULL; if( argc < 2 ) { printf( "File Error!\n" ); printf( "Argment1 : Pmd or Pmx file.\n" ); printf( "Argment2 : Vmd file.\n" ); return 0; } if( argc > 1 ) pmd_file = argv[ 1 ]; if( argc > 2 ) vmd_file = argv[ 2 ]; init(); if( argc > 3 && argv[ 3 ] ) { if( strncmp( argv[ 3 ], "-D", 2 ) == 0 ) debug_flag = 1; } //print_mat4( &projection_matrix ); glEnable(GL_DEPTH_TEST); glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); Mat4 delta_mat; makeUnit( &delta_mat ); if( argc > 4 ) { int i, j; char cmd_string[ 255 ] = { 0 }; for( i = 3; i < argc; i ++ ) { int length = 0; strcpy( cmd_string, argv[ i ] ); puts( cmd_string ); length = strlen( cmd_string ); cmd_string[ length ] = ' '; cmd_string[ length + 1 ] = '&'; cmd_string[ length + 2 ] = '\0'; system( cmd_string ); } } fps = new Fps(); fps->set_fps( _fps_ ); /* 1200frame / 60fps = 20sec */ //while( frames < 1200 ) while( !p->get_vmd( 0 )->is_end() || ( !vmd_file && frames < 160 ) ) //while( 1 ) { Mat4 pl_matrix; glViewport(0, 0, g_sc.width, g_sc.height); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* X Rotation */ mulMatrix( &pl_matrix, &projection_matrix, &delta_mat ); //glUniformMatrix4fv(g_sp.uModelMatrix, 1, GL_FALSE, modelMat.m); p->set_projection_matrix( pl_matrix.m ); draw(); /* char c = get_keyboard(); makeUnit( &delta_mat ); switch( c ) { case 'w': setPosition( &delta_mat, 0, 0, +4 ); break; case 's': setPosition( &delta_mat, 0, 0, -4 ); break; case 'a': setRotationY( &delta_mat, +0.5 ); break; case 'd': setRotationY( &delta_mat, -0.5 ); break; } */ eglSwapBuffers(g_sc.display, g_sc.surface); frames ++; //glutTimerFunc( fps->get_wait_time() * 1000.0f, timer, 0 ); usleep( 1600 ); if( debug_flag ) fps->draw(); } printf( "Ending process!\n" ); end(); return 0; }
GLboolean ESUTIL_API esCreateWindow(ESContext *esContext, const char *title, GLint width, GLint height, GLuint flags) { #ifndef __APPLE__ EGLConfig config; EGLint majorVersion; EGLint minorVersion; //OpenGL ES version 3.0 , set to 2 for 2.0 EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE }; if (esContext == NULL) return GL_FALSE; esContext->width = width; esContext->height = height; if (!WinCreate(esContext, title)) { return GL_FALSE; } esContext->eglDisplay = eglGetDisplay(esContext->eglNativeDisplay); if (esContext->eglDisplay == EGL_NO_DISPLAY) { return GL_FALSE; } // Initialize EGL if (!eglInitialize(esContext->eglDisplay, &majorVersion, &minorVersion)) { return GL_FALSE; } { EGLint numConfigs = 0; EGLint attribList[] = { EGL_RED_SIZE, 5, EGL_GREEN_SIZE, 6, EGL_BLUE_SIZE, 5, EGL_ALPHA_SIZE, (flags & ES_WINDOW_ALPHA) ? 8 : EGL_DONT_CARE, EGL_DEPTH_SIZE, (flags & ES_WINDOW_DEPTH) ? 8 : EGL_DONT_CARE, EGL_STENCIL_SIZE, (flags & ES_WINDOW_STENCIL) ? 8 : EGL_DONT_CARE, EGL_SAMPLE_BUFFERS, (flags & ES_WINDOW_MULTISAMPLE) ? 1 : 0, // if EGL_KHR_create_context extension is supported, then we will use // EGL_OPENGL_ES3_BIT_KHR instead of EGL_OPENGL_ES2_BIT in the attribute list EGL_RENDERABLE_TYPE, GetContextRenderableType(esContext->eglDisplay), EGL_NONE }; // Choose config if (!eglChooseConfig(esContext->eglDisplay, attribList, &config, 1, &numConfigs)) { return GL_FALSE; } if (numConfigs < 1) { return GL_FALSE; } } // Create a surface esContext->eglSurface = eglCreateWindowSurface(esContext->eglDisplay, config, esContext->eglNativeWindow, NULL); if (esContext->eglSurface == EGL_NO_SURFACE) { return GL_FALSE; } // Create a GL context esContext->eglContext = eglCreateContext(esContext->eglDisplay, config, EGL_NO_CONTEXT, contextAttribs); if (esContext->eglContext == EGL_NO_CONTEXT) { return GL_FALSE; } // Make the context current if (!eglMakeCurrent(esContext->eglDisplay, esContext->eglSurface, esContext->eglSurface, esContext->eglContext)) { return GL_FALSE; } #endif // #ifndef __APPLE__ return GL_TRUE; }