Code Monkey home page Code Monkey logo

gba-test's Introduction

Written in Rust, of course. I didn't end up getting round to implementing texture mapping.

Software Rasterisation on the GBA

The GBA has a 16 MHz processor and a 240x160 screen. With mode 5 rendering and a graphics hardware scaling hack, you can do full-screen 16-bit colour rendering (with an internal resolution of 160x128). The GBA doesn't have a GPU, so everything needs to be done with software. I wrote an optimised rasteriser that supports blitting N-gons to the screen, along with a full rendering pipeline to go with it. At 16 MHz and with a screen with of 160x128, you only get 16000000 / (60 * 160 * 128) ~= 13 cycles for each pixel, and that's not considering the time required to transform vertices, clear the screen for the next frame, listen to user inputs, etc. In practice, most instructions require several cycles and the GBA has no hardware parallelism (except for some very primitive block memory copy hardware). All things considered, the frame budget can dip down to about ~5 instructions per pixel. In addition, the GBA has no floating-point instructions so everything needs to be done using fixed-point maths. A fun challenge!

gba-test's People

Contributors

zesterer avatar

Stargazers

Joe Bain avatar Bim avatar Coding Nomad avatar Alex avatar fluffninja avatar Neil Wolfkid avatar Adam Gleave avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.