{"id":200,"date":"2012-07-05T00:45:42","date_gmt":"2012-07-05T04:45:42","guid":{"rendered":"http:\/\/jeffq.com\/blog\/?p=200"},"modified":"2012-07-05T17:30:44","modified_gmt":"2012-07-05T21:30:44","slug":"snes4nacl-snes-emulation-in-the-browser","status":"publish","type":"post","link":"http:\/\/jeffq.com\/blog\/snes4nacl-snes-emulation-in-the-browser\/","title":{"rendered":"snes4nacl &#8212; SNES emulation in the browser"},"content":{"rendered":"<p>I was at <a href=\"https:\/\/developers.google.com\/events\/io\/\">Google I\/O<\/a>\u00a0in San Francisco last week and went to a great talk about <a href=\"https:\/\/developers.google.com\/native-client\/\">Google Native Client<\/a>, which is a new technology that allows direct execution of x86 code in the browser via some clever sandboxing. While in the talk about Gaming in the Cloud I got the idea of porting a SNES emulator to Native Client and started working on it right then and there. Well, here&#8217;s the result \ud83d\ude42<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-201\" title=\"snes4nacl\" src=\"http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/lttp.png\" alt=\"\" width=\"587\" height=\"564\" srcset=\"http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/lttp.png 587w, http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/lttp-300x288.png 300w, http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/lttp-312x300.png 312w\" sizes=\"(max-width: 587px) 100vw, 587px\" \/><br \/>\n<!--more--><br \/>\nYou can of course <a href=\"http:\/\/jeffq.com\/snes4naclpost\/snes4nacl.html\">try it out here<\/a>. This requires Chrome 19+, and you will need to enable Native Client by going to about:flags and clicking the &#8220;Enable&#8221; link under Native Client and restarting your browser. This is because currently only Native Client applications published by the Chrome Web Store can run by default.<\/p>\n<figure id=\"attachment_205\" aria-describedby=\"caption-attachment-205\" style=\"width: 689px\" class=\"wp-caption alignleft\"><a href=\"http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/naclenable.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-205\" title=\"naclenable\" src=\"http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/naclenable.png\" alt=\"\" width=\"689\" height=\"164\" srcset=\"http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/naclenable.png 689w, http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/naclenable-300x71.png 300w, http:\/\/jeffq.com\/blog\/wp-content\/uploads\/2012\/07\/naclenable-500x119.png 500w\" sizes=\"(max-width: 689px) 100vw, 689px\" \/><\/a><figcaption id=\"caption-attachment-205\" class=\"wp-caption-text\">Clicking here makes your wildest dreams come true<\/figcaption><\/figure>\n<p>snes4nacl is based on Snes9x, a popular open source SNES emulator. It uses OpenGL ES 2 via the Pepper API for rendering\/full screen goodness. I will be updating this more in the future, including using Pepper&#8217;s game controller API and making regular saves\/save states\u00a0accessible. For now enjoy and check out the <a href=\"http:\/\/code.google.com\/p\/snes4nacl\/\">GPLed source on Google Code<\/a>. If you don&#8217;t have any ROMs, here&#8217;s <a href=\"http:\/\/jeffq.com\/snes4naclpost\/xmas11demo.smc\">a legal homebrew one to check out<\/a>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I was at Google I\/O\u00a0in San Francisco last week and went to a great talk about Google Native Client, which is a new technology that allows direct execution of x86 code in the browser via some clever sandboxing. While in the talk about Gaming in the Cloud I got the idea of porting a SNES [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/posts\/200"}],"collection":[{"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/comments?post=200"}],"version-history":[{"count":9,"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/posts\/200\/revisions"}],"predecessor-version":[{"id":214,"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/posts\/200\/revisions\/214"}],"wp:attachment":[{"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/media?parent=200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/categories?post=200"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/jeffq.com\/blog\/wp-json\/wp\/v2\/tags?post=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}