Time for another update. These past two weeks I've been trying to clean up how I've been implementing things, since a lot of my code thus far has been pretty prototypey. I have the backend at a point where I can start to turn to other features, like multitouch. This past week I implemented some basic mouse emulation, which you can take a look at here:
This week has been one where work has been less visible. I've been trying to get the Panda lifecycle completely working, which has been quite difficult without good debug tools. I guess that's good motivation to get PStats and the like working! I also have a build going for the iOS simulator, and I'd like to figure out a way of lipo-ing those two libraries together for distribution. I'm pretty sure CMake supports something like this, but I still need to look into it. For this next week, I'll be trying to get Panda startup and shutdown completely working, so you can properly switch between samples without memory leaks.
This past week was very productive. I got many of the Panda samples running inside an iOS app. Here's one of them:
This app allows you to go back and forth between all of the samples included with the Panda3D game engine. Since the samples cover a wide range of features, it's great for testing. It was (and still is) quite a challenge to get Panda and iOS melding properly, but I'm glad I'm finally getting some visible results. For this next week I'm going to see if I can get baseline version of the iOS display backend up for other people to try. See you all then!
Welcome to my third weekly check-in. I got a lot done over the past week, so let's talk about it.
During the first part of the week, I spent a large amount of my time attempting to wrangle the Python interpreter into actually running inside an iOS app. During the build process, Python generates a sysconfig file that contains variables that were used during the build that may be useful to Python later on. Unfortunately, this generation cannot happen on iOS easily, since it requires an arm64 device to actually run on. The solution to this ended up being to generate this sysconfig file in the Simulator, and make some changes to it manually for the Device version. This works well enough, and I haven't run into any issues with it yet, but we'll see.
The second half of this week, I turned towards brainstorming about how to adapt Panda's startup process to the iOS app lifecycle. Up until this point, Panda has been a game engine that runs exclusively on desktops, and as such, it is used to having complete control over the application lifecycle. Things work a bit differently on iOS (and Android!), however, which will require me to make some changes with how Panda handles it. Coming up with a formal design for this will be one of my primary tasks for this coming week.
Along with this, I am going to try and come up with a way to get Panda along with the Python interpreter to run in a separate thread entirely from the main UI thread. This will make it so I will have to make fewer changes to Panda in order for the UI thread to get the time it needs. I plan on publishing a more detailed write-up about how I will accomplish this soon.
That's all I have for this week. See you next time!
With the second week of work wrapping up, I believe an update is in order. I have successfully gotten both the thirdparty tools and Panda itself to compile for both iOS devices and the simulator. It was a bit of a slog getting this to work, to be honest, since it's mainly a loop of trial and error trying to get things to fit together correctly. The following libraries are now ready for inclusion on iOS:
This leaves only a few libraries that aren't working (and are probably impractical for iOS anyways, like VRPN). I'm quite happy with this, because although I was able to get Panda itself to compile several months ago, this is the first time I have done it with almost all of the thirdparty libraries included. It has been quite a struggle wrangling with the often strange ways Apple does things, but I believe this thorough preparation I've performed will be worth it down the road.
This post comes at an odd time, admittedly, since these next two weeks are where the real meat of the work is going to start. But, posts are required every two weeks, so here it is. Hopefully the work going forward will be a bit more exciting for people to read about, and won't involve me waiting for rebuilds for nearly as long ;)