)]}'
{
  "log": [
    {
      "commit": "981ccfbbfd737e2bdf0cedec0089975f91fd4e0a",
      "tree": "1625a7d2cc71a5f8e86f0dc575069e030c8ac0e3",
      "parents": [
        "aa396b9610f339cf280159144fbea47506f060e7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Dec 08 15:43:51 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:46 2009 +0800"
      },
      "message": "Implement Matrix Palette extension.\n\nAdds support for formerly-unimplemented methods:\n\nglCurrentPaletteMatrixOES\nglLoadPaletteFromModelViewMatrixOES\nglMatrixIndexPointerOES\nglWeightPointerOES\n\nThe bulk of the changes are related to implementing the two PointerOES\nmethods, which are implemented pretty much the same way as the existing\nPointer methods were implemented.\n\nThis change also changes the way glPointSizePointerOES is implemented,\nmaking it act like all the other Pointer methods. (Previously it was\nnot handling non-direct-buffer arguments correctly.)\n\nFixes bug 2308625 \"Support matrix palette skinning\nin JSR239 and related APIs\"\n\nAlso updated GLLogWraper to fix two bugs in GLLogWrapper that were\ndiscovered while testing matrix palette skinning support:\n\na) Handle trying to print the contents of null-but-enabled buffers.\n(It\u0027s not legal to draw with null-but-enabled buffers, and\nin fact some OpenGL drivers will crash if you try to render in this\nstate, but there\u0027s no reason the GLLogWrapper should crash while trying\nto debug this situation.\n\nb) Don\u0027t read off the end of a vertex buffer with non-zero position when\nprinting the entire contents of the vertex buffer. Now we only print from\nthe current position to the end of the buffer.\n"
    },
    {
      "commit": "aa396b9610f339cf280159144fbea47506f060e7",
      "tree": "cde57c6f229bf98c256e6411d87d86eedb8ef1fa",
      "parents": [
        "0dce2dd26699e4dbfba8b8c5ea01f7fd03369e02"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 27 19:59:05 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:42 2009 +0800"
      },
      "message": "Unhide the Android OpenGL ES 2.0 API\n\nAdd a Matrix.setLookAtM method for computing a look-at viewing transform.\n\nChange GLU.lookAt to use Matrix.setLook.\n"
    },
    {
      "commit": "0dce2dd26699e4dbfba8b8c5ea01f7fd03369e02",
      "tree": "248e09a9cd55f92b9b97110850320af9ed6566aa",
      "parents": [
        "3608891b83af9fbd1af9b9a411f2a90e52353ff8"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 19:08:52 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:34 2009 +0800"
      },
      "message": "Extend GLSurfaceView to make it easy to create an OpenGL ES 2.0 context\n\nProvide a new method, GLSurfaceView.setEGLContextClientVersion. Clients\ncall this method to define which level of OpenGL ES support they want.\n\nThis method only affects the default behavior of GLSurfaceView. If clients\nhave supplied their own EGLContextFactory or EGLConfigChooser then they\nare on their own if they want to create an OpenGL ES 2.0 context.\n\nThis API is currently hidden.\n\nUpdate the gl2_java test to use this new API.\n\nUpdate the gl2_java test\u0027s AndroidManifest.xml file to indicate that\nit requires OpenGL ES 2.0.\n"
    },
    {
      "commit": "3608891b83af9fbd1af9b9a411f2a90e52353ff8",
      "tree": "bde3e48044987e890ddeaf490e07c62cb788588f",
      "parents": [
        "9fbb534ebddb2ae43e862a3bc0ff5859358b194b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 16:34:55 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:33 2009 +0800"
      },
      "message": "Add a Java API for OpenGL ES 2.0.\n\nCurrently this API is hidden.\n\nAdd a test program.\n"
    },
    {
      "commit": "9bb4dbae91df0971038e955ef49c5d9a64d4a428",
      "tree": "fd26f392ac4891ae5ce880c161cd0b9e084ed927",
      "parents": [
        "d682ab72c5b7781109b0f30ac16202441fb925d6"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:15:07 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:15:07 2009 +0800"
      },
      "message": "Improve error message thrown when eglCreateContext fails.\n"
    },
    {
      "commit": "d682ab72c5b7781109b0f30ac16202441fb925d6",
      "tree": "a474f497ea34b3a20ed3da1f1cef30d67fd743f8",
      "parents": [
        "39b082356851e29ba7a0af981eaa27d3b08a387b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:07:31 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:07:31 2009 +0800"
      },
      "message": "Improve error reporting by always returning the public\nEGL10.EGL_NO_XXX objects for displays, surfaces, and contexts.\n\nThis allows clients to compare the returned object against\nthe public EGL10.EGL_NO_XXX object using a simple \u003d\u003d operation.\n\nThis fixes bug 2303947 \"Java layer EGL API makes it difficult\nto tell when certain methods have failed\"\n"
    },
    {
      "commit": "51438c18f5af96c16ac33a85b3ebaacf200b7b5e",
      "tree": "370d6bcb2e20899100ae4f1ea70976bcb2b6c322",
      "parents": [
        "a45e925108f6c9d35d9e7b5e8def9aba49ee0dba"
      ],
      "author": {
        "name": "Li Wenhao",
        "email": "gliwenhao@gmail.com",
        "time": "Wed Jul 29 14:45:08 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 02 21:15:33 2009 -0800"
      },
      "message": "the vertex index should be \"first + i\".\n"
    },
    {
      "commit": "9c0b39c47efade5ee2303a8f8ffbd9cf87c2c841",
      "tree": "22f00f90c4efac18e962bdeba071fd79227d259d",
      "parents": [
        "c61b0de83bc0c6f7bb1d10bcfc02ab29f3a49caa",
        "ca00dee21425882619aef4ecbe3e0d08de0544e5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 13:48:54 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 25 13:48:54 2009 -0800"
      },
      "message": "am ca00dee2: Merge change I5aa3adcf into eclair\n\nMerge commit \u0027ca00dee21425882619aef4ecbe3e0d08de0544e5\u0027 into eclair-mr2\n\n* commit \u0027ca00dee21425882619aef4ecbe3e0d08de0544e5\u0027:\n  Improve the exception message text by including eglGetError().\n"
    },
    {
      "commit": "5aa3adcf304ec3767b3c22128acb23240d8d0bab",
      "tree": "2ceb679ff56e9964bacc79c3e29c744f58a131c0",
      "parents": [
        "55896f3c5121e73e3f657ed14e7ee8937ad72449"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 13:56:21 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 13:56:21 2009 +0800"
      },
      "message": "Improve the exception message text by including eglGetError().\n\nShould help us track down the cause of bug 2285187\n"
    },
    {
      "commit": "a822f02bb9c7f5bf2e3fa3cb63effc391be158c5",
      "tree": "1e966e8efcebb346e51c027a7d0d4b25e29f178b",
      "parents": [
        "6e045e0aa1b465e9e989d3058a5d2fa13dcf026b",
        "dc49acb0289cab2a6e0d73e66b69516605893e28"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 17 11:39:54 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 17 11:39:54 2009 +0800"
      },
      "message": "resolved conflicts for merge of dc49acb0 to eclair-mr2\n"
    },
    {
      "commit": "a08d46d8aaabb53eef4d5dc47272565d50f23c19",
      "tree": "f2f1bb9ca023c1b40241472d40347e0cee3eecb6",
      "parents": [
        "7c1c46000be136ffda36283fdc93bfe3cba72601"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Nov 16 18:48:26 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Nov 16 18:48:26 2009 +0800"
      },
      "message": "More GLSurfaceView cleanup.\n\n+ The mDone flag is now a pair of flags: mShouldExit and mExited. The\nproblem with mDone was that it meant \"had been asked to exit\", but was\nbeing used by some observers as \"had exited\". Using two variables means\nthat observers can observe either \"had been asked to exit\" or \"had exited\",\nas they prefer.\n\n+ Simplyify where we check for mShouldExit. We now check for it at the\n  top of our innermost guardedRun while loop.\n\n+ requestExitAndWait now waits for mExited to be set to true to know\nthat a thread has exited, rather than using join(). This means we can use\nwait() for the check, which releases the sGLThreadManager\nmonitor, avoiding a potential deadlock.\n\n+ move the event queue into the sGLThreadManager monitor. This avoids\nhaving to acquire two locks in order to enque/deque events, which also\navoids the potential for lock ordering deadlocks.\n\n+ Simplify the event dequeueing code. We now deque one event each time\nthrough the main GLSurfaceView loop. Events still have priority over\nrendering, so there isn\u0027t any semantic change, it just cleans up the code.\n\n+ Avoid trying to acquire an egl Surface if we\u0027re paused.\n\n+ To simplify reasoning about the code, call sGLThreadManager.notifyAll()\nin every case where we modify one of the variables that\u0027s protected by\nthe sGLThreadManager monitor. It would be slightly more efficient to only\nnotify when we change variables that could cause a thread to wait(), but\nthen we would have to redo our analysis every time we change any code.\n\n+ Clean up the logic for creating the EGL surface and then calling the\nrenderer\u0027s onSurfaceCreated / onSurfaceChanged methods.\n\n+ Implement work-around for bug 2263168\t\"Need to draw twice after\n  screen rotation...\"\n"
    },
    {
      "commit": "1179efbb3b8856eb8160e2dd67a300a5d64e8e98",
      "tree": "52c7fcf280eb76e4171e833e5084ae1d9437ab24",
      "parents": [
        "6780d8c006c9381919c0ee4de3d2bdc6d7a728d6",
        "ba56915a71cad672baff5594dbb7c9331bf01283"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 11 10:01:46 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 11 10:01:46 2009 +0800"
      },
      "message": "resolved conflicts for merge of ba56915a to eclair-mr2\n"
    },
    {
      "commit": "67dcd6c2392caf3ff98f35a3d1ec550d229c167b",
      "tree": "424ee1b424f4fc7c69f4df0ea065c7d3dd365c06",
      "parents": [
        "e6ab011b8b8aa6c461e64cabb9b25d890d68edb1"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 18:26:42 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 18:26:42 2009 +0800"
      },
      "message": "Fix multi-lock ordering issues in GLSurfaceView\n\nThere were potential deadlocks between the per-GLThread monitors and the\nGLThreadManager monitor.\n\nTo avoid these deadlocks we now use a single monitor for\nboth the GLThreadManager state and the per-GLThread state.\n\nConverted GLThreadManager\u0027s semaphore into the equivalent\nsynchronized-wait-notifyAll code. This enables us to wait for\neither mDone, or user events, or the EGL surface with a single \"wait()\".\n\nSimplified the logic used to acquire and release the EGL surface. The\nEGL surface is now only requested while the surfaceFlinger surface\nis acquired.\n\nRemoved the \"egl surface stealing\" policy we had recently inserted.\nIt\u0027s not needed now that we reliably quit when requested.\n\nPulled user event processing outside of the  GLThreadManager monitor\nso that we don\u0027t call any potentially-long-running code while\ninside the monitor.\n\nThis should help with bug 2228262.\n"
    },
    {
      "commit": "8da3ac92a6a6247ef06de4d4b684f8635d8fc003",
      "tree": "6384e0aecbba872ab451d47528792cbe9a07fb3d",
      "parents": [
        "26c91fa694464c79de39988f9f42cee375ff0a14",
        "3f857b78fc68e5d700139bdc6078c5333b62a9bc"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 08:04:53 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 08:04:53 2009 +0800"
      },
      "message": "resolved conflicts for merge of 3f857b78 to eclair-mr2\n"
    },
    {
      "commit": "32d416518473f3bf5323d660e5910ca5633ffed6",
      "tree": "91f2387a92133132b0faf49989245c5ca5709291",
      "parents": [
        "a44249500f6c1c7a75b5c420fa2e81c2aa317a10"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun Nov 08 10:55:56 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun Nov 08 10:55:56 2009 +0800"
      },
      "message": "Allow a GLThread to release and reacquire the EGL Surface as needed.\n\nWe currently only allow one GLThread to have an active EGL Surface at a\ntime.(This may be lifted in the future, when EGL and GL are reentrant.)\n\nPrior to this change we would enforce this rule by having older GLThreads\nquit when a new GLThread started. That had the drawback of leaving the\nolder GLSurfaceViews in a zombie state -- their GLThreads would be\ngone.\n\nWe now enforce this rule by just releasing and reacquiring the EGL surface\ncontext as needed.\n\nSpecific changes to the code:\n\ncreated private helper methods - startEgl and stopEgl to help manage\nstarting and stopping EGL.\n\nMove the calls to sGLThreadManager start and end from the outermost run\nmethod into the startEgl / stopEgl methods.\n\nReworked the wait loop to handle starting and stopping EGL as needed.\n\nneedToWait() gets simpler -- just looks at current status.\n\nsGLThreadManager.shouldQuit was replaced by shouldHaveEgl.\n\n\nThis is another step in fixing bug 2228262.\n"
    },
    {
      "commit": "a3a351e5d164d0c8b461ae7af86edc0227654a76",
      "tree": "a321acc2bd61f1ee164e4db6f01302155d719b47",
      "parents": [
        "f6ff2be323812b5525a0755d194b2fc751ba5968",
        "4e3fadd0c99d2774709a067e017d8fd622440f0e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 16:35:19 2009 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 16:35:19 2009 -0800"
      },
      "message": "resolved conflicts for merge of 4e3fadd0 to eclair-mr2\n"
    },
    {
      "commit": "a44249500f6c1c7a75b5c420fa2e81c2aa317a10",
      "tree": "7a793f8e3e1cb0abc67246af04c195dbbcd6d2b8",
      "parents": [
        "8d51f7101d2427953dbff9b4b8f8c9fdc0dc4a91"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Nov 07 07:49:15 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Nov 07 07:49:15 2009 +0800"
      },
      "message": "Fix stupid bug in GLThreadManager implementation.\n\nThe code intended to copy the old value of a field, before the\nfield was updated. However, what the code was actually doing was\ncopying the new value of the field, after the field was updated.\n\nThe fix was to move the copy to before the update.\n\nThis is work towards fixing bug 2228262\n"
    },
    {
      "commit": "79447b2087c8c820d742185dda7305101f9656f0",
      "tree": "9244ad5c29a8a8d1789d7fd94647af3c86b56260",
      "parents": [
        "892574f5f91b834f70ace880301db61f60d58362",
        "84872738f291faf25ae07235cde382d38c796567"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 00:13:38 2009 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 00:13:38 2009 -0800"
      },
      "message": "resolved conflicts for merge of 84872738 to eclair-mr2\n"
    },
    {
      "commit": "8b2c9c9ecb08d25244fa97fb42c2c315ae3cf03d",
      "tree": "0267829c2e976a2b97f3eefa4a03ee47f9f06f6c",
      "parents": [
        "bfa68abc955ed1fe6cf6d98e42f344a8d623fab7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 10:21:46 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 10:21:46 2009 +0800"
      },
      "message": "Improve GLSurfaceView to avoid deadlocks and race conditions.\n\nThis is work towards fixing bug 2228262\n\nSpecific issues fixed by this change:\n\n+ GLThread names now include the thread id, making it easier to tell one\nGLThread from another.\n\n+ A private final static boolean LOG_THREADS can be set to true at compile\ntime to print out thread-related trace information, helpful for debugging\nGLSurfaceView behavior. This static defaults to \"false\".\n\n+ Changed calls to \"notify\" to \"notifyAll\" to make the code more\nrobust in case more than two threads are blocked on the same monitor.\n\n+ Add a GLThreadManager to help manage the transition to\na new GLThread. Currently only one GLThread can be active in an address\nspace. When the second thread starts up, the GLThreadManager helps the old\nGLThread to shut down,\n\n+ Make sure we stop waiting for dead GLThreads. This is done by adding\nchecks for a variable mDone being true to our monitor wait loops. And\nwe use a \"finally\" clause at the end of GLThread.run() method to set mDone\nand notifyAll any wait loops.\n"
    },
    {
      "commit": "28023911a4b572f0ca640e7a3e3f9a0dd6f535e9",
      "tree": "51676df2e0efb856b7b300e47fff9a8f5fbb9a47",
      "parents": [
        "3b7a1e6d70fda4ce834034930847fe2cc75de515"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 19:52:06 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 19:52:06 2009 -0700"
      },
      "message": "Add additional error checking of EGL function calls.\n"
    },
    {
      "commit": "c52ba78cab001ff68b4823f4769c129b8acfddee",
      "tree": "9036181a31e926c067bb58f8d7c312bd0776a3d7",
      "parents": [
        "69e21f5f6e0d04539cd92848ea009dd615d88c2c"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 17:58:47 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 17:58:47 2009 -0700"
      },
      "message": "Allow multiple OpenGL contexts on systems that support them.\n\nPreviously we always restricted the number of OpenGL contexts to 1.\n"
    },
    {
      "commit": "2e26fc08aa1939c19e939d983bd608cdec050024",
      "tree": "7f3caddcb9c5a5e7e8c4e24177e86bd1cee3e98b",
      "parents": [
        "7756cbeef475127ed56bfeabecb3c291366a952f"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Sep 25 19:06:30 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Sep 25 19:06:30 2009 -0700"
      },
      "message": "Check for failure to create EGL surfaces and contexts.\n"
    },
    {
      "commit": "d40dfbbbff81219258ca36b762a89ff503154345",
      "tree": "98fc5a33661c54f4173b3cc1e68174a5b1058ef1",
      "parents": [
        "f22fc124ff7974d0b6380199f7d53e66bb7feb29"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 14:10:17 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 14:10:17 2009 -0700"
      },
      "message": "Fix broken Javadoc link for GLSurfaceView.EGLWindowSurfaceFactory.\n"
    },
    {
      "commit": "82cbaab450d3c5d9f3d52c49881212f250d7cd97",
      "tree": "56d65701be8b2e4710a03bdafcde925318fd0bf6",
      "parents": [
        "4cc86e1ae80eb1938500fe5fa06bbdf8b4b7b50d"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 11:55:04 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 11:55:04 2009 -0700"
      },
      "message": "Publish minor additions to GLSurfaceView API.\n\nClients can now modify the way that the EGL context and the EGL window\nsurface are created and destroyed.\n"
    },
    {
      "commit": "a8fecb87c5eaaefc9ca6272e3b59ef88d293dd6d",
      "tree": "7652f77751c0f9aa13629288c325e82d272e65cf",
      "parents": [
        "63147705bc2893d6ad43270e04beb9ee01e2ad53"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Sep 23 14:48:07 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Sep 23 14:48:07 2009 -0700"
      },
      "message": "Create samples showing how to call OpenGL from JNI libraries.\n"
    },
    {
      "commit": "15e1c6dc7a778590068b1cad55beea2bc6159509",
      "tree": "c35207d5fd479c56b89fa9b4388393bba092d70d",
      "parents": [
        "1bd888ba2e0976a179258cfa65ef07be31602a0a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 19:19:25 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 19:19:25 2009 -0700"
      },
      "message": "Allow GLSurfaceView clients to customize EGL Surfaces and Contexts.\n\nThis API is hidden for now, will expose once it\u0027s been tested more.\n"
    },
    {
      "commit": "1bd888ba2e0976a179258cfa65ef07be31602a0a",
      "tree": "5d1d9ef76fd5f1c29e029f1ead80e0116548ade1",
      "parents": [
        "a953ed4bc08cf5fc98f17a399adbd8afdd8293d5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 15:59:17 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 15:59:17 2009 -0700"
      },
      "message": "Fix GLSurfaceView to sync surfaceDestroyed with GL rendering thread\n\nUntil now we had a race condition where the GL rendering thread could\ncontinue rendering a frame after we have returned from the\nSurfaceHolder.Callback.surfaceDestroyed notification.\n"
    },
    {
      "commit": "82fd4fce16b9bbde25d044acc86ddf7306ebdd10",
      "tree": "5d831d3f987bb6d1d62d8bca692ce4c5218c6432",
      "parents": [
        "dd8cb62bdf48ec0096c0ed665996a25320d477e2"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 20 19:09:34 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 20 19:09:34 2009 -0700"
      },
      "message": "fix a bug in ComponentSizeChooser where it could pick a software EGLConfig instead of a better h/w one.\n\nWe now just try to honor the stencil / depth buffer \"at least\", while doing a \"shortest distance\" on the colors.\n"
    },
    {
      "commit": "317a6280cc109e873646e4652be1582d870eedfd",
      "tree": "3b6d41d465282970f498e172b81ed0ee83e3183e",
      "parents": [
        "81655243a6a373cfde1e689970eeb62af19622d1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 13 17:29:02 2009 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Aug 13 18:19:32 2009 -0700"
      },
      "message": "Surface::GPU and Surface::HARDWARE are now deprecated; they will be set automatically if needed.\n\nthis also ripples into the window manager API by making some constant there deprecated as well.\n"
    },
    {
      "commit": "7e263332e0c68f67868cb3245bf42f41e847d816",
      "tree": "52b0cff91b2cad4684c1367f8ca874bc1be7df68",
      "parents": [
        "ef6b66cbbbe7ae8ee0450cbbaae4194b069679a1"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 22 15:22:59 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 22 15:22:59 2009 -0700"
      },
      "message": "Remove recently-added android.opengl.Version API\n\nThere\u0027s another already-existing way of obtaining this information,\nthe ConfigurationInfo.reqGlEsVersion field returned from\nActivityManager.getDeviceConfigurationInfo.\n"
    },
    {
      "commit": "1baf11b116d4094ea1f7149bbf1348d6290a637e",
      "tree": "06b3f68a8945c71efb5774b15ae309ac75c0447a",
      "parents": [
        "11b822d2a91ea17c34c0cb1c11e80a9a30d72864"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 22 12:59:49 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 22 12:59:49 2009 -0700"
      },
      "message": "Add a public API that reports the supported OpenGLES API level.\n"
    },
    {
      "commit": "91a27ae2fec23b420244258636d2370117e86f5e",
      "tree": "5b2b1b47724a16dfb5b0b3f1850ff8e6c5606808",
      "parents": [
        "7d143b89b714e077f8fd7dbac80945c76bfd9814"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jun 15 21:03:24 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jun 15 21:03:24 2009 -0700"
      },
      "message": "Allow pre-Donut apps to use indirect Buffers in GL11 Pointer methods.\n\nApps targeting Donut and newer will throw an exception.\n\nWe use a heuristic to determine whether an app is pre-Donut or not:\nWe take the address space\u0027s __progname, and use that as the application\u0027s\npackage name. For simple applications this is correct.\n"
    },
    {
      "commit": "e20ea783a12f1031482c3aa01938efe39dcbf0a2",
      "tree": "b32727a25f4cd4ca8c6ced40a9feb4ef6a665b9d",
      "parents": [
        "538bcd702c0053772245dfbb634c266959cf6af9"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 07 18:28:29 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 07 18:28:29 2009 -0700"
      },
      "message": "Require native-order direct buffers for glXXXPointer APIs.\n\nThis was always a documented restriction, but was not enforced by the runtime until now.\n\nUntil now, if you passed in some other kind of buffer, it would sometimes work, and\nsometimes fail. The failures happened when the Java VM moved the buffer data while\nOpenGL was still holding a pointer to it.\n\nNow we throw an exception rather than leaving the system in a potentially bad state.\n"
    },
    {
      "commit": "a379585e6e3ff41db6d71a5cd0a0403931bc525d",
      "tree": "38728985bfdc9da616259cfc4905587da798d6c6",
      "parents": [
        "7fc4b281750be2442a327e7aa9fb03c44096caf3"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Apr 24 10:35:11 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Apr 24 13:07:17 2009 -0700"
      },
      "message": "Enable static Java APIs for OpenGL ES 1.1 extensions.\n\nThis is just plumbing. The Java APIs existed already, but there were no C APIs to hook the Java APIs\nup to. Now there are C APIs, so we can call them.\n\nOf course, whether or not the C APIs actually work when you call them depend upon the\ncapabilities of the active OpenGL driver, which must be checked at run time.\n\nAlso, while we\u0027re here, make the glGetString method static. It was always supposed to be static,\nbut was accidentally implemented as non-static, because the code was copied from the non-static\nOpenGL ES classes.\n"
    },
    {
      "commit": "27f8002e591b5c579f75b2580183b5d1c4219cd4",
      "tree": "23fafecbd64e66b7a866510c8163d34c3e506df8",
      "parents": [
        "f5bfda1fcecc5d8553eab16182e2f6579214ede2"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Apr 15 19:13:17 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Apr 16 15:20:55 2009 -0700"
      },
      "message": "Add an Android-specific static OpenGL ES 1.1 Java API.\n\nThis change adds four new public classes that expose a static OpenGL ES 1.1 API:\n\n\tandroid.opengl.GLES10\n\tandroid.opengl.GLES10Ext\n\tandroid.opengl.GLES11\n\tandroid.opengl.GLES11Ext\n\nBenefits:\n\n + The static API is slightly faster (1% to 4%) than the existing Interface based JSR239 API.\n + The static API is similar to the C API, which should make it easier to import C-based\n   example code.\n + The static API provides a clear path for adding new OpenGL ES 1.1 extensions\n   and OpenGL ES 2.0 APIs, neither of which currently have a JSR standard.\n\nExample:\n\n  import static android.opengl.GLES10.*;\n\n  ...\n\n  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\nNote that it is possible to mix-and-match calls to both the static and JSR239 APIs.\nThis works because neither API maintains state. They both call through to the same underlying\nC OpenGL ES APIs.\n\nImplementation details:\n\nThis change enhances the \"glgen\" \"gen\" script to generate both the original JSR239 and\nnew static OpenGL ES APIs. The contents of the generated JSR239 classes remained the same as before,\nso there is no need to check in new versions of the generated JSR239 classes.\n\nAs part of this work the gen script was updated to be somewhat more robust, and to\nwork with git instead of perforce. The script prints out commands to git add the generated files,\nbut leaves it up to the script runner to actually execute those commands.\n"
    },
    {
      "commit": "b1970201ecedde4cee25ded12efd5b09e976a6f1",
      "tree": "f7e716487336ede0ded80b11fb9f96f47f916a4a",
      "parents": [
        "23cda69aaa82718ad9cd29220b5b11b0de205493"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "",
        "time": "Thu Apr 09 15:00:37 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Apr 09 15:00:37 2009 -0700"
      },
      "message": "AI 145526: am: CL 145249 Correct misspelling of constant RENDERMODE_CONTUOUSLY --\u003e RENDERMODE_CONTINUOUSLY\n  Original author: jackpal\n  Merged from: //branches/cupcake/...\n\nAutomated import of CL 145526\n"
    },
    {
      "commit": "23cda69aaa82718ad9cd29220b5b11b0de205493",
      "tree": "ede5b253699a13671d1da87ccdfb8ecbad0859a5",
      "parents": [
        "2dcaf4ee664528c39cddbe945da4983f196f4783"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "",
        "time": "Thu Apr 09 14:51:25 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Apr 09 14:51:25 2009 -0700"
      },
      "message": "AI 145523: am: CL 145244 Fully document GLSurfaceView and related classes.\n  Original author: jackpal\n  Merged from: //branches/cupcake/...\n\nAutomated import of CL 145523\n"
    },
    {
      "commit": "b8488808899d27ea3d2c9d0091745012e13e3554",
      "tree": "c854a718c021e224aa26e87176822acc7a260f72",
      "parents": [
        "52fc2180fa535d12838498e877b6d7557c4024dd"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "",
        "time": "Wed Mar 25 15:30:56 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Mar 25 15:30:56 2009 -0700"
      },
      "message": "Automated import from //branches/donutburger/...@142687,142687\n"
    },
    {
      "commit": "c2310f32b0a1373012fd4a2db8cebdb46507b901",
      "tree": "2952c820fe9ec235e9517570ea6786d48d288455",
      "parents": [
        "4c7533cfc81a0dda4c25355e86558199accab3ea"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "",
        "time": "Tue Mar 24 22:49:06 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 24 22:49:06 2009 -0700"
      },
      "message": "Automated import from //branches/donutburger/...@142486,142486\n"
    },
    {
      "commit": "0577b26b7fc0a0dba4445c7965e05e98d4253211",
      "tree": "2506b310662563ee9d48001e140c631f8b671940",
      "parents": [
        "b059eb3587b7c0ecf8230e3e0b19efff0401b645"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "",
        "time": "Tue Mar 24 21:01:35 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 24 21:01:35 2009 -0700"
      },
      "message": "Automated import from //branches/donutburger/...@141859,141859\n"
    },
    {
      "commit": "9066cfe9886ac131c34d59ed0e2d287b0e3c0087",
      "tree": "d88beb88001f2482911e3d28e43833b50e4b4e97",
      "parents": [
        "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "076357b8567458d4b6dfdcf839ef751634cd2bfb"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "076357b8567458d4b6dfdcf839ef751634cd2bfb",
      "tree": "efbb2fd6f1dc67d2d606382fc3b82983e7cb2e1f",
      "parents": [
        "3dec7d563a2f3e1eb967ce2054a00b6620e3558c"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 14:04:24 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 14:04:24 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@132589\n"
    },
    {
      "commit": "3dec7d563a2f3e1eb967ce2054a00b6620e3558c",
      "tree": "aa3b0365c47cb3c1607c0dc76c8d32b4046fc287",
      "parents": [
        "15ab3eae2ec3d73b3e8aa60b33ae41445bf83f4b"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Mon Mar 02 22:54:33 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Mon Mar 02 22:54:33 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@137055\n"
    },
    {
      "commit": "f013e1afd1e68af5e3b868c26a653bbfb39538f8",
      "tree": "7ad6c8fd9c7b55f4b4017171dec1cb760bbd26bf",
      "parents": [
        "e70cfafe580c6f2994c4827cd8a534aabf3eb05c"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "message": "Code drop from //branches/cupcake/...@124589\n"
    },
    {
      "commit": "54b6cfa9a9e5b861a9930af873580d6dc20f773c",
      "tree": "35051494d2af230dce54d6b31c6af8fc24091316",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
