Post Archive - January 0001 wharbargle
Posts tagged code
Update: Getting Started with OpenSL on Android
WebGL Index Validation
If you've ever browsed through the WebGL spec, you've likely seen section 6: Differences Between WebGL and OpenGL ES 2.0. Right at the top of that section, we find section 6.1: Buffer Object Binding. That section reads as follows: ... Read more
HenchLua: Representing Values
Lua supports the following standard types: ... Read more
Introducing HenchLua
This is the first of a series of posts on the subject of HenchLua. HenchLua is an implementation of the Lua VM in C#. It's targeted at projects running in otherwise limited .NET contexts, such as web-based Unity games (the Unity plugin, I believe, requires pure verifiable CIL), mobile apps (which are memory-limited and must meet the limitations of Mono's full AOT compiler, or apps that run on the .NET Compact Framework (whose garbage collector has some serious performance issues, as anyone who's written an XNA game targeted at the Xbox can attest). ... Read more
Bicubic Filtering in Fewer Taps
This post is based on the technique described in GPU Gems 2, chapter 20, Fast Third-Order Texture Filtering. While that's certainly a good read, I found that the authors skipped over a lot of detail and optimized a little prematurely, making the result rather difficult to parse. If you've read and understood their paper, then this isn't going to be news to you. ... Read more
Simple Flip Book Animation in WPF
WPF makes it easy to animate numbers, colors, sizes, and a host of other properties. Unfortunately, it isn't easy to animate an ImageSource
property, which is what we're usually looking for when implementing a flip book animation. The closest we get out of the box is ObjectAnimationUsingKeyFrames, which works, but it's very tedious to set up all of the individual key frame times. ... Read more
Using Win32 Icons in WPF
Extracting Icons from PE Files
There are times when you need an icon file, but all you have is an icon resource embedded in a PE (executable) file. Getting at these is a little tricky, since icon files aren't stored as a simple blob in the PE file. In fact, they're split up into a number of different entries. Fortunately, it isn't very hard to combine these entries into an ICO-format data blob which you can then save to file or pass to an API that expects it. ... Read more
Working With Win32 Resources in .NET
Most native applications make extensive use of Win32 resources. While the .NET Framework provides a far more useful resource API, it's sometimes necessary to access the old style Win32 resources. Fortunately, this isn't very difficult. ... Read more
Windowed Fullscreen
Windowed (fake) fullscreen is probably my favorite graphics option ever when it comes to PC games. It lets me have my nice fullscreen game, but doesn't lock me out of using my other monitor, and any programs running behind the game are an instant ALT+TAB away. Games that can go from fully windowed to fake-fullscreened in an instant are also super cool, and not all that difficult to write. So how does one implement such a thing? ... Read more
Getting Started with OpenSL on Android
Edit: This article, as originally posted, has an error in it, which has been corrected. Anyone who just wants to see the fix can check out this update. ... Read more
Abstracting Low-Level I/O
One of the common requirements in game development is that we need to load large blocks of (usually) compressed data in as little time as possible. This, however, is somewhat easier said than done. Ideally, what we're looking for is a simple asynchronous I/O API. ... Read more
Simple Digital Signatures
One of the things that comes up when sending data over the internet is verifying that it hasn't been corrupted. This is generally a simple thing to resolve: send the data and a good hash (MD5 or SHA-1) of the data together. Recompute the hash on the client side and compare it to the hash you sent. If any bits have changed, the two won't match, and you know you need to redownload the file. I suppose it's possible both the data and hash could be corrupted in such a way that they match, but if your hash function is any good then the likelihood of this happening by chance is so astonishingly low that it doesn't bear consideration. ... Read more
iOS Compiler Bug: -O3 FIXES It?!
This is officially the strangest optimization-related compiler bug I've ever seen. ... Read more
Using Win32 Asynchronous I/O
Recently wrote some asynchronous I/O code for a fast data loader. The data file was logically a stream of separate objects, so it made sense to parse it a chunk at a time. That's a situation which practically screams for asynchronous I/O. Unfortunately, it's rather hard to find a useful example on how to use the relevant APIs... ... Read more
iOs Compiler (Bug?): "invalid offset, value too big"
This is a bug that's bit me a few times already. Basically, the iOS compiler fails to generate some function somewhere in the code file causing it to bail with the error "invalid offset, value too big". Problem is, it doesn't tell you which function it failed on (the numbers surrounding the error seem largely meaningless). ... Read more
WPF: Subtle Binding Crash
Got a crash in, of all things, System.Windows.Controls.Primitives.Popup.OnWindowResize(Object sender, AutoResizedEventArgs e)
. A NullReferenceException
, to be precise. Ages later, it turns out that this error was actually caused by a binding operation on one of the controls in the popup failing because it was trying to instantiate itself as TwoWay
with a read-only source property. Somehow, the binding error managed to turn into the NullReferenceException
in the layout pass... ... Read more
How to Make boost::function-like Templates
If you've dealt with Boost at all, you've certainly seen this at some point: ... Read more
cgConnectParameter Considered Harmful
Hooking up a large number of shared effect parameters to a single head parameter via cgConnectParameter
is, apparently, not the intended use case. Doing so causes any cgSetParameter
call on the head parameter to become orders of magnitude slower (though the amount is proportional to the number of connected effect parameters). This is also the case when deferred parameter setting is used, which is a fairly surprising result, given that it should mean that parameter values don't force any sort of evaluation until something actually goes to read from them. ... Read more