Jump to content
  • entries
    943
  • comments
    5,899
  • views
    923,755

Ultra Engine Client App


Josh

4,475 views

 Share

I've been working hard getting all the rendering features to work together in one unified system. Ultra Engine, more than any renderer I have worked on, takes a lot of different features and integrates them into one physically-based graphics system. A lot of this is due to the excellent PBR materials system that Khronos glTF provides, and then there are my own features that are worked into this, like combined screen-space and voxel ray traced reflections.

Anyways, it's a lot of difficult work, and I decided to take a "break" and focus something else for a few days.

Before Leadwerks was on Steam, it had a web installer that would fetch a list of files from our server and any files that were missing, or were newer than the locally stored ones. There was no system for detecting updates, you just pressed the update button and the updater ran. The backend for this system was designed by @klepto2 and it functioned well for what it needed to do.

install.png.ccf6c80217f7903c3b7a2c5aa2db11cf.png

With Ultra App Kit, I created a simple tool to generate projects. This introduced the account authentication / signin system, which was sort of superfluous for this application, but it was a good way to test it out:

ss_1d7bdedccece25796c428121ef4d3d549da152ac.thumb.jpg.31db11ed0fa194983b9ebace00fde0d1.jpg

With Ultra Engine, I wanted some characteristics of both these applications. I wrote a new backend in about a day that handles updates. A PHP script authenticates the user and verifies product ownership, fetches a list of files, and retrieves files. Since C++ library files tend to be huge, I found it was necessary to add a compression system, so the script returns a zip compressed file. Of course, you don't want the server to be constantly creating zip files, so it caches the file and updates the zip only when I upload a new copy of the file. There's also a cache for the info retrieval, which is returned in JSON format, so it's easy to read in C++.

For the front end, I took inspiration from the Github settings page, which I thought looked nice:

github.thumb.png.005b32b6527a54c6524357f76b4487e8.png

And here's what I came up with. Projects will show when they are outdated and need to be updated (if a file in the template the project came from was changed). Each of the sections contains info and links to various topics. There's a lot there, but none of it feels extraneous to me. This is all made with the built-in GUI system. No HTML is used at all:

Image1.thumb.png.db23b1f4711f589ae806f27d90ab0697.png

The Invision Power REST API is extremely interesting. It allows authentication of accounts and purchases, but it can be made to do a lot of other things.

None of that is very important right now, but it does provide some interesting ideas for future development of the game engine.

  • Like 4
 Share

29 Comments


Recommended Comments



I found that compression on the server is a really bad idea because any file that is big enough to benefit from compression also needs to be uploaded in a compressed archive, either due to file size or number of files. The only files that really qualify for this are the library binaries and header files.

Link to comment

VSCode diff/merge tools are now integrated into the project update step. You can also replace VSCode with your own merge tools:

Untitled.thumb.png.d135f69de849c89ca876c3c2083b6132.png

  • Like 1
  • Thanks 1
  • Upvote 1
Link to comment

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...