302 lines
17 KiB
HTML
302 lines
17 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html lang="en-us">
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
|
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
|
||
|
<meta name="theme-color" content="#FF8E03">
|
||
|
<meta property="og:title" content="Citra Progress Report - 2017 P1 · Citra" />
|
||
|
<meta property="og:site_name" content="Citra" />
|
||
|
<meta property="og:url" content="https://citra-emu.org/entry/citra-progress-report-2017-p1/" />
|
||
|
<meta property="og:description" content="In the last quarter, we’ve further improved the speed and accuracy of citra along with supporting more 3DS features, and we are very excited to show what we’ve been working on. It’s a bit hard to believe, but Citra is already three years old, and in these three years we’ve gone from an emulator that could barely run homebrew, to one that can run many commercially available games at playable speeds!" />
|
||
|
<meta name="description" content="In the last quarter, we’ve further improved the speed and accuracy of citra along with supporting more 3DS features, and we are very excited to show what we’ve been working on. It’s a bit hard to believe, but Citra is already three years old, and in these three years we’ve gone from an emulator that could barely run homebrew, to one that can run many commercially available games at playable speeds!" />
|
||
|
<meta property="og:type" content="article" />
|
||
|
<meta property="og:image" content="https://citra-emu.org/images/banners/index.png" />
|
||
|
<meta property="og:article:published_time" content="2017-05-03T23:20:00-04:00" />
|
||
|
<meta property="og:article:tag" content="progress-report" />
|
||
|
|
||
|
|
||
|
<link rel="icon" href="https://citra-emu.org/favicon.ico" />
|
||
|
<link rel="shortcut icon" href="https://citra-emu.org/favicon.ico" type="image/x-icon" />
|
||
|
<link rel="canonical" href="https://citra-emu.org/entry/citra-progress-report-2017-p1/">
|
||
|
|
||
|
|
||
|
|
||
|
<title>Citra Progress Report - 2017 P1 - Citra</title>
|
||
|
<link href="https://fonts.googleapis.com/css?family=Ubuntu|Dosis" rel="stylesheet">
|
||
|
|
||
|
<link rel="stylesheet" href="https://citra-emu.org/scss/style.min.css" />
|
||
|
|
||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"
|
||
|
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
|
||
|
|
||
|
|
||
|
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
||
|
<script>
|
||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||
|
|
||
|
ga('create', 'UA-73966905-1', 'auto');
|
||
|
ga('send', 'pageview');
|
||
|
</script>
|
||
|
|
||
|
</head>
|
||
|
|
||
|
<body>
|
||
|
<nav class="navbar navbar-default navbar-wrapper navbar-fixed-top">
|
||
|
<div class="container">
|
||
|
<div class="navbar-header">
|
||
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
|
||
|
aria-expanded="false" aria-controls="navbar">
|
||
|
<span class="sr-only">Toggle navigation</span>
|
||
|
<span class="icon-bar"></span>
|
||
|
<span class="icon-bar"></span>
|
||
|
<span class="icon-bar"></span>
|
||
|
</button>
|
||
|
<a class="navbar-brand" href="/"> </a>
|
||
|
</div>
|
||
|
|
||
|
<div id="navbar" class="navbar-collapse collapse">
|
||
|
<ul class="nav navbar-nav">
|
||
|
<li class="index-1 first"><a href="/" title="Blog Posts">Blog</a></li>
|
||
|
<li class="index-2"><a href="/download/" title="Download Citra">Download</a></li>
|
||
|
<li class="index-3"><a href="/help/" title="Help">Help</a></li>
|
||
|
<li class="index-4"><a href="/wiki/faq/" title="Frequently Asked Questions">FAQ</a></li>
|
||
|
<li class="index-5"><a href="/game/" title="Game Compatibility">Compatibility</a></li>
|
||
|
<li class="index-6"><a href="/wiki/home/" title="Wiki Homepage">Wiki</a></li>
|
||
|
|
||
|
<li class="index-7 dropdown">
|
||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"
|
||
|
role="button" aria-haspopup="true" aria-expanded="false">
|
||
|
Social <span class="caret"></span>
|
||
|
</a>
|
||
|
|
||
|
<ul class="dropdown-menu">
|
||
|
<li class="index-1 first"><a href="/rules/" title="Community Rules">Rules</a></li>
|
||
|
<li class="index-2"><a href="https://community.citra-emu.org/" title="Forums">Community Forums</a></li>
|
||
|
<li class="index-3 last"><a href="/discord/" title="Discord Server">Discord Chat</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
|
||
|
<li class="index-8 dropdown">
|
||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"
|
||
|
aria-haspopup="true" aria-expanded="false">
|
||
|
Media <span class="caret"></span>
|
||
|
</a>
|
||
|
|
||
|
<ul class="dropdown-menu">
|
||
|
<li class="index-1 first"><a href="/screenshots/" title="Screenshots">Screenshots</a></li>
|
||
|
<li class="index-2 last"><a href="https://www.youtube.com/channel/UC_dcdgzuapBtAY4ol3x-90Q"
|
||
|
title="YouTube Channel">Videos</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
|
||
|
<li class="index-9 last"><a href="https://www.patreon.com/citraemu" title="Patreon">Patreon</a></li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
</nav>
|
||
|
|
||
|
|
||
|
<div id="mainContainer" class="container" >
|
||
|
<div class="row">
|
||
|
|
||
|
</div>
|
||
|
|
||
|
<div class="row row-fluid">
|
||
|
<div id="content" class="col-xs-12 col-sm-12 col-md-9 col-lg-9 pull-right">
|
||
|
|
||
|
<a href="https://citra-emu.org/entry/citra-progress-report-2017-p1/">
|
||
|
<div class="entry-embed-header">
|
||
|
|
||
|
<div class="entry-embed" style="background: url('https://citra-emu.org/images/banners/citra-progress-report-2017-p1.png')">
|
||
|
<header>
|
||
|
<h1>Citra Progress Report - 2017 P1</h1>
|
||
|
</header>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="entry-meta" style="position: absolute; top: 5px; right: 20px;">
|
||
|
May 03 2017
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="entry-meta" style="position: absolute; top: 45px; right: 20px;">
|
||
|
progress-report
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
</a>
|
||
|
|
||
|
|
||
|
<div class="entry-content">
|
||
|
<p>In the last quarter, we’ve further improved the speed and accuracy of citra along with supporting more 3DS features, and we are very excited to show what we’ve been working on. It’s a bit hard to believe, but Citra is already <a href="https://github.com/citra-emu/citra/commit/7a7917df27cfe5c342bba6c15b57d389fce585bd">three years old</a>, and in these three years we’ve gone from an emulator that could barely run homebrew, to one that can run many commercially available games at playable speeds! It’s all thanks to the hard work of volunteers working to improve the emulator at a pace we could’ve only imagined back in the spring of 2014, and it seems 2017 shows no signs of slowing down.</p>
|
||
|
<h2 id="gamepad-supporthttpsgithubcomcitra-emucitrapull2497-by-wwylelehttpsgithubcomwwylele"><a href="https://github.com/citra-emu/citra/pull/2497">Gamepad Support</a> by <a href="https://github.com/wwylele">wwylele</a></h2>
|
||
|
<p>Perhaps the most requested feature we’ve had on both the forums and Discord server has been gamepad support, and <a href="https://github.com/wwylele">wwylele</a> has delivered! Using SDL as the input backend, Citra now supports a huge variety of gamepads, including Xbox One, PS3, and PS4 controllers. In order to do this, they have completely rewritten the input handling architecture, replacing it with a much cleaner interface that will allow adding different input methods much more easily in the future.</p>
|
||
|
<p>For now, you can only configure your gamepad by manually editing a config file, but <a href="https://github.com/jayfoxrox">JayFoxRox</a> has written a little tool to help edit the config file while we integrate it better into Citra’s UI. You can find the tool in the Citra forums <a href="https://community.citra-emu.org/t/temporary-controller-configurations-for-citra/1061">here</a>.</p>
|
||
|
<h2 id="more-shader-refactoring-part-1httpsgithubcomcitra-emucitrapull2335-part-2httpsgithubcomcitra-emucitrapull2346--part-3httpsgithubcomcitra-emucitrapull2476-by-yurikshttpsgithubcomyuriks"><a href="https://github.com/citra-emu/citra/pull/2335">More Shader Refactoring Part 1</a>, <a href="https://github.com/citra-emu/citra/pull/2346">Part 2</a>, & <a href="https://github.com/citra-emu/citra/pull/2476">Part 3</a> by <a href="https://github.com/yuriks">yuriks</a></h2>
|
||
|
<p>Citra’s video code has grown organically from the start; not much was known about the PICA200 (i.e., the 3DS GPU), so a lot of the backend for it was based on pure guesswork and the team’s past experience with working with emulation. It made a lot of assumptions on how it worked internally, which worked okay some of the time, but it was amazing at the time to even have a 3DS game load, let alone render a scene. So it was left alone.</p>
|
||
|
<p>The entire architecture of the 3DS was largely unknown, so development was done in small seperate bits at a time, and then trying to piece it all together into one cohesive piece of software. But, over time, as new pieces of information were found, the assumptions that were made previously broke. Some assumptions were very large, obvious, and easy to overcome, but a more subtle error that these assumptions created were not even in the design of the GPU, but rather the architecture and organization of the code itself.</p>
|
||
|
|
||
|
|
||
|
<figure >
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<img src="https://citra-emu.org/entry/citra-progress-report-2017-p1/acnl-bridge_hud206ed1eb17baafa8bafde834b391d22_371319_946x0_resize_q90_bgffffff_box_3.jpg" alt="Animal Crossing bridge" />
|
||
|
|
||
|
<figcaption>
|
||
|
<h4>
|
||
|
Shouldn’t there be a bridge here?
|
||
|
</h4>
|
||
|
</figcaption>
|
||
|
|
||
|
</figure>
|
||
|
|
||
|
<p>The video code was very interconnected using this interface, so despite people being aware of this, it was also extremely difficult to move code around and reorganize it, as it could very easily affect unrelated bits of code that depended on it. This was only compounded by the hardware renderer, as it was written much like earlier, slowly adding hardware support bit-by-bit to separate parts of the video code, simply falling back into the software renderer when disabled or not supported.</p>
|
||
|
<p>There aren’t many changes visible on the surface here, but internally this rewrite of the video code that <a href="https://github.com/yuriks">yuriks</a> has been working on for the past few months has laid the foundation that Citra needs to be able to grow and mature in a clean and maintainable way. With these, things like geometry shaders (which many games heavily depend upon), more support for hardware renderers, and more accurate software renderers, could all be added with little to no effort besides the actual implementation.</p>
|
||
|
<h2 id="contributors-of-2017">Contributors of 2017</h2>
|
||
|
<p>Despite only being early May, we’ve already made some great progress forward this year, especially so under the hood. The sheer majority of the work already done is not user-facing by any stretch, but it will definitely make it much easier for developers to contribute additional code and makes Citra significantly easier to maintain, which of course will lead to an even faster development cycle in the future. As always, thank <a href="https://github.com/citra-emu/citra/graphs/contributors?from=2017-01-01&to=2017-04-16&type=c">you all</a> very much for taking the time to work on Citra, and helping it become what is has, and will be.</p>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<div class="entry-written-by">
|
||
|
|
||
|
<a href="https://community.citra-emu.org/u/anodium">
|
||
|
<img src="https://community.citra-emu.org/user_avatar/community.citra-emu.org/anodium/120/485_1.png" class="avatar">
|
||
|
</a>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<p>Written by <a href="https://community.citra-emu.org/u/anodium">anodium</a> on Wednesday May 03, 2017</p>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="entry-comments">
|
||
|
<div id="discourse-comments"></div>
|
||
|
<script type="text/javascript">
|
||
|
DiscourseEmbed = { discourseUrl: 'https://community.citra-emu.org/', topicId: "1602" };
|
||
|
(function() {
|
||
|
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
|
||
|
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
|
||
|
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
|
||
|
})();
|
||
|
</script>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
</div>
|
||
|
<div id="sidebar" class="col-xs-12 col-sm-12 col-md-3 col-lg-3 pull-left">
|
||
|
<div id="advertisement" class = "ad">
|
||
|
<h3>Advertisement</h3>
|
||
|
<ins class="ad adsbygoogle"
|
||
|
style="display:block"
|
||
|
data-ad-client="ca-pub-4126545610079023"
|
||
|
data-ad-slot="4223809695"></ins>
|
||
|
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
|
||
|
</div>
|
||
|
|
||
|
<div class="tagcloud hidden-sm hidden-xs">
|
||
|
<h3>News Tag Cloud</h3>
|
||
|
<ul>
|
||
|
|
||
|
<li><a class="taxonomy-citra-release" href="/tags/citra-release">citra-release</a></li>
|
||
|
|
||
|
<li><a class="taxonomy-feature-update" href="/tags/feature-update">feature-update</a></li>
|
||
|
|
||
|
<li><a class="taxonomy-progress-report" href="/tags/progress-report">progress-report</a></li>
|
||
|
|
||
|
</ul>
|
||
|
</div>
|
||
|
|
||
|
<div id="twitter" class="hidden-sm hidden-xs">
|
||
|
<a class="twitter-timeline" data-tweet-limit="3" href="https://twitter.com/citraemu?ref_src=twsrc%5Etfw">Tweet Feed</a>
|
||
|
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div id="footer" class="container">
|
||
|
<div class="row">
|
||
|
|
||
|
<div class="col-md-2">
|
||
|
<h1>Citra</h1>
|
||
|
<a href="/entry">Blog</a>
|
||
|
<a href="/download/">Downloads</a>
|
||
|
<a href="/screenshots/">Screenshots</a>
|
||
|
<a href="https://www.patreon.com/citraemu">Patreon</a>
|
||
|
<a href="/donate/">Donate</a>
|
||
|
</div>
|
||
|
|
||
|
<div class="col-md-2">
|
||
|
<h1>Documentation</h1>
|
||
|
<a href="/help/">Help Documents</a>
|
||
|
<a href="/game/">Compatibility</a>
|
||
|
<a href="/wiki/home/">Wiki</a>
|
||
|
<a href="/wiki/faq/">FAQ</a>
|
||
|
</div>
|
||
|
|
||
|
<div class="col-md-2">
|
||
|
<h1>Blog</h1>
|
||
|
<a href="/entry">News & Articles</a>
|
||
|
<a href="https://citra-emu.org/index.xml">RSS 2.0</a>
|
||
|
</div>
|
||
|
|
||
|
<div class="col-md-2">
|
||
|
<h1>Social</h1>
|
||
|
<a href="https://www.youtube.com/channel/UC_dcdgzuapBtAY4ol3x-90Q">YouTube</a>
|
||
|
<a href="https://www.facebook.com/citra.emu">Facebook</a>
|
||
|
<a href="https://twitter.com/citraemu">Twitter</a>
|
||
|
<a href="https://community.citra-emu.org/">Forums</a>
|
||
|
<a href="/discord">Discord</a>
|
||
|
<a href="/chat">IRC</a>
|
||
|
</ul>
|
||
|
</div>
|
||
|
|
||
|
<div class="col-md-2">
|
||
|
<h1>Get Involved</h1>
|
||
|
<a href="https://github.com/citra-emu/citra">GitHub / Source</a>
|
||
|
<a href="https://github.com/citra-emu/citra/issues">Issues</a>
|
||
|
<a href="https://github.com/citra-emu/citra/pulls">Pull Requests</a>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
<div id="footer-bottom">
|
||
|
<div id="footer-brand"></div>
|
||
|
<div id="footer-legal">Copyright © 2024 Citra Emulator Project</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<script src="https://citra-emu.org/js/script.js"></script>
|
||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.css" type="text/css" />
|
||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.js" type="text/javascript"></script>
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
window.addEventListener("DOMContentLoaded", function() {
|
||
|
baguetteBox.run('.is-img-preview');
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
</body>
|
||
|
|
||
|
</html>
|