Author Topic: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators  (Read 11559 times)

Offline Elwood89

  • bit
  • Posts: 4
    • View Profile
Gonetz, the co-creator of the original Glide64 plugin, has just started a campaign to raise funds that would allow him to work full-time for a couple of months on a new GPU plugin. Basically he aims for full Frame Buffer effects, Hardware-accurate LOD and Lighting, and Depth Buffer Emulation. Estimated completion date is November 2014.

newbielink:https://www.indiegogo.com/projects/gliden64-graphics-plugin [nonactive]

He's got some screens and videos that show some of that running in a custom Mupen64 build.

So if you feel like 2014 is the time to have PROPER n64 graphics in your emulator, go ahead and chip in.
And spread the word if you like the idea!

Offline retroben

  • float
  • ****
  • Posts: 432
    • View Profile
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #1 on: August 09, 2014, 12:00:17 PM »
Oh,another thing I can't use because of my now majorly outdated PC that I am unable to replace with a "better" one.
The PC version,for its damn OpenGL 3.x-5.x requirements and damn DX11 requirements...
The PC version of GlideN64 can EAT A DICK!

You have my support on the Android version since it is not stupidly locked on a ES 3.0 requirement.
It will only need OpenGL ES 2.0,which everybody has.
(I have a Fire TV as my Android device)

Unless it becomes faster than all other GFX plugins on Android,it will only be completely useful if the laggy glitchfest of a Dynarec/Recompiler gets fixed.
DK64 missing collisions,Banjo-Tooie crashing randomly,and other game-killing issues in almost every Mupen64/Mupen64Plus build that are not present on any normal or newer version of specifically PJ64 because of its powerul Dynarec/Recompiler core.

If someone can figure out how to access Wii64/Not64's Recompiler data,they could find out what it does to fix DK64's collisions and possibly loads of other fixes and attempt to recode the fixes for Android.
Maybe the Wii64 devs themselves can enlighten us on how they did it.

We could just need a Mupen64 AE version,if that is what fixes DK64's collisions.

Offline DonzBegonz

  • byte
  • *
  • Posts: 12
    • View Profile
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #2 on: September 25, 2014, 03:52:55 PM »
Very cool.

He raised over 8,000 and in his goals he said that would allow him to make an android port.

Here's to hoping a shield tablet can run it!

Offline xperia64

  • Moderator
  • double
  • *****
  • Posts: 591
    • View Profile
    • My Apps
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #3 on: September 25, 2014, 04:08:48 PM »
If the shield tablet CAN'T run it, nothing else can. Also shield tablet has proper libGL so it could use the full GL version instead of GLES.

Offline DonzBegonz

  • byte
  • *
  • Posts: 12
    • View Profile
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #4 on: September 26, 2014, 12:21:55 AM »
Xperia, you're awesome. Thank you for everything you do with mupen.

Any idea if any plugin improvements to glide are coming? It seems to be the most stable one.

Offline Paul

  • Administrator
  • double
  • *****
  • Posts: 3495
  • Developer
    • View Profile
    • PaulsCode.Com
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #5 on: September 27, 2014, 11:03:40 AM »
From the GLideN64 forum, WRT the weekly beta builds:

Quote from: gonetz
The first weekly beta will be released very soon. I fill that I need to explain the current state of the project to avoid disappointment.



As you know, the base of GLideN64 is Orkin’s plugin glN64. glN64 0.4.1 was released with sources at August 2003. You still can run it on your PC. It was ported to Linux at November 2003. I supposed that the sources of glN64 0.4.1 with Linux port were the latest ones, so I took them for my project. Why glN64:

  • It is OpenGL plugin. I planned to make portable plugin, with port to Android in mind.
  • It has the best architecture among all open source graphics plugins for N64. Clean and extendable.
  • It has basic HWFBE implementation.
Of course, OpenGL used in glN64 is outdated. Nevertheless, basic stuff like OpenGL initialization, texture load, polygons rendering worked well. Also, glN64 was not champions in compatibility even in its release time, but it supports the games I planned to experiment with.



I started with new shader-based combiner. Extendable architecture allowed me to add my code without touching much of legacy code.



Then I added shader-based per-pixel lighting. It also did not touch the main code much.



Next I experimented with hardware LOD. It also is shader-based and mostly affected my combiner code. Until that moment the compatibility of the plugin remained the same as with original glN64 0.4.1



Next I started to work on frame buffer emulation. This is hard and large work, which required change of legacy code in many places. I thrown away almost all existed frame buffer emulation code. Plugin’s compatibility changed too. Thanks to my fixes some new games started to work. Due to new bugs some games which worked well before became broken. Also, I did not care about usability. I broke fullscreen mode; emulator has to be closed after each rom because of initialization issues.



Since portability was one of my goals, I added support for MupenPlus 2.0 plugin specification. Original Orkin’s code was pretty clean. Linux port added a bit of mess to it. My work added more disorder. MupenPlus specific code added another portion of chaos; the code was polluted by #define pragma statements to separate code parts for each specification.



When MupenPlus 2.0 build started to work on both Windows and Linux I decided that it’s time for Android port. I learned GL ES docs and found that that subset of OpenGL has very little intersection with traditional old-style OpenGL used by Orkin. Even my shaders had to be seriously corrected. Main code for triangles rendering had to be completely rewritten. Fortunately, the target Android emulator MupenPlus AE already has glN64 ported to GL ES. If I knew that from the start, I could use it as base for my work. It would save me a lot of time. I took glN64 ES as reference and started to rewrite my plugin. The work was long. After half a year I finally achieved the same level of functionality which I had before the rewriting. Since GL ES 2.0 does not support some features of OpenGL 4.0, which I use for frame and depth buffer emulation, new Android and ES specific sections of code appeared. It worked somehow, but was absolutely unusable for end users.



To summarize: plugin code on start of crowd-funding campaign consisted of:

Original Orkin’s glN64 0.4.1 code + Linux port + Shaders + New frame buffer emulation + MupenPlus 2.0 port + GL ES port.



The first task planned on October is “Fix stability issues”. I already started to work on it. I made massive code rafactoring to make the code clean again. I fixed many issues with program initialization and de-initialization, and now it is possible to run several roms without closing the emu after each of them. You may be surprised, but it did not work until now. And the work is not finished yet: there are scenarios which lead to plugin crash. Also, fullscreen mode does not work yet with MupenPlus build. These issues are planned to fix before the first weekly beta release in October.



I made no special steps to increase original plugin’s compatibility. No new ucodes implemented. Many bugs in implemented ucodes are not fixed. This is next task for October: “Implement missing functionality to achieve compatibility equivalent to Glide64.”



The first beta should be somehow equivalent to original glN64 0.4.1 when run without frame buffer emulation. Most of new functionality is available only when frame buffer emulation is on. In this case compatibility may vary: some games will definitely run better, some may not work at all.



Now you know what to expect from the first weekly beta. Hopefully, the first monthly beta, which is planned to be released to the end of October, will be much more advanced.


Device: Samsung Galaxy Nexus i515
CPU: TI OMAP4460, 1.2 GHz (dual core, ARM Cortex-A9)
GPU: PowerVR SGX540, 307 MHz
RAM: 1 GB
Resolution: 720 x 1280
Rom: omni-4.4.4-20141014-toro-FML KitKat 4.4.4, rooted

Device: Eee PC 1015PEM
CPU: Intel Atom N550, 1.5 GHz (dual core, x86)
GPU: Intel GMA 3150, 200 MHz (dual core)
RAM: 2GB
Resolution: 1024 x 600
Rom: android-x86-4.3-20130725 Jelly Bean 4.3, rooted

Offline SuperL

  • byte
  • *
  • Posts: 10
    • View Profile
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #6 on: October 09, 2014, 09:23:10 PM »
Where did you pull that quote from, Paul? Is there a whole forum for GLideN64?
« Last Edit: October 09, 2014, 11:31:38 PM by SuperL »

Offline Paul

  • Administrator
  • double
  • *****
  • Posts: 3495
  • Developer
    • View Profile
    • PaulsCode.Com
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #7 on: October 10, 2014, 04:23:00 PM »
Yes, there is a forum at gliden64.boards.net.  I believe general access is for Indiegogo backers or upon providing a donation (specific boards are granted based on what reward level you pledged for).  The weekly builds have started coming out for those who selected that reward (I am waiting for next weeks release, which is supposed to start supporting Linux 64-bit).

If anyone has games they would like tested on the weekly builds and screenshots, let me know and I can do some testing (provide a save state file if you are looking for a specific location in a game).  Obviously I'm referring to PC Mupen64Plus at this point (have to state the obvious sometimes)
Device: Samsung Galaxy Nexus i515
CPU: TI OMAP4460, 1.2 GHz (dual core, ARM Cortex-A9)
GPU: PowerVR SGX540, 307 MHz
RAM: 1 GB
Resolution: 720 x 1280
Rom: omni-4.4.4-20141014-toro-FML KitKat 4.4.4, rooted

Device: Eee PC 1015PEM
CPU: Intel Atom N550, 1.5 GHz (dual core, x86)
GPU: Intel GMA 3150, 200 MHz (dual core)
RAM: 2GB
Resolution: 1024 x 600
Rom: android-x86-4.3-20130725 Jelly Bean 4.3, rooted

Offline xperia64

  • Moderator
  • double
  • *****
  • Posts: 591
    • View Profile
    • My Apps
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #8 on: October 10, 2014, 05:12:25 PM »
I'd be interested in the Animal Crossing pause menu. Just start a game, go through all the intro text, and select a house. Then when Tom Nook asks for payment, the inventory/pause menu come up. You can tell if it's broken or not.

Offline oddMLan

  • bit
  • Posts: 2
    • View Profile
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #9 on: October 27, 2014, 10:29:13 PM »
Paul, has gonetz posted any update on the state of the project?

Offline Paul

  • Administrator
  • double
  • *****
  • Posts: 3495
  • Developer
    • View Profile
    • PaulsCode.Com
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #10 on: October 28, 2014, 06:20:39 AM »
Yes, gonetz is making great progress.  Here are the changelogs from the weekly builds.

First weekly build was just after refactoring the code, and didn't have a changelog.  State was basically what you saw in the videos, which was focused on frame buffer effects.  See my earlier post for the notes that gonetz released with that first build.

Quote from: gonetz
Week 2:
    The feature of the week is complete mip-mapping emulation. Check the blog for details. Golden Eye and Perfect Dark are recommended for testing. Unfortunately, the games freeze with frame buffer emulation enabled, so turn it off before run. The freeze will be fixed in next releases.
    Implemented low-level triangles emulation. It is used for sky and water textures in Golden Eye, Perfect Dark and Killer Instinct.
    Fixed F3DDKR microcode, which is used by Diddy Kong Racing, Mickey’s Speedway USA and Jet Force Gemini. The microcode was broken somewhere on the way to GL ES compatibility.
    Implement non-standard fog modes, when fog is used for highlighting objects.
    Implement LookAt functionality. LookAt is used for reflection textures. You may notice the difference on weapons in Perfect Dark for example.
    Video Interface emulation rewritten again. Read more about VI emulation here: gliden64.blogspot.ru/2014/01/frame-buffer-emulation-part-iii.html
Quote from: gonetz
Week 3:
    General fixes:
        Make the code compatible with Mac OS X compiler. Fixed several issues reported by XCode.
        Fixed various issues in shader code reported by NVidia glsl compiler.
    Emulation fixes:

    Implemented point lighting for Zelda MM.
    Implemented CBFD microcode. Note: hardware lighting is not implemented for this game. Enabling this option will have no effect.
    Fixed depth buffer emulation. Coronas work for Zeldas and may be other games.
    Added support for coronas in PD. It also requires depth buffer emulation enabled.
    Fixed frame buffer allocation issue, which caused continuous grow of allocated texture frame buffers number until plugin crash.
    Fixed freeze in PD with fb emulation enabled.
Quote from: gonetz
Week 4:
Brand new implementation of sprite microcodes. There are two families of sprite ucodes: the old one Sprite2D and new S2DEX/S2DEX2. Sprite2D has empty implementation in glN64, S2DEX/S2DEX2 implementation is very incomplete and buggy. I failed to make legacy code work well, so I removed it and wrote new code. Most of issues with 2D graphics are gone, but some games still look bad.
Fixed frame buffers allocations again. There should be no more waste of video memory.
Implement backgrounds load in Yoshi Story. Note: the game is currently incompatible with fb emulation.
Fixed bug with depth for 2D primitives. Another “surprise” from legacy code.
Correct detection of sprite microcodes.
Fix palettes load. Textures in StarCraft64 loaded correctly.
Fix 32bit rgba textures load. Fixed water textures in Gex 3.
« Last Edit: October 28, 2014, 12:52:01 PM by Paul »
Device: Samsung Galaxy Nexus i515
CPU: TI OMAP4460, 1.2 GHz (dual core, ARM Cortex-A9)
GPU: PowerVR SGX540, 307 MHz
RAM: 1 GB
Resolution: 720 x 1280
Rom: omni-4.4.4-20141014-toro-FML KitKat 4.4.4, rooted

Device: Eee PC 1015PEM
CPU: Intel Atom N550, 1.5 GHz (dual core, x86)
GPU: Intel GMA 3150, 200 MHz (dual core)
RAM: 2GB
Resolution: 1024 x 600
Rom: android-x86-4.3-20130725 Jelly Bean 4.3, rooted

Offline oddMLan

  • bit
  • Posts: 2
    • View Profile
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #11 on: December 06, 2014, 02:05:36 AM »
Paul, would you please post the changelogs of the past weekly builds?  :D

Offline Paul

  • Administrator
  • double
  • *****
  • Posts: 3495
  • Developer
    • View Profile
    • PaulsCode.Com
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #12 on: December 09, 2014, 08:01:55 PM »
Catching up on the updates.  Progress is continuing to go well over there!

Quote from: gonetz
Week 5:
    Implement Turbo3D and ZSort microcodes. Now GLideN64 has the same set of supported microcodes as Glide64.
    Implement YUV textures load.
    Add special code for load backgrounds in Ogre Battle 64
    Fix load of rgba textures when palette mode is on. Fixed water texture in Golden Eye's 'Frigate' level.
    Fixed texture size calculation in several games, including 'Tonic Trouble' and 'Pokemon puzzle league'
    Add special code for Paper Mario "2D lighting"
    Fixed several blend modes.

Quote from: gonetz
Week 6:
    Many bugfixes in many games.
    Implemented microcode for Star Wars - Shadows of the Empire
    Implemented gamma correction feature. "Automobili Lamborghini" is a good example of game, which use it.

Quote from: gonetz
Week 7:

This week I worked mostly on support of texture filter library. There are no practical results yet.
However, texture filter required some preliminary work and some fixes:
- Corrected mip-mapping implementation. Blast Corps globe textures were broken with old mip-mapping. Now fixed.
- To not stand up twice I also fixed vehicles textures load for that game.
- Texture module switched from power-of-two texture sizes to N64 original texture size. As you probably know, N64 can use textures of arbitrary size. Old PC cards supported only power-of-two texture sizes. gLN64 loads and
converts N64 textures into POT textures. Size of high-res textures usually is multiple of original N64 texture size. Thus, it should be more easy and practical to use them as they are, without overheads with conversion to POT.
This is experimental work, but we tested it during this week and only one known bug is left.

Quote from: gonetz
Week 8:
This weekly release will be delayed for few days, sorry. I have several works in progress, non is finished yet.


Quote from: gonetz
Week 9:
1. Long awaited high-resolution textures support. I ported GlideHQ library to my project, thus functionality is similar to the one you get accustomed to see in Glide64. Difference: texture compression is removed. Texture cache still can be zipped, it does not affect texture quality.

Hires texture packs must be placed in %Mupen64Plus%\hires_texture folder. May be later I'll add user-defined path to high res textures location. Texture cache files (.dat) created by Glide64 are not compatible with GLideN64.

There are plenty of new settings related to texture filtering. Unfortunately, M64Py places in on config panel in arbitrary order. It's very inconvenient, but nothing I can do with it

Pay attention for the fonts settings. Texture library shows text messages during textures load, you know how it looks with Glide64. With GLideN64 you may change font, font size and text color for these messages.
Font name is a name of .ttf file from %WINDIR%\Fonts folder.

IMPORTANT: you need to remove [Video-GLideN64] from your mupen64plus.cfg file (it is placed in %user%\Application Data\Mupen64Plus\ folder). Otherwise new settings may not appear.

I did not test 2 things:

    Load of hires textures in BMP format. These textures intended to replace N64 palette textures. I don't have texture pack, which use it.
    I have no texture packs with background textures. GLideN64 does not cut background on tiles as Glide64 does, thus background hires texture must be a solid file.



2. Fixes:

    Fixed texture coordinates calculation for reflecting textures.
    Fixed fillrect color when gamma correction is used
    Fixed VI height calculation again.
    Fixed flicker in some game which use interlaced video mode.


Builds became much larger, so they packed by rar and debug/release are in separate files. No builds for Ubuntu yet, sorry.


Quote from: gonetz
Week 10:
Week of bug fixes. Whats new:

    Fixed sprite textures load. Destruction Derby 2D
    Fixed modelview matrices stack size calculation. 3D models in Destruction Derby
    Fixed texture coordinates calculation for backgrounds, Bakuretsu Muteki Bangai-O and others.
    Fixed fog usage. Many games, e.g. Madden 64
    Fixed BranchLessZ command. Fixed missing road polygons in GT64
    Fixed z-clipping for games, which do not use near plane clipping. Many games looks better, e.g. Extreme-G, Star Wars Racer
    Fixed load mip-map tiles, Golden Eye
    Fixed horizontal strips on intro image in Golden Eye
    Fixed texrectflip command. Many games, e.g. Golden Eye, Wetrix
    Fixed hardware lighting on NVidia cards

Device: Samsung Galaxy Nexus i515
CPU: TI OMAP4460, 1.2 GHz (dual core, ARM Cortex-A9)
GPU: PowerVR SGX540, 307 MHz
RAM: 1 GB
Resolution: 720 x 1280
Rom: omni-4.4.4-20141014-toro-FML KitKat 4.4.4, rooted

Device: Eee PC 1015PEM
CPU: Intel Atom N550, 1.5 GHz (dual core, x86)
GPU: Intel GMA 3150, 200 MHz (dual core)
RAM: 2GB
Resolution: 1024 x 600
Rom: android-x86-4.3-20130725 Jelly Bean 4.3, rooted

Offline Paul

  • Administrator
  • double
  • *****
  • Posts: 3495
  • Developer
    • View Profile
    • PaulsCode.Com
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #13 on: December 22, 2014, 12:47:41 PM »
Quote from: gonetz
Week 11:

    Fixed HD textures load including HD background textures. If you will find HD texture which is not loaded, please report about it.
    Fixed textures load in many games. Check the bugtracker for details.
    Fixed depth clear problem in Elmo's Letter Adventure and Taz Express.
    Fixed Cruis'n USA texture issues
    Fixed blending in Paper boy, issue #178
    Fixed OSD misplaced ingame, issue #154
    Fixed text and 3D in All-Star Baseball games
    Fixed blending in "Bass Racing Ecogear Power Worm Championship", issue #70
    Fixed text in Rayman 2 and other games, issue #168
    Fixed gDPSetPrimDepth(), Ready 2 Rumble
    Fix Bettle adv racing: incorrect shadow project for map in menu #100
    Implemented special shader for Zelda's monochrome cutscenes. Unfortunately, I lost my saves for these curscenes and can't test them myself.

Quote from: gonetz
Week 12:
    Tons of bugfixes, mostly regression issues. See GitHub for details.
    Implemented flat shading and prim shading modes. Details here.
    Fixed crash of release build when HD textures are not used. Thanks Mush Man for detailed bug report.

The new monthly build should be released until the New Year. This is Release Candidate 1. Please report about remaining regression issues. I want to fix them all before the release.
Next week I also will work on bug fixes; may be time will left for frame buffer emulation issues. Linux build also need to be fixed - I'll post it there as soon as it will be ready.


As you can see, although the source code is not open yet, Gonetz is tracking bugs to a pretty fine granularity in the issues section of the repo where the code will eventually reside once he opens it.  I'll continue to post the weekly summaries here, but for more "up to the minute" info on what is being worked on, I'd recommend following the project on Github.  Just create an account on Github (if you don't have one already) and then add yourself to the watch list.  That will also give you an opportunity to communicate with Gonetz directly if you have any concerns about a particular issue that is being tracked.
Device: Samsung Galaxy Nexus i515
CPU: TI OMAP4460, 1.2 GHz (dual core, ARM Cortex-A9)
GPU: PowerVR SGX540, 307 MHz
RAM: 1 GB
Resolution: 720 x 1280
Rom: omni-4.4.4-20141014-toro-FML KitKat 4.4.4, rooted

Device: Eee PC 1015PEM
CPU: Intel Atom N550, 1.5 GHz (dual core, x86)
GPU: Intel GMA 3150, 200 MHz (dual core)
RAM: 2GB
Resolution: 1024 x 600
Rom: android-x86-4.3-20130725 Jelly Bean 4.3, rooted

Offline SuperL

  • byte
  • *
  • Posts: 10
    • View Profile
Re: Gonetz's Indiegogo campaign, to make a new N64 GPU plugin for emulators
« Reply #14 on: February 19, 2015, 11:34:37 AM »
Is this still coming along? Is the Android port still in the cards?