Project 1: Implement the fixed-function OpenGL pipeline as shaders

This would fix a number of a small issues that are unlikely to get fixed otherwise.

For R200, the hardware does implement the fixed-function OpenGL pipeline in hardware, but it has a few bugs and omissions, and these bugs and omissions can't really be worked around without either completely disabling hardware support for the vertex side of the OpenGL fixed-function pipeline, or as the heading suggests, implementing it as shaders.

For R300, there's no hardware support for the fixed-function OpenGL pipeline, and the current driver implements it as two static shaders, a "simple" one that handles just the basics, and a "complex" one that partially handles OpenGL lighting too. This implementation misses quite a few things, and the work required to make it correctly support everything would be almost the same amount of effort as implementing it generically in TinyGL, where other hardware could also benefit from it.

R600 (and potential newer hardware) support would also benefit from this, as it's basically a requirement for any hardware from R300 and up.

Completing this task would fix a bunch of smaller issues, such as:

This project is not dependent on any of the other projects.

Project 2: Framebuffer objects

While this feature has only been part of core OpenGL since version 3.0, it has been available as an extension before then, and it is (mostly) hardware independent and can thus be implemented for any hardware currently supported by MorphOS, even if it predates OpenGL 3.0 by quite a bit.

The gist of this feature is that it allows applications and games to draw into other things than just the display buffer, commonly a texture. This can for example be used to create bloom effects, mirrors, water reflections and many other things.

Completely supporting framebuffer objects is dependent on the shaders project being done. However, the only missing functionality from this project without shaders is functionality that can only be used through shaders in the first place.

Project 3: Shaders

This one probably doesn't need too much of an introduction or explanation, but in short, shaders are what (mostly) replace the fixed-function OpenGL pipeline with a programmable one. Shaders are small programs that run on the graphics card to control how input vertex data gets transformed and how final output pixel data gets calculated, split up into vertex shaders and fragment shaders respectively.

Hardware wise, only R300 and newer can fully support OpenGL 2 shaders, however R200 can partially support them too.

Fully implementing shaders to specifications is a huge task. Therefore I suggest working more towards getting the most common functionality working correctly, and then adding extra functionality later if it turns out it's needed for an interesting application or game. Note that MorphOS already has some (quite partial) support for OpenGL shaders on R300 and R400 only. This would need to be extended to fully implement the OpenGL API, to support more of the OpenGL Shading Language and handle more complex shaders, and finally also to support R200 and R500 hardware.

This project is not dependent on any of the other projects.

Project 4: Programs

OpenGL programs are a precursor to OpenGL shaders, and is more like an assembly-like version of shaders. They were never used widely, but Doom 3 used them. I'm not 100% sure if the Doom 3 fork that Cowcat's MorphOS port is based on has been updated to use shaders instead, but from a very, very quick glance, it doesn't look like it. If so, implementing OpenGL programs would be a requirement to fully support Doom 3.

This project is not dependent on any of the other projects.

Project 5: R600 driver

A TinyGL driver for the R600, R700, Evergreen and Northern Islands families of Radeon chips. Writing this driver would depend on the first target listed above, implementing the fixed-function OpenGL pipeline as shaders, to avoid doing duplicate work.

Such a driver would enable OpenGL support for many commonly available PCI Express graphics cards, which can be used in for example the Sam460, the X5000 or PCI Express Powermac G5s. This hardware also supports many more features required for OpenGL 3 and beyond.

To avoid duplicated work, this project will only be finished once the Implement the fixed-function OpenGL pipeline as shaders project is completed.

Please note: This driver will only enable 3D functionality on systems where the Radeon hardware already fully works in 2D mode. It will not enable the usage of R600, R700, Evergreen or Northern Islands based Radeon cards on systems where they do not already work for desktop use. In particular, AGP versions of these cards are known to be quite hit and miss when it comes to working in PowerMac G5 machines. Please make sure that you have (or can get) a card that's known to work with your system, no matter which system you have.

Additional info

Each project will be completed at the latest 3 months after the project is fully funded.

During development, beta versions will be released to the public for testing on this website. Release versions will also be released on this website every time a single project is completed.

The general fund is for contributions where the contributor has either not specified a specific project to fund, or where the contributor has explicitly left it up to me to decide which project to allocate it to. The general fund will be used to make up for gaps in contributions assigned to a specific project.

Current funding status

# Name EUR Received EUR Required Funding completion
1 Fixed-function pipeline as shaders 1,112.00 EUR 2,000.00 EUR 56%
2 Framebuffer objects 350.00 EUR 500.00 EUR 70%
3 Shaders 308.00 EUR 2,500.00 EUR 12%
4 Programs 57.00 EUR 1,000.00 EUR 6%
5 R600 driver 490.00 EUR 2,000.00 EUR 25%
General fund 5,883.00 EUR
Total 8,200.00 EUR 8,000.00 EUR 103%
Last updated 2022-06-22

Contribute to TinyGL projects

Funding is now complete!

You're of course still more than welcome to contribute, but the funding goal has been reached and no further funding is required for the completion of these projects.

If you'd like to contribute to these TinyGL improvements, you can do so via bank transfer or Paypal with the details below.

Any contribution received in currencies other than EUR will be counted towards the EUR goal based on the conversion done by the Xe Currency Converter at the time of receipt of funds.

The project that reaches its funding goal first will be worked on and completed first.

If you have any questions or queries, please contact me at tinyglpayments@molsen.co.za.

By bank transfer
Recipient name Mark Olsen
Institution number 621
Account number 200110291388
Transit number 16001
Bank Address 99 Bank Street, Suite 1420
Ottawa ON K1P 1H4
Canada
Recipient name Mark Olsen
BIC/SWIFT TRWIBEB1XXX
IBAN BE64 9673 1302 7652
Bank Address Avenue Louise 54, Room S52
Brussels
1050
Belgium
Recipient name Mark Olsen
Sort code 23-14-70
Account number 38259221
BIC/SWIFT TRWIGB2L
IBAN GB06 TRWI 2314 7038 2592 21
Bank Address 56 Shoreditch High Street
London
E1 6JJ
United Kingdom
Recipient name Mark Olsen
Routing number 084009519
Account number 9600004524439801
Account type Checking
Bank Address 19 W 24th Street
New York NY 10010
United States

Please include a message with your transfer which starts with the letters tgl, followed by a space and as much of your email address as you can fit. After you've made the bank transfer, please send an email to tinyglpayments@molsen.co.za with information on which project(s) you'd like to assign your contribution to.

Please also let me know if you'd like your contribution to be public, and if so, which name to display for the contribution.

By Paypal

Please include a note with your payment indicating if you'd like your contribution to be public, and if so, which name to display for the contribution. If you want to donate to multiple individual projects, then please also include information on how to divide the contribution. If you wish, you can include your email address as well, so this information can be amended after payment.

Thank you!

Thank you to everyone who's contributed! The following people have made their contributions public:
Name EUR amount
MoerBoer 60
H├ęctor Juan 20
IKE 186
Zetec-S 29
roschmyr 150
SkonsFr 52
Primax 100
Rafael/ARMO 100
reenstix 100
MDW 50
Antoine Dubourg 50
KJB 50
pampers 5,000
Jaime Cagigal Bordonaba 55
Falcon_11 50
SLD-SNaKe 25
Note that EUR amounts are rounded off to the nearest integer