Jump to content
  • entries
    941
  • comments
    5,894
  • views
    868,186

About this blog

Learn about game development technology

Entries in this blog

Slogging On

Everything I'm working on right now is a real grind. Trying to get some window code to run on Mac and chatting with Valve on how to optimize the Workshop Store. If I didn't have a plan this would not feel like I was going anywhere. I think that's why programmers often fail to reach beyond a certain level of success. I don't mean simply financial success, I mean they don't go big enough to make a really complete product. They make a car with 22 different gears and no seat. If you don't have

Josh

Josh

Hello Mac

Being reasonably confident that my GUI design will work on Windows and Linux, I wanted to make sure it would also work for Mac computers. The first step was to compile Leadwerks Game Engine in Apple's Xcode IDE. Like Visual Studio and Code::Blocks, I was able to create two targets so that the same project can be used to compile both the static library and standalone executable.     At this point the Window class for Mac contains mostly empty functions that don't do anything, but this is a

Josh

Josh

The Ancient Forbidden Knowledge of X11

The most interesting thing about the development of Leadwerks is digging into low-level X11 libraries that no one really understands. If the stock answers of "use GTK" or "use QT" were sufficient, this project would not be necessary. No one really knows how X11 works anymore, so it's like we are exploring an archaeological ruin and discovering ancient forbidden knowledge.     Here's me looking at the X11 documentation.     X11 doesn't really have a concept of non-embedded child wind

Josh

Josh

Digging Deeper

The general GUI elements for LeadwerksGUI are more or less done, and I have turned my attention to another problem. The LeadwerksGUI system is built around the notion that GUI widgets have a discrete bounding box in which they are contained. All events and drawing occur within these bounds, which are further constrained by either their parent widget's bounds or the area of the window they are created on. However, there are three situations where this paradigm breaks down.   Menus   Wind

Josh

Josh

Steam Dev Days 2016

I got back last night from Steam Dev Days 2016 in Seattle. This year focused heavily on VR, with Valve mentioning they are working on a new unannounced title built for VR. Valve also announced Steamworks will begin supporting the PS4 controller, with other controller support in the works.     This was also an opportunity for me to meet with a bunch of people on the Steam dev team and chat with other developers. I got a lot done! We're getting our Steam controller integration fixed, as I

Josh

Josh

Pre-Steam Dev Days small update

A small update is available on the beta branch. This just changes it so that surfaces using the leaves or groundplant vegetation shader will be skipped when computing a convex decomposition. This was implemented specifically to make it easier for Nenero to get his Tree Pack approved for sale in the Workshop Store. At this time, only the Windows build is affected.     I will be in Seattle tomorrow evening for Steam Dev Days, along with some other people from the Leadwerks community.  

Josh

Josh

Top Sellers in the Leadwerks Workshop Store

These are the top-ten top grossing items in the Leadwerks Workshop Store over the last three months: Nature Model Pack SciFi Materials 1 Modern Sewer Construction Kit Zombie Action Figures Old Furniture Pack SciFi Materials 5 Mercenary Action Figure Morgue Strike Troop The Stalker   First of all, we can see that outdoor vegetation and rocks sells best. This is consistent with what I have seen with our DLCs and with products in the past.   We also see four c

Josh

Josh

Leadwerks Game Launcher on Linux

If you opt into the beta branch of Leadwerks Game Launcher on Steam, you can now try the application out on Linux, using the new LeadwerksGUI user interface.   LeadwerksGUI is a cross-platform GUI library that features DPI scaling for any resolution, supporting 4K and retina screens.    

Josh

Josh

Rendering Text on Linux with Xft

Diving into the innermost workings of the Linux operating system is a pretty interesting challenge. Pretty much nobody nowadays implements anything with raw X11 anymore. They use QT, SDL, or for drawing Cairo, with Pango for text rendering. The thing is, all of these libraries use X11 as the backend. I need full control and understanding over what my code is doing, so I've opted to cut out the middleman and go directly to the innermost core of Linux.   Today I improved our text rendering b

Josh

Josh

Preparing Leadwerks for the Future

In this blog I am going to explain my overarching plan to bring Leadwerks into the future and build our community. First, regarding technology, I believe VR is the future. VR right now is basically where mobile was in 2006. The big publishers won't touch it and indies have a small but enthusiastic market they can target without fear of competition from EA. I have an HTC Vive and it is AWESOME! After using it, I don't really want to play games on a 2D monitor anymore. I want to be in the gam

Josh

Josh

A first look at Leadwerks GUI on Linux

Below you can see LeadwerksGUI running nicely on Ubuntu. Once we get through the window and event code, the GUI code acts exactly the same on Linux and Windows. The behavior of the widgets is reliable and double-buffered rendering makes the appearance perfectly solid. Image loading is not working yet, but you can see the vector graphics are working perfectly.     Leadwerks GUI will provide a smoother user experience on Linux and give us cross-platform UI consistency across all operating

Josh

Josh

Writing the Treeview Widget

I've begun a Lua script for a Treeview widget. This is arguably one of the most complex widgets to implement, but after having done this in another language I have a design that I think is pretty simple. The script sorts all tree view nodes into a linear list-like table so that they can be drawn quickly. Like other widgets, the script will calculate where the starting point in the list is to display just the visible nodes. This is very important because it prevents the program from slowing d

Josh

Josh

Resolution Independence

I figured out how to make our GUI resolution-independent so that the existing editor code will correctly create items with the same proportions. This was very difficult, and it works really well! Some images aren't scaled here, but the important thing is the existing code is working the same, with no changes.   When the GUI is scaled to 200%, the buttons are bigger and indented further in from the right / bottom edges. The code that creates them just calls the parent ClientWidth() minus 74

Josh

Josh

Workshop Store picking up steam

Over the recent months the Leadwerks Workshop Store has experienced a noticeable increase in sales, correlating to an increased number of products offered. Although Workshop Store sales are quite a bit lower than DLC sales, the Workshop Store is more scaleable because it allows third parties to submit a greater variety of products.   We're also able to send out payments to Russia and other regions that other stores and websites may have trouble sending payments to, because our transaction sys

Josh

Josh

Beta update available

A new build is available on the beta branch on Steam. This updates everything, C++ and Linux included.   A bug where the editor skipped navmesh calculation on brushes is fixed.   We're updated to the latest version of the Steamworks SDK, which may fix some Workshop upload and download issues.   Animation now calculates more than twice as fast as previously. This was achieved by optimizing the animation code, implementing some inline functions, and by changing the way the matrix updating

Josh

Josh

Game Launcher final release

We're up to 81 games in Steam Workshop now, and I expect we'll see quite a few more released before the end of the tournament. Some of the stuff this tournament especially is really good, so it's not too soon to start thinking about the final release of game launcher on Steam. At that point the application will no longer be marked "Early Preview" and will get a big increase in downloads on Steam since its visibility will be much higher.   I want to launch with at least 100 total games. This

Josh

Josh

Game Launcher Updated

The beta branch of Leadwerks Game Launcher on Steam is now using Leadwerks GUI. You can try it out now for free here: http://store.steampowered.com/app/355500  

Josh

Josh

Initial Thoughts on VR

So I've been using Valve's VR technology quite a while before the HTC Vive was released, but I only recently picked up the final consumer version. Here are my thoughts on VR games.   First, VR games are completely different from non-VR games. Motion in the virtual world should never contradict motion in the real world. All the early Oculus demos are examples of what not to do.   "The Lab" by Valve really shows the depth of interaction VR opens up. You interactions with the virtual world

Josh

Josh

Game Launcher Custom Widget

As described previously, I decided to create a custom widget script to replace the game launcher's HTML panel. The results are already looking awesome! The UI looks really slick. It's great to see this idea come to life in such a striking and attractive manner.   What's really cool is the OS drawing commands are being used, so the games grid uses cleartype subpixel antialiasing, and the UI is completely solid with no flashes or little visual glitches.     Oh, and except for the window

Josh

Josh

Making game launcher work offline

I've got the Steamworks HTML renderer working with Leadwerks GUI now. The current build on Steam uses the Windows HTML renderer, which is part of IE. This isn't cross-platform, which is one reason why game launcher isn't available for Linux right now. The Chromium-based Steamworks HTML renderer is cross-platform but there are some issues.   The HTML renderer works by rendering a web page into a memory buffer and then uploading that buffer to a texture and drawing it onscreen. The visible r

Josh

Josh

Subwindows!

When the new Window::Embedded style is used in the window creation function, the window will appear as a panel, as part of the parent window. The black region here is an embedded window parented to the main window. (The tabber and other panels and controls are all just Leadwerks objects; Windows doesn't recognize them or know they're there, as they are just created by Leadwerks structures and drawing commands.)     Why is this special?   The embedded child window uses single-buffer draw

Josh

Josh

Leadwerks MaxGUI Driver

MaxGUI is an abstracted GUI system for the BlitzMax programming language. This allows Windows, Mac, and Linux native UIs to be created using the same code. The LeadwerksMaxGUIDriver module integrates Leadwerks GUI so that existing programs can be recompiled using our new UI system. Here's the first shot of it working in an actual existing program:  

Josh

Josh

Text Area Widget

The text area widget is now available on the beta branch on Steam, for Windows and Lua only at this time.   The text area is a read-only widget at this time. However, the text is all selectable, and in the future will be able to be copied to the clipboard. This widget creates two scroll bars which appear only when needed, for horizontal and vertical scrolling. The multiline text selection and scrolling was pretty difficult to implement, but the results are really nice.     I'm not goin

Josh

Josh

Leadwerks GUI for Linux

It took most of the weekend, but I've got Leadwerks GUI running on Linux, rendering directly to an X11 window. This is the fastest possible rendering method on Linux, and I think you'll agree the results are worth it. You can try a demo here: http://www.leadwerks.com/werkspace/topic/14867-gui-demo/#entry100912     Just like the Windows implementation, I found it necessary to implement double-buffering. In X11 this is accomplished with the use of an extension called "xdbe". The document

Josh

Josh

Clipping and Resizing

In Leadwerks GUI, any widget can be the child of another widget. If the child goes outside of the parent widget's area it will be clipped for both rendering and mouse events. Below you can see the button in the upper-left corner and the progress bar and slider on the right are clipped by the parent tabber.     A parent widget can also have a padding value which indents the area. The tabber uses padding on the top to display the tabs and make sure children don't appear on top of the tabs.

Josh

Josh

×
×
  • Create New...