{"action":"created","comment":{"url":"https://api.github.com/repos/scummvm/scummvm/pulls/comments/22769754","id":22769754,"diff_hunk":"@@ -0,0 +1,703 @@\n+/* ScummVM - Graphic Adventure Engine\n+ *\n+ * ScummVM is the legal property of its developers, whose names\n+ * are too numerous to list here. Please refer to the COPYRIGHT\n+ * file distributed with this source distribution.\n+ *\n+ * This program is free software; you can redistribute it and/or\n+ * modify it under the terms of the GNU General Public License\n+ * as published by the Free Software Foundation; either version 2\n+ * of the License, or (at your option) any later version.\n+ *\n+ * This program is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU General Public License\n+ * along with this program; if not, write to the Free Software\n+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n+ *\n+ */\n+\n+// Needed so we don't get errors when including the Raspberry Pi headers\n+#define FORBIDDEN_SYMBOL_ALLOW_ALL\n+#include \"backends/graphics/gles-custom/gles-custom.h\"\n+#include \"common/textconsole.h\"\n+#include \"common/config-manager.h\"\n+#ifdef USE_OSD\n+#include \"common/translation.h\"\n+#endif\n+\n+#include <GLES/gl.h>\n+#include <EGL/egl.h>\n+\n+#ifdef USE_GLES_RPI\n+#include <bcm_host.h>\n+DISPMANX_ELEMENT_HANDLE_T dispman_element;\n+DISPMANX_DISPLAY_HANDLE_T dispman_display;\n+DISPMANX_UPDATE_HANDLE_T dispman_update;\n+static EGL_DISPMANX_WINDOW_T nativewindow;\n+#endif\n+\n+#ifdef USE_GLES_FBDEV\n+// Includes for framebuffer size retrieval\n+#include <sys/ioctl.h>\n+#include <linux/fb.h>\n+#include <linux/vt.h>\n+#include <fcntl.h>\n+#include <unistd.h>\n+struct fbdev_window nativewindow;\n+#endif\n+\n+#ifdef USE_GLES_KMS\n+// This hacky define is needed since there is an struct member called \"virtual\" in xf86drm.h\n+#define virtual __virtual\n+#include <xf86drm.h>\n+#undef virtual\n+\n+#include <xf86drmMode.h>\n+#include <gbm.h>\n+\n+static struct {\n+\tstruct gbm_device *dev;\n+\tstruct gbm_surface *surface;\n+} gbm;\n+\n+static struct {\n+\tint fd;\n+\tdrmModeModeInfo *mode;\n+\tuint32_t crtc_id;\n+\tuint32_t connector_id;\n+} drm;\n+\n+struct drm_fb {\n+\tstruct gbm_bo *bo;\n+\tuint32_t fb_id;\n+};\n+\n+struct gbm_bo *bo;\n+struct drm_fb *fb;\n+fd_set fds;\n+\n+void page_flip_handler(int fd, unsigned int frame,\n+\t\t  unsigned int sec, unsigned int usec, void *data)\n+{\n+\tint *waiting_for_flip = (int*)data;\n+\t*waiting_for_flip = 0;\n+}\n+\n+static drmEventContext evctx;\n+\n+void drm_fb_destroy_callback(struct gbm_bo *bob, void *data);\n+\n+struct drm_fb * drm_fb_get_from_bo(struct gbm_bo *bob)\n+{\n+\tstruct drm_fb *fbu = (drm_fb*)gbm_bo_get_user_data(bob);\n+\tuint32_t width, height, stride, handle;\n+\n+\tif (fbu) {\n+\t\treturn fbu;\n+\t}\n+\t\n+\tfbu = (drm_fb*)calloc(1, sizeof *fbu);\n+\tfbu->bo = bob;\n+\n+\twidth = gbm_bo_get_width(bob);\n+\theight = gbm_bo_get_height(bob);\n+\tstride = gbm_bo_get_stride(bob);\n+\thandle = gbm_bo_get_handle(bob).u32;\n+\n+\tif (drmModeAddFB(drm.fd, width, height, 24, 32, stride, handle, &fbu->fb_id)) {\n+\t\tdebug(\"Could not add drm framebuffer\\n\");\n+\t\tfree(fbu);\n+\t\treturn NULL;\n+\t}\n+\n+\t// We used to pass the destroy callback function here. Now it's done manually in deinit_egl()\n+\tgbm_bo_set_user_data(bob, fbu, NULL);\n+\treturn fbu;\n+}\n+\n+void DRM_PageFlip(void){\n+\tstruct gbm_bo *next_bo;\n+\tint waiting_for_flip = 1;\n+\n+\tnext_bo = gbm_surface_lock_front_buffer(gbm.surface);\n+\tfb = drm_fb_get_from_bo(next_bo);\n+\n+\tif (drmModePageFlip(drm.fd, drm.crtc_id, fb->fb_id,\n+\t\t\tDRM_MODE_PAGE_FLIP_EVENT, &waiting_for_flip)){\n+\t\tdebug (\"Failed to queue pageflip\\n\");\n+\t\treturn;\n+\t}\n+\n+\twhile (waiting_for_flip) {\n+\t\tFD_ZERO(&fds);\n+\t\t\n+\t\tFD_SET(0, &fds);\n+\t\tFD_SET(drm.fd, &fds);\n+\n+\t\tselect(drm.fd+1, &fds, NULL, NULL, NULL);\n+\t\t\n+\t\tdrmHandleEvent(drm.fd, &evctx);\n+\t}\n+\t\n+\t// release last buffer to render on again\n+\tgbm_surface_release_buffer(gbm.surface, bo);\n+\tbo = next_bo;\n+}\n+\n+int init_drm(void)\n+{\n+\tstatic const char *modules[] = {\n+\t\t\t\"i915\", \"radeon\", \"nouveau\", \"vmwgfx\", \"omapdrm\", \"exynos\", \"msm\"\n+\t};\n+\tdrmModeRes *resources;\n+\tdrmModeConnector *connector = NULL;\n+\tdrmModeEncoder *encoder = NULL;\n+\tunsigned i, area;\n+\n+\t// In plain C, we can just init evctx at declare time, but it's now allowed in C++\n+\tevctx.version = DRM_EVENT_CONTEXT_VERSION;\n+\tevctx.page_flip_handler = page_flip_handler;\n+\n+\tfor (i = 0; i < (sizeof(modules) / sizeof(modules[0])); i++) {\n+\t\tdebug(\"trying to load module %s...\", modules[i]);\n+\t\tdrm.fd = drmOpen(modules[i], NULL);\n+\t\tif (drm.fd < 0) {\n+\t\t\tdebug(\"failed.\");\n+\t\t} else {\n+\t\t\tdebug(\"success.\");\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tif (drm.fd < 0) {\n+\t\tdebug(\"could not open drm device\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tresources = drmModeGetResources(drm.fd);\n+\tif (!resources) {\n+\t\tdebug(\"drmModeGetResources failed\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\t// find a connected connector\n+\tfor (i = 0; i < (unsigned)resources->count_connectors; i++) {\n+\t\tconnector = drmModeGetConnector(drm.fd, resources->connectors[i]);\n+\t\tif (connector->connection == DRM_MODE_CONNECTED) {\n+\t\t\t// it's connected, let's use this!\n+\t\t\tbreak;\n+\t\t}\n+\t\tdrmModeFreeConnector(connector);\n+\t\tconnector = NULL;\n+\t}\n+\n+\tif (!connector) {\n+\t\t// we could be fancy and listen for hotplug events and wait for\n+\t\t// a connector..\n+\t\tdebug(\"no connected connector found\\n\");\n+\t\treturn -1;\n+\t}\n+\t// find highest resolution mode\n+\tfor (i = 0, area = 0; i < (unsigned)connector->count_modes; i++) {\n+\t\tdrmModeModeInfo *current_mode = &connector->modes[i];\n+\t\tunsigned current_area = current_mode->hdisplay * current_mode->vdisplay;\n+\t\tif (current_area > area) {\n+\t\t\tdrm.mode = current_mode;\n+\t\t\tarea = current_area;\n+\t\t}\n+\t}\n+\n+\tif (!drm.mode) {\n+\t\tdebug(\"could not find mode\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\t// find encoder\n+\tfor (i = 0; i < (unsigned)resources->count_encoders; i++) {\n+\t\tencoder = drmModeGetEncoder(drm.fd, resources->encoders[i]);\n+\t\tif (encoder->encoder_id == connector->encoder_id)\n+\t\t\tbreak;\n+\t\tdrmModeFreeEncoder(encoder);\n+\t\tencoder = NULL;\n+\t}\n+\n+\tif (!encoder) {\n+\t\tdebug(\"no encoder found\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tdrm.crtc_id = encoder->crtc_id;\n+\tdrm.connector_id = connector->connector_id;\n+\n+\treturn 0;\n+}\n+\n+int init_gbm(void)\n+{\n+\tgbm.dev = gbm_create_device(drm.fd);\n+\n+\tgbm.surface = gbm_surface_create(gbm.dev,\n+\t\t\tdrm.mode->hdisplay, drm.mode->vdisplay,\n+\t\t\tGBM_FORMAT_XRGB8888,\n+\t\t\tGBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);\n+\tif (!gbm.surface) {\n+\t\tdebug (\"failed to create gbm surface\\n\");\n+\t\treturn -1;\n+\t}\n+\t\n+\treturn 0;\n+}\n+\n+#endif\n+\n+static struct {\n+\tEGLDisplay display;\n+\tEGLConfig config;\n+\tEGLContext context;\n+\tEGLSurface surface;\n+\tuint32_t width, height, refresh;\n+} eglInfo;\n+\n+void OpenGLCustomGraphicsManager::init_egl(){\n+\tstatic const EGLint attribute_list[] =\n+\t{\n+\t    EGL_RED_SIZE, 8,\n+\t    EGL_GREEN_SIZE, 8,\n+\t    EGL_BLUE_SIZE, 8,\n+\t    EGL_ALPHA_SIZE, 8,\n+\t    EGL_SURFACE_TYPE, EGL_WINDOW_BIT,\n+\t    EGL_NONE\n+\t};\n+\t\n+\t// create an EGL rendering context\n+\tstatic const EGLint context_attributes[] =\n+\t{\n+\t    EGL_CONTEXT_CLIENT_VERSION, 1,\n+\t    EGL_NONE\n+\t};\n+\n+\tEGLint num_config;\n+\t\n+\t#ifdef USE_GLES_RPI\n+\tbcm_host_init();\n+\tVC_RECT_T dst_rect;\n+\tVC_RECT_T src_rect;\n+\t\n+\t// create a Dispmanx EGL window surface\n+\tint32_t success = graphics_get_display_size(0, &eglInfo.width, &eglInfo.height);\n+\tassert(success >= 0);\n+\n+\tvc_dispmanx_rect_set(&dst_rect, 0, 0, eglInfo.width, eglInfo.height);\n+    \n+\tvc_dispmanx_rect_set(&src_rect, 0, 0, eglInfo.width << 16, eglInfo.height << 16);\n+    \n+\tdispman_display = vc_dispmanx_display_open(0);\n+\tdispman_update = vc_dispmanx_update_start(0);\n+\tdispman_element = vc_dispmanx_element_add(dispman_update, dispman_display,\n+                                              10, &dst_rect, 0, &src_rect,\n+                                              DISPMANX_PROTECTION_NONE, NULL, NULL, DISPMANX_NO_ROTATE);\n+    \n+\tnativewindow.element = dispman_element;\n+\tnativewindow.width = eglInfo.width;\n+\tnativewindow.height = eglInfo.height;\n+    \n+\tvc_dispmanx_update_submit_sync(dispman_update);\n+\t#endif    \n+\t\n+\t#ifdef USE_GLES_FBDEV\n+\tstruct fb_var_screeninfo vinfo;\n+\tint fb = open(\"/dev/fb0\", O_RDWR, 0);\n+\tif (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo) < 0) {\n+\t\tdebug(\"Error obtainig framebuffer info\\n\");\n+\t\treturn;\n+\t}\n+\tclose (fb);\n+\n+\tnativewindow.width = vinfo.xres;\n+\tnativewindow.height = vinfo.yres;\n+\t#endif\t\n+\n+\t#ifdef USE_GLES_KMS\n+\tif (init_drm()) {\n+\t\tdebug(\"failed to initialize DRM\\n\");\n+\t\treturn;\n+\t}\n+\n+\tif (init_gbm()) {\n+\t\tdebug(\"failed to initialize GBM\\n\");\n+\t\treturn;\n+\t}\n+\t#endif\t\n+\t\n+\t// get an EGL display connection\n+        #ifdef USE_GLES_KMS","path":"backends/graphics/gles-custom/gles-custom.cpp","position":337,"original_position":337,"commit_id":"13185d38c00980554dc32daed7b9e29de473ee52","original_commit_id":"13185d38c00980554dc32daed7b9e29de473ee52","user":{"login":"sev-","id":365188,"avatar_url":"https://avatars.githubusercontent.com/u/365188?v=3","gravatar_id":"","url":"https://api.github.com/users/sev-","html_url":"https://github.com/sev-","followers_url":"https://api.github.com/users/sev-/followers","following_url":"https://api.github.com/users/sev-/following{/other_user}","gists_url":"https://api.github.com/users/sev-/gists{/gist_id}","starred_url":"https://api.github.com/users/sev-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sev-/subscriptions","organizations_url":"https://api.github.com/users/sev-/orgs","repos_url":"https://api.github.com/users/sev-/repos","events_url":"https://api.github.com/users/sev-/events{/privacy}","received_events_url":"https://api.github.com/users/sev-/received_events","type":"User","site_admin":false},"body":"It must start from column 0","created_at":"2015-01-11T20:23:29Z","updated_at":"2015-01-11T20:23:29Z","html_url":"https://github.com/scummvm/scummvm/pull/562#discussion_r22769754","pull_request_url":"https://api.github.com/repos/scummvm/scummvm/pulls/562","_links":{"self":{"href":"https://api.github.com/repos/scummvm/scummvm/pulls/comments/22769754"},"html":{"href":"https://github.com/scummvm/scummvm/pull/562#discussion_r22769754"},"pull_request":{"href":"https://api.github.com/repos/scummvm/scummvm/pulls/562"}}},"pull_request":{"url":"https://api.github.com/repos/scummvm/scummvm/pulls/562","id":27153512,"html_url":"https://github.com/scummvm/scummvm/pull/562","diff_url":"https://github.com/scummvm/scummvm/pull/562.diff","patch_url":"https://github.com/scummvm/scummvm/pull/562.patch","issue_url":"https://api.github.com/repos/scummvm/scummvm/issues/562","number":562,"state":"open","locked":false,"title":"Added GLES context support for various ARM GNU/Linux boards and X-less GLES on KMS","user":{"login":"vanfanel","id":837585,"avatar_url":"https://avatars.githubusercontent.com/u/837585?v=3","gravatar_id":"","url":"https://api.github.com/users/vanfanel","html_url":"https://github.com/vanfanel","followers_url":"https://api.github.com/users/vanfanel/followers","following_url":"https://api.github.com/users/vanfanel/following{/other_user}","gists_url":"https://api.github.com/users/vanfanel/gists{/gist_id}","starred_url":"https://api.github.com/users/vanfanel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanfanel/subscriptions","organizations_url":"https://api.github.com/users/vanfanel/orgs","repos_url":"https://api.github.com/users/vanfanel/repos","events_url":"https://api.github.com/users/vanfanel/events{/privacy}","received_events_url":"https://api.github.com/users/vanfanel/received_events","type":"User","site_admin":false},"body":"-Added a new class in backends/graphics/gles-custom that covers all these cases.\r\n-Added the necessary code in the configure script for it to work. For Raspberry Pi and AllWinner-based boards (Cubie/CB2/Cubietruck) it autodetects the CPU so it doesn't need anything to be passed to the configure script.\r\nFor the GLES on KMS case, the \"--enable-gles-kms\" parameter must be passed, because it runs on different architectures and it's an alternative to desktop GL which can be enabled on those systems, so the X-less solution must be chosen if needed.\r\n","created_at":"2015-01-10T19:40:43Z","updated_at":"2015-01-11T20:23:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9ebc78bc1177f25ff77da1de646dc87f987d2d8b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scummvm/scummvm/pulls/562/commits","review_comments_url":"https://api.github.com/repos/scummvm/scummvm/pulls/562/comments","review_comment_url":"https://api.github.com/repos/scummvm/scummvm/pulls/comments/{number}","comments_url":"https://api.github.com/repos/scummvm/scummvm/issues/562/comments","statuses_url":"https://api.github.com/repos/scummvm/scummvm/statuses/13185d38c00980554dc32daed7b9e29de473ee52","head":{"label":"vanfanel:gles_custom","ref":"gles_custom","sha":"13185d38c00980554dc32daed7b9e29de473ee52","user":{"login":"vanfanel","id":837585,"avatar_url":"https://avatars.githubusercontent.com/u/837585?v=3","gravatar_id":"","url":"https://api.github.com/users/vanfanel","html_url":"https://github.com/vanfanel","followers_url":"https://api.github.com/users/vanfanel/followers","following_url":"https://api.github.com/users/vanfanel/following{/other_user}","gists_url":"https://api.github.com/users/vanfanel/gists{/gist_id}","starred_url":"https://api.github.com/users/vanfanel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanfanel/subscriptions","organizations_url":"https://api.github.com/users/vanfanel/orgs","repos_url":"https://api.github.com/users/vanfanel/repos","events_url":"https://api.github.com/users/vanfanel/events{/privacy}","received_events_url":"https://api.github.com/users/vanfanel/received_events","type":"User","site_admin":false},"repo":{"id":29060859,"name":"scummvm","full_name":"vanfanel/scummvm","owner":{"login":"vanfanel","id":837585,"avatar_url":"https://avatars.githubusercontent.com/u/837585?v=3","gravatar_id":"","url":"https://api.github.com/users/vanfanel","html_url":"https://github.com/vanfanel","followers_url":"https://api.github.com/users/vanfanel/followers","following_url":"https://api.github.com/users/vanfanel/following{/other_user}","gists_url":"https://api.github.com/users/vanfanel/gists{/gist_id}","starred_url":"https://api.github.com/users/vanfanel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanfanel/subscriptions","organizations_url":"https://api.github.com/users/vanfanel/orgs","repos_url":"https://api.github.com/users/vanfanel/repos","events_url":"https://api.github.com/users/vanfanel/events{/privacy}","received_events_url":"https://api.github.com/users/vanfanel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vanfanel/scummvm","description":"ScummVM main repository","fork":true,"url":"https://api.github.com/repos/vanfanel/scummvm","forks_url":"https://api.github.com/repos/vanfanel/scummvm/forks","keys_url":"https://api.github.com/repos/vanfanel/scummvm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vanfanel/scummvm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vanfanel/scummvm/teams","hooks_url":"https://api.github.com/repos/vanfanel/scummvm/hooks","issue_events_url":"https://api.github.com/repos/vanfanel/scummvm/issues/events{/number}","events_url":"https://api.github.com/repos/vanfanel/scummvm/events","assignees_url":"https://api.github.com/repos/vanfanel/scummvm/assignees{/user}","branches_url":"https://api.github.com/repos/vanfanel/scummvm/branches{/branch}","tags_url":"https://api.github.com/repos/vanfanel/scummvm/tags","blobs_url":"https://api.github.com/repos/vanfanel/scummvm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vanfanel/scummvm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vanfanel/scummvm/git/refs{/sha}","trees_url":"https://api.github.com/repos/vanfanel/scummvm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vanfanel/scummvm/statuses/{sha}","languages_url":"https://api.github.com/repos/vanfanel/scummvm/languages","stargazers_url":"https://api.github.com/repos/vanfanel/scummvm/stargazers","contributors_url":"https://api.github.com/repos/vanfanel/scummvm/contributors","subscribers_url":"https://api.github.com/repos/vanfanel/scummvm/subscribers","subscription_url":"https://api.github.com/repos/vanfanel/scummvm/subscription","commits_url":"https://api.github.com/repos/vanfanel/scummvm/commits{/sha}","git_commits_url":"https://api.github.com/repos/vanfanel/scummvm/git/commits{/sha}","comments_url":"https://api.github.com/repos/vanfanel/scummvm/comments{/number}","issue_comment_url":"https://api.github.com/repos/vanfanel/scummvm/issues/comments/{number}","contents_url":"https://api.github.com/repos/vanfanel/scummvm/contents/{+path}","compare_url":"https://api.github.com/repos/vanfanel/scummvm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vanfanel/scummvm/merges","archive_url":"https://api.github.com/repos/vanfanel/scummvm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vanfanel/scummvm/downloads","issues_url":"https://api.github.com/repos/vanfanel/scummvm/issues{/number}","pulls_url":"https://api.github.com/repos/vanfanel/scummvm/pulls{/number}","milestones_url":"https://api.github.com/repos/vanfanel/scummvm/milestones{/number}","notifications_url":"https://api.github.com/repos/vanfanel/scummvm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vanfanel/scummvm/labels{/name}","releases_url":"https://api.github.com/repos/vanfanel/scummvm/releases{/id}","created_at":"2015-01-10T15:16:55Z","updated_at":"2015-01-10T15:17:18Z","pushed_at":"2015-01-11T14:54:20Z","git_url":"git://github.com/vanfanel/scummvm.git","ssh_url":"git@github.com:vanfanel/scummvm.git","clone_url":"https://github.com/vanfanel/scummvm.git","svn_url":"https://github.com/vanfanel/scummvm","homepage":"http://www.scummvm.org/","size":225394,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scummvm:master","ref":"master","sha":"899cf4813c7e009e1dbee56be8ad10d20650cf10","user":{"login":"scummvm","id":365181,"avatar_url":"https://avatars.githubusercontent.com/u/365181?v=3","gravatar_id":"","url":"https://api.github.com/users/scummvm","html_url":"https://github.com/scummvm","followers_url":"https://api.github.com/users/scummvm/followers","following_url":"https://api.github.com/users/scummvm/following{/other_user}","gists_url":"https://api.github.com/users/scummvm/gists{/gist_id}","starred_url":"https://api.github.com/users/scummvm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scummvm/subscriptions","organizations_url":"https://api.github.com/users/scummvm/orgs","repos_url":"https://api.github.com/users/scummvm/repos","events_url":"https://api.github.com/users/scummvm/events{/privacy}","received_events_url":"https://api.github.com/users/scummvm/received_events","type":"Organization","site_admin":false},"repo":{"id":1358940,"name":"scummvm","full_name":"scummvm/scummvm","owner":{"login":"scummvm","id":365181,"avatar_url":"https://avatars.githubusercontent.com/u/365181?v=3","gravatar_id":"","url":"https://api.github.com/users/scummvm","html_url":"https://github.com/scummvm","followers_url":"https://api.github.com/users/scummvm/followers","following_url":"https://api.github.com/users/scummvm/following{/other_user}","gists_url":"https://api.github.com/users/scummvm/gists{/gist_id}","starred_url":"https://api.github.com/users/scummvm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scummvm/subscriptions","organizations_url":"https://api.github.com/users/scummvm/orgs","repos_url":"https://api.github.com/users/scummvm/repos","events_url":"https://api.github.com/users/scummvm/events{/privacy}","received_events_url":"https://api.github.com/users/scummvm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scummvm/scummvm","description":"ScummVM main repository","fork":false,"url":"https://api.github.com/repos/scummvm/scummvm","forks_url":"https://api.github.com/repos/scummvm/scummvm/forks","keys_url":"https://api.github.com/repos/scummvm/scummvm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scummvm/scummvm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scummvm/scummvm/teams","hooks_url":"https://api.github.com/repos/scummvm/scummvm/hooks","issue_events_url":"https://api.github.com/repos/scummvm/scummvm/issues/events{/number}","events_url":"https://api.github.com/repos/scummvm/scummvm/events","assignees_url":"https://api.github.com/repos/scummvm/scummvm/assignees{/user}","branches_url":"https://api.github.com/repos/scummvm/scummvm/branches{/branch}","tags_url":"https://api.github.com/repos/scummvm/scummvm/tags","blobs_url":"https://api.github.com/repos/scummvm/scummvm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scummvm/scummvm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scummvm/scummvm/git/refs{/sha}","trees_url":"https://api.github.com/repos/scummvm/scummvm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scummvm/scummvm/statuses/{sha}","languages_url":"https://api.github.com/repos/scummvm/scummvm/languages","stargazers_url":"https://api.github.com/repos/scummvm/scummvm/stargazers","contributors_url":"https://api.github.com/repos/scummvm/scummvm/contributors","subscribers_url":"https://api.github.com/repos/scummvm/scummvm/subscribers","subscription_url":"https://api.github.com/repos/scummvm/scummvm/subscription","commits_url":"https://api.github.com/repos/scummvm/scummvm/commits{/sha}","git_commits_url":"https://api.github.com/repos/scummvm/scummvm/git/commits{/sha}","comments_url":"https://api.github.com/repos/scummvm/scummvm/comments{/number}","issue_comment_url":"https://api.github.com/repos/scummvm/scummvm/issues/comments/{number}","contents_url":"https://api.github.com/repos/scummvm/scummvm/contents/{+path}","compare_url":"https://api.github.com/repos/scummvm/scummvm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scummvm/scummvm/merges","archive_url":"https://api.github.com/repos/scummvm/scummvm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scummvm/scummvm/downloads","issues_url":"https://api.github.com/repos/scummvm/scummvm/issues{/number}","pulls_url":"https://api.github.com/repos/scummvm/scummvm/pulls{/number}","milestones_url":"https://api.github.com/repos/scummvm/scummvm/milestones{/number}","notifications_url":"https://api.github.com/repos/scummvm/scummvm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scummvm/scummvm/labels{/name}","releases_url":"https://api.github.com/repos/scummvm/scummvm/releases{/id}","created_at":"2011-02-12T15:50:57Z","updated_at":"2015-01-11T20:12:01Z","pushed_at":"2015-01-11T20:12:01Z","git_url":"git://github.com/scummvm/scummvm.git","ssh_url":"git@github.com:scummvm/scummvm.git","clone_url":"https://github.com/scummvm/scummvm.git","svn_url":"https://github.com/scummvm/scummvm","homepage":"http://www.scummvm.org/","size":225394,"stargazers_count":457,"watchers_count":457,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":225,"mirror_url":null,"open_issues_count":22,"forks":225,"open_issues":22,"watchers":457,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scummvm/scummvm/pulls/562"},"html":{"href":"https://github.com/scummvm/scummvm/pull/562"},"issue":{"href":"https://api.github.com/repos/scummvm/scummvm/issues/562"},"comments":{"href":"https://api.github.com/repos/scummvm/scummvm/issues/562/comments"},"review_comments":{"href":"https://api.github.com/repos/scummvm/scummvm/pulls/562/comments"},"review_comment":{"href":"https://api.github.com/repos/scummvm/scummvm/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/scummvm/scummvm/pulls/562/commits"},"statuses":{"href":"https://api.github.com/repos/scummvm/scummvm/statuses/13185d38c00980554dc32daed7b9e29de473ee52"}}}}