Tag Archives: linux

Vulkan Hardware Capability Viewer 1.4 released

A new version of the Vulkan Hardware Capability Viewer is now available for all platforms (Windows, Linux, Android). This is the biggest update since I released this tool, including lots of new features that also brought along a few changes to the online database. I also decided to drop the “beta” tag now that more than 1,300 reports have been uploaded, making this the first non-beta release of the Vulkan Hardware Capability viewer.

New features

  • Added support for new features and properties provided via VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2
    • Currently supported:
      • VK_KHR_push_descriptor
      • VK_EXT_discard_rectangles
      • VK_KHX_multiview
      • VK_NVX_multiview_per_view_attributes
  • Reports can now be saved to disk via command line using the -s argument (without invoking the UI)
    • Example : vulkanCapsViewer -s my_device.json
  • Added pipeline cache UUID
  • Exported JSON is now compatible with vkjson_info from LunarG SDK
  • Added Android platform info
    • Device model and manufacturer
    • Build information
  • UI improvements 
    • Updated layout and UI scaling 
    • Support for high DPI scaling
    • Touch scrolling for mobile devices (Android)


  • Fixed unauthorized access to SSL libraries message on Android 6.0 and newer

Continue reading

Vulkan Hardware Capability Viewer 1.2 released

I have released an update to the Vulkan Hardware Capability Viewer. The new version (1.2) adds support for os-specific surface capabilities that are added to the reports and online database.

This adds a new category to the tool and reports at the online database (for example this one) containing:

  • Surface properties (extents, usage flags, transforms, etc.)
  • Surface Formats (incl. color spaces)
  • Present modes

You can download the new version from http://vulkan.gpuinfo.org/download.php, downloads are available for Windows, Linux and Android (arm and x86).

The Android version (for now arm only) is now also available at the google playstore.

Projekt “W” Phase 2 – New beta release (#201) + linux x86_64 support

The current open beta of Projekt “W” – Phase 2 has been updated to revision 201. New for this release :

  • Added a linux x86_64 release. From now on all upcoming releases will also be available for linux x86_64.
  • Fixed a bug that stopped ecology buildings from getting finished.
  • Fixed wrong global project calculation for minimum required funds to progress.
  • (Linux) The sound library (libbass.so) is now loaded dynamically. If there was a problem loading it you get a corresponding message instead of the game not starting.
  • (Linux) Executable bits for the start script and the game’s binary have been set.
  • Fixed lots of spelling and grammar errors.

You can grab the new releases here :

(Windows) Projekt “W” – Phase 2 – Open Beta rev. #201 (~83 MBytes)
(Linux, i386) Projekt “W” – Phase 2 – Open Beta rev. #201 (~90 MBytes)
(Linux, x86_64) Projekt “W” – Phase 2 – Open Beta rev. #201 (~90 MBytes)

The main reason it took longer than planned to get this release out (the changelog is pretty small) was the continued work on the Mac OSX port. It’s already fully functional and playable on Mac OSX (including all OS-specific stuff like getting and changing resolutions, different timing methods). But no ETA on this yet, as there’s still a lot of testing to be done.

Projekt “W” Phase 2 – New beta release (#190)

Later than expected (partially due to a power supply failure on my PC) here’s the new beta release #190 of “Phase 2”. As usual it’s available for windows and linux :

(Windows) Projekt “W” – Phase 2 – Open Beta rev. #190 (~83 MBytes)
(Linux, i386) Projekt “W” – Phase 2 – Open Beta rev. #190 (~80 MBytes)

Here are some highlights from this release, for a full list of changes take a look at the changelog :

  • AI Builder for regions
  • New soundtrack, including the game’s very own theme song
  • New and improved sound effects
  • Several improvements to the user interface / gameplay :
    • Visual warnings for regions with low loyalty or high pollution levels (right to the region’s flag on the globe)
    • The region list can now be sorted by different criterias (economic power, population, pollution level, etc.)
    • You can now have the units placed by the computer on the battlefield (by simply ending the placement phase)
    • Unit health is now displayed for deployed divisions in regional view
  • Almost two dozens of fixes and minor improvements
    • One of these fixes includes full support for render-to-texture on older graphics cards (earlier releases would crash in certain parts of the game)

So this release doesn’t only add to the game’s overal atmosphere with the new soundtrack and improved sound design, but also adds some finish with lots of bugfixes and small improvements to the user interface. What’s still missing from the sound design is the battlefield. Units currently don’t have any sounds assigned, but that’s planned for a future release. It’s sadly kinda hard finding military unit sounds that sound good and won’t cost any money.

Also on the list are some missing features like the whole politics area of the game (it’s partially there but disabled for the current build) and the different game modes that I intended to add at some point during game design.

I hope you enjoy this new build of “Phase 2” even more than the recent ones. And a big thank you to all the people that send me their valuable feedback on the game. That’s what actually keeps me motivated 🙂

Projekt “W” Phase 2 – New beta release (#170)

It took much longer than initially expected, but here comes a new release of Phase 2, both for linux and windows :

(Windows) Projekt “W” – Phase 2 – Open Beta rev. #170 (~74 MBytes)
(Linux, i386) Projekt “W” – Phase 2 – Open Beta rev. #170 (~78 MBytes)

Selection of screenshots :

As hinted in my last postings this release includes the new space backdrops as well as the extensive ingame tutorial that’s aimed at both beginners, as well as experienced players that wan’t to know about the details. Due to the extensive nature of that tutorial (70 chapters, ~ 25,000 words in two languages) it took me almost 3 weeks to get it done,  and I plan on adding some more chapters and details in the future.

I also changed some parts and visuals of the main menu, getting it more in line with the new space backdrops. And the new game screen now also shows the options on the nation selection screen, so no more clicking through two different screens for starting a new game.

Other than the above changes there were some bugfixes and small additions (e.g. correct display of special characters on Linux). You can find the changelog for revision #170 here.

Now with that release out of the door I can hopefully start to implement the last few missing features, add some more content and do some balancing, getting closer to a final release.

Projekt “W” – Phase 2 – First linux release!

phase2_logo_iconBelieve it or not, but after a month of hard work (and only very little sleep), the first open beta release of “Phase 2” for linux (i386) is finally here!

Only a few small issues had to be fixed since my last posting about going multi-platform. No big deal, only a few visual glitches, missing staff images and (very annoying) a missing flood fill algorithm. I use flood fill to generate the colored territorial maps on each turn, and lazarus doesn’t implement this for the linux widget sets, so I had to write one on my own that isn’t slow as hell. And then I did some final game testing this afternoon and only found the game to be perfectly playable, so I decided to finally release the linux version.

Download :
(Linux, i386) Projekt “W” – Phase 2 – Open Beta rev. #142 (~65 MBytes)

Important : Please run the included “startprojektw.sh” script instead of the application itself as the game needs a certain library to be in the search path to run. If you run the application itself without libbass.so (which is what the script does), the game won’t launch!

Also note that I updated the windows release too :
(Windows) Projekt “W” – Phase 2 – Open Beta rev. #142 (~60 MBytes)

So if you’re a linux user and haven’t been able to play my latest game, you can now run it without using something like Wine. But please note that there may be bugs not present in the windows release, and that I only tested on one linux distribution, so I can’t tell about the other numerous distros out there. So if the game is running for you feel free to comment with your linux distribution so I can see where the game is running and where not.

Going multi-platform, part 5 : Finishing touches

phase-2-linux After weeks of hard work and learning a lot about the differences between coding on windows and linux, the current source revision of Phase 2 is completly functional on linux and playing the same as a windows version. So if you’d put them side-by-side in fullscreen mode you wouldn’t notice any differences!

Currently I’m putting the finishing toches on the linux release and only a very few minor things have to be fixed and adjusted before I’ll release the linux version into the wild, so you guys can play with it and provide me with feedback, the linux world is far more fractured than the windows world, so I’d love to know how the game runs on different distributions.

Since the last posting I did the following for the linux source path of the game :

  • Switched to the BASS audio system
    In my last posting I wrote about the problems finding an fmod linux library that would work with my game and free pascal. The problem here is that delphi/fpc support has long been dropped from fmod, and since a lot of declarations have changed, using the last delphi/fpc header with a recent fmod library wouldn’t work. So I switched over to BASS, a sound library that I already used several years ago. It still supports delphi/fpc, is leightweight, updated on a regular basis, free for non-commercial use and supports many platforms. You can get it from un4seen.
    Since my different sound systems (fmod, OpenAL) are all abstracted via TSoundSystem and TMusicPlayer classes, adding in BASS only took me 15 minutes, so the game is now running on a different sound API and the linux version now also plays music and samples.
  • Added resolution selection / switchting
    This was a lot harder than I intially thought. For windows this is pretty simple (as I’ve been using it for years), but for linux I had to do a lot of research before I started implementing it. In the end I went with xrandr and you can now change resolutions and windowed / full screen on linux like on windows.
  • Implemented performance fixes
    I hinted at this in one of my recent postings. There are several performance differences between free pascal and delphi, so code that ran pretty fast on delphi made the game crawl on free pascal. One example was the transfer market. On delphi I had all texture names for all available staffer picutes in a stringlist and on drawing each staffer entry in the selection listbox, I looked up the texture ID of the staffer’s face via this stringlist. If that image was already loaded into VRAM I draw it, if not it get’s loaded from the virtual file system. On free pascal that code made the game go down below 10 fps when opening up the transfer market window. So now I load up all staffer pictures when loading the game (only takes a few ms) and directly assing the texture ID to a staffer. Sicne this is faster in general, this will also make the delphi version run faster.

So the linux version is looking fine, and I hope to have a public release ready within the next two weeks, so the linux crowd is finally able to play my game outside of wine or virtual machines. And though it was a hard piece of work (partially making me wonder if it was worth all the hours of coding) I think it was worth it as I learned a lot about coding on linux. So for my future projects I’ll take multi platform support into account from the very beginning.

Going multi-platform, part 4 : First run on a native linux

After another week of intense coding on “Phase 2“, trying to fix the mistake I made with nativeXML, I finally got all of the xml stuff switched over to my own xmlwrapper. As hinted at in my last posting, nativeXML wasn’t working on linux (and I haven’t been unlocked for their support forums, after over a week of wait!) so I decided to write my own wrapper unit that uses fpc’s or delphi’s xml implementation, depending on the compiler target. Once again this was a huge code change (thousands of lines of code) but now all of the game’s unit have been changed to use this xmlwrapper, removing any references to external xml libraries.

So with that obstacle out of sight I decided it was time to install a real linux one of my partitions. The virtual machine was nice for getting the first version compile and run in linux, but developing in a VM is kinda cumbersome, especially as the OpenGL visuals don’t mirror a real system, so instead of trying to fix some awkward visual bugs (that are only visible in the VM) I made room on my external harddisk and installed linux (mint, same as in my VM) on a partition. So now I can also boot into a real linux with complete hardware acceleration and an OpenGL implementation that offers me the same extensions and performance as on my windows system. Installation itself went pretty easy, though I must admit that the linux system oddly isn’t nearly as stable as my good old Vista64. Debugging my game often hangs the complete system, requiring a hard reset, my USB ports aren’t powered down when shutting down linux (which is annoying, cause my lit keyboard is still on power after turning off my PC) and my wireless network drops out every few minuts. But well, just for developing and testing my game it’s fine, and that’s what I needed.

So here are the first screenshot of the game running on a native linux installation. I actually wanted to post a video, but finding a working screen capture application on linux (like fraps or camtasia for windows) was kinda impossible and made me waste half of my sunday. But anyway, here is the first bunch of screenshots showing the running natively on linux directyl from the lazarus IDE :

As you can see from the screenshots, performance is already pretty good (though it’s lacking in several areas, I guess due to compiler differences between fpc and delphi). But there is still a lot work to be done before I can release a linux build into the wild. As already said the soundsystem is currently disabled (because of the FMOD package version I need not available anymore), fullscreen mode along with getting resolution list is also missing, and timing is currently done via GetTickCount, which isn’t nearly as accurate as QueryPerformanceCounter for windows. And there seems to be a small encoding problem, wrongly displaying special chars like Umlauts (‘ü’,’ ä’, ‘ö’).

But yes, it’s fully playable and with only a bit more work I’ll finally have a working linux version of Projekt “W” – “Phase 2”!

Going multi-platform, part 3 : First throwback

Last weekend I worked on getting the lazarus / free pascal build of “Phase 2” to look and play exactly the same as the delphi build. I had to change some small things here and there, but after a few hours you can now no longer distinguish between the two builds, maybe except for performance. It looks that some stuff that’s pretty fast with delphi is kinda slow with fpc, for example accessing stringlists and stuff. But that’s nothing that can’t be easily optimized, so the first goal of getting the different compiler builds on par is done. This also means that the game is fully playable under linux.

But during my playtestings on linux (I ditched my ubuntu installation with it’s horrible ubuntu one interface btw., and now use mint) I noticed that all descriptions of nations, units, technologies, etc. were missng, as well as the whole credits text. And after hours of debugging, checking encodings, creating test applications, etc. I found out that NativeXml is not able to load text contained within XML nodes on linux. So a node like this :

[xml]<unit name="test">
<description>This is a test description</description>

Will return an empty node value on Linux. No matter what I tried, accessing it directly, via the first childnode, etc. it was always empty. At first I thought I’d be doing it wrong (though it worked fine on windows), but then I did a very simple test that failed : I loaded up the XML with NativeXml and directly saved it to disk afterwards. And guess what? All texts within the xml nodes were removed by the library!

So it seems that I can’t use NativeXml for linux due to this severe bug. Their forums seem dead (registered there the weekend, but haven’t even been unlocked there so I couldn’t post the problem), and finding people that use it for linux is almost impossible. So all the thousands of lines of code I replaced to get the xml stuff to work on windows were just a waste of time, and I’ll have to remove this library again. I took a look at other xml libraries, but most either only supported delphi or were too bloated (dozens of units, huge source files, different dependencies, etc.). But well, that’s part of the learning process that makes programming so much fun (and sometimes so frustrating), and for the next external library I’m going to use (I prefer to write most of the stuff myself anyway) I’ll first check and see if it works on all my intented platforms.

And what now? Is the linux port in danger? No, rest assured, it’s not! Instead of relying on an external library for loading and saving xml I have written my own xmlwrapper that abstracts free pascal’s and delphi’s different xml interfaces into a single structure that I can use in my game (and coming projects). So now I load up an xml document via my own wrapper and compiler directives control wether delphi’s xml interface or free pascal’s DOM is used to fill this dynamic xml structure from the given file. The syntax is leaned towards the style of delphi’s xml implementation and parts of the game have already been changed to use my new xmlwrapper. So in my code it looks like this to get values from the xmlwrapper :

[delphi]VFS.LoadXML(‘data\xml\nationinfo.xml’, TmpXML);
for i := 0 to High(Nation) do
Nation[i].History := TmpXML.Root.NodesByIndex[i].Nodes[‘history’].NodeValue;
for j := 0 to LocalizationDB.LangID.Count-1 do
Nation[i].Name[j] := TmpXML.Root.NodesByIndex[i].Attributes[‘name_’+LowerCase(LocalizationDB.LangID[j])].AsString;
Nation[i].Stronghold := TmpXML.Root.NodesByIndex[i].Attributes[‘stronghold’].AsInteger;
with TmpXML.Root.NodesByIndex[i].Nodes[‘basefactor’] do
Nation[i].BaseFactor.Growth := Attributes[‘growth’].AsSingle;
Nation[i].BaseFactor.Loyality := Attributes[‘loyality’].AsSingle;
Nation[i].BaseFactor.Ressources := Attributes[‘ressources’].AsSingle;


So much for an open source xml library that was supposed to work with linux. So I guess this weekend will pretty much look like the second last one with me replacing lots of lines of xml-related code 🙁