What I did today

Completed the main features of yet another prototype, corpse cooking fun.
Now to just refactor the whole thing, remove the placeholder gfx and finish it.

Yeah I wasn’t clear. I wouldn’t use OpenCL for CPU in AOT land. I’d use ISCP…not that that’s ideal and not than I’d expect everyone to agree with me. There’s plenty of “let’s use CPUs power” territory to be explored. So I’m not going to be dismissive for people trying different things.

More like “What I bugged today”: in movie linked below I’m pressing “w” key all the time.

Did some concept work work for a space game.
Mainly to get a feel for the overall presentation style:

Been working on random terrain generation in HTML5 using JS. Writing UI in HTML is nice, Canvas performance is bad but that’s to be expected, save games are limited to ~5MB, and using JS object literals instead of JSON is wonderful.

Got a new vaporizer mod today and decided to mess around with the firmware. Successfully REd a bit of the bin file before realizing the device uses the same chip as a company called eVic’s devices. There’s already firmware decryption scripts and a SDK available! That made a lot of things easier. So now I’ve got some custom firmware I wrote running on my mod which is pretty dang cool if you ask me.

And what did I do with all that work and potential? Displayed a dickbutt as my save screen. I suppose I still have some maturing to do.

Managed to fix the procedural map generator (based on someone else’s dungeon generator) so it works on my framework.

Also made it so I can load tile maps from images, reading tile data from the pixel’s color information.

It’s all very basic, but at the pace I’m going with this project, it seems like a big improvement. ::slight_smile:

Details here.

Started learning how to make games in HTML5 / JS. I have a simple island and a box you can move about, implemented some basic collisions. Would like to make a simple browser game for Ludum Dare so have some time to learn enough before the next one.

Test game here: http://carelesslabs.co.uk/html5game/index.html

Trying to do more Pixel Dailies this year, todays was black hole

Added frustum culling to my GPU culling mechanism and finally implemented the necessary bits to cull with a given debug camera instead of the active one (as you can’t shouldn’t see the effect of culling from the current main camera xD). Finally a video:

J-Ks2AbkUPs

The culling is done on a per instance basis with an AABB. The render pipeline is only fed some drawcommands. A two dimensional vertex shader kernel is launched with an invocation per instance. Frustum and highz map is tested for every object, and a bit is set in a visibility buffer for every instance. Another kernel is launched that uses the visiblity info buffer to append entity data (transform, material, animationstate etc) to a structured buffer. Also the new drawcommands are appended to a command buffer. The pipeline is now pretty much self-feeding, so nearly no CPU interaction here any more at all. More information about how to implement this could probably follow if I find time to write a blog post and create a thread for it… and if some of you are interested of course :stuck_out_tongue:
I’ll switch to compute shaders as soon as I get around a i-think-it’s-a-bug, because atomicAdd is my bottleneck currently.
HINT: Occlusion culling is deactivated in this video, although the button says “occlusion”. It’s just frustum culling here.

Added another optimization to JOML’s matrix classes to accelerate invert() and normal() calls. JOML already has plenty of “intelligent”/conservative tracking of the properties of a matrix stored in a byte bitset as the user calls operations/methods on it. Many operations already benefit from it, most notably whether the matrix is affine (preserved by all operations except perspective() and frustum()). Those optimizations are benefitial in typcal usage scenarios found in most applications. Now, it is tracked whether the matrix still is affine and its upper-left 3x3 submatrix orthogonal (preserved by all operations also preserving affinity except anything that applies scaling), in order to accelerate invert() (and normal() to compute a normal matrix) calls.
Runtimes (measured with JMH) of Matrix4f.invert() based on properties of the matrix:
Arbitrary matrix: 22.42 ns. Affine matrix: 12.64 ns. Orthogonal matrix: 4.66 ns. <-- this is new Identity matrix: 0.46 ns.

Getting used to JavaScript. Deployment is as simple as pushing to GitHub. Dynamic typing is nice except when debugging. Testing with Jest is easy and fast. NPM and Webpack makes CSS and JS bearable. All in all, it’s a very good fit for casual games.

@KaiHH: Thank you very much for doing the work all of us benefit from :slight_smile:

I added the final bits to show the occlusing culling mechanism with debug camera to my engine:

383EKvaU2vE

Normally, one can use the main passe’s last frame depth buffer to cull against, but if the depth buffer to cull against is different (because the cull camera is the debug camera…), one has to do an extra depth prepass, that sucks performance of course. As before, there are 20k hellknights in the scene. I have to admit that frustum culling is significantly more important than occlusion culling, at least in this scene.

Yesterday I implemented a sprite batch in WebGL and today I published it as my first NPM library. There’s now a spritebatch package on NPM containing a simple LibGDX-style sprite batch ;D

Testing out some materials on placeholder models

Got inspired by luna-lang and visual programming languages, and I wanted to make a mock visual editor (in JS). I can add nodes, give them names and values, move them around (they snap to a grid), I can delete them, and I can move the “camera” around the screen.

No screenshots yet cause there’s not much there, but I’m happy with it so far. :smiley:

Next up is to have them save somehow…

Last night, somewhat nervously showed off some of my Java audio to a Meetup group (Kinetech Arts, a group of dancers and techies interested in collaboration). Response was pretty enthusiastic. A favorite was the Shepard Chord, and the group did an improv with me running several Shepard Chords as sound accompaniment.

Coolest thing: several of the members are very strong developers, for example, working in data visualization field and with web coding. They are motivated to help with getting data from dancers (with wearable devices that track positions of hands/feet/etc, or even if just carrying phones) to my applications so that the applications can alter the sound output in response. When I was coding these Java tools to be on a scale that allows them to be responsive to “game state” I definitely had in mind the goal that could also be used live with incoming data streams as well, and was hoping some sort of collaboration like this would be possible.

It was a gamble, trying to focus on coding good sounds and leaving interconnection issues for later. One person only has so much bandwidth. Glad/relieved to find that others with complementary/needed skills are motivated to collaborate.

The day had some good coding results as well. I continue the long slog to make an application called “Tone Circle Drone” ready for commercial release. One of the issues has been trying to manage a JDialog/JPanel popup written for “Options” handling. Slowly, I had been figuring out how to deal with its position (keeping it relative to the main application when main was being dragged), and with not remaining “on top” when leaving app to look at web browser. The last straw was when I realized that the popup had its own slot in the Windows “Alt-Tab” list of running applications. At this point, I remembered the “CardLayout” and recoded the Options panel as a “card” that appears over the Main panel “card”.

All behavior problems solved. Lots of code discarded(e.g., WindowListener, ComponentListener no longer needed). That combination is one of the most satisfying to have as a coder.

Adding some Mockup Effects.

It’s a great feeling when you find people interested in the same projects. I remember my euphoria when I participated in a game jam. It was so exciting to meet all these ambitious amateurs and experts. One thing I quickly realised when people started making groups in the first few hours is that each has their own ‘preferred habitat’ of programming language and tools and either you or the other person needs to compromise to make collaboration a possibility.

I’ve worked a bit more on my Tetris Clone for Android. Almost finished…
I guess this one was good to go back to game dev after one year of doing nothing… ;D

Way to get back into it! Graphics look nice and retro too, I like it.