Water ... that adapts itself to the flow, that breaks everything like a sword
Mixing libraries
Get link
Facebook
X
Pinterest
Email
Other Apps
-
Let us try blogging again. If you search L.B.A. Tribute news you can find them at coffemonsters.com Here we will be focusing on more technical stuff.
These days I'm tracking some delay in the processing of interaction between my UI (Qt) and Backend (custom code). Generally still far from resolving issues but slowly digging through problems. One of them hit me as an interesting one: QtTimer.
I'm using them because they are the most efficient way of injecting some processing into Qt. If this claim is true I'm not sure but they for sure work better than anything I tested so far.
Generally, my whole tooling is based on multiple processes that communicate with each other. I got a little bit more into the details in the presentation that I did recently:
This setup result that I have multiple Qt event queues processing at the same time. One in the base process and one in the sub-process. It is really important, that they are processed efficiently because I discovered the hard way that if one of them lags other can lag too. Issue that on top of the Qt events I need to process in equal intervals some other tasks.
I thought originally that I would be processing events for some time and then move to additional ones:
QApplication app;
while(!isTerminated())
{
app.processEvents(QEventLoop::AllEvents, 100);
apiEditorMainLoop();
}
This turned out to be pretty inefficient as processing events with a timelimit is in Qt an active wait. Processes that did not have a lot happening were eating my CPU powers like kid candies :/ I dig a little bit and a better option would be to just allow Qt to process all system events without any timer. Then. Qt can enter wait on object which is more CPU efficient.
And it turned out it was as now I achieved a nice 0.01 CPU use for the majority of apps. But today digging around in the profile I discovered an issue:
What happens is that in apiEditorMainLoop() I'm using SDL_PollEvent(...) which leads to nested calls.
From what I understand QtTimer uses system timers that can be triggered while processing events using SDL. But I of course can be wrong here.
Still, it is interesting for me how sometimes while mixing some libraries we get this weird stuff.
So like always start with problem description: I have some pool of command represented as enumerator. Each of command can have unique data that size can be different. I wanted to create system that allow me in easy way iterate over them and execute. After some time I created this implementation: template<ECommands::enum cmd> bool execCommandTemp(ECommands::ENUM a_cmd, void* a_data) { if (a_cmd == cmd) { SCommand<cmd>::execute((SCommand ::SData*)a_data); return false; } return execCommandTemp<(ECommands::ENUM)(cmd+1)>(a_cmd, a_data); } template<> bool execCommandTemp<ECommands::WRAP>(ECommands::ENUM a_cmd, void* a_data) { return true; } bool execCommand( ECommands::ENUM a_cmd, void* a_data ) { return execCommandTemp<(ECommands::ENUM)0>(a_cmd, a_data); } where SCommand look in example such a way: template <> st...
This time light topic of UI designing :] But before this let's discuss how the hierarchy in the engine works. So it was easier to understand these, let's look at the tooling of it: We have there: World (ID:0) Loaded Stream (Citadel Island) Loaded SubStream (CI.Citadel) Unloaded SubStream (CI.Logic) Folders (f.ex. Park) Entities (f.ex. Ferry) If you are curious what a Stream is, you can think about it as a scene or a level. Now that we know all of this let's look a little bit closer at what we have. Streams and SubStreams are exactly the same I change the name based on their position in the hierarchy. The Folders may look different than Entities but they are exactly the same. They are Entities with a folder component. If we go this way streams are also just Entities with a Stream Component. This leaves us with a bunch of the entities under the World . Which as you can suspect is just an Entity with ID equal to 0....
And as I said last time new preview is available: As you can see a lot has changed. Right now I mostly focus on gameplay so I do test of AI (some of them you can see on end of movie), changes in fight, items managing, fix some problem with physics and many other things. To say truth I don't remember them all :P So I'm going back to work and till next week.
Comments
Post a Comment