Jump to content
  • entries
    940
  • comments
    5,894
  • views
    863,980

Fun with Stateless API


Josh

3,866 views

 Share

Leadwerks 5 / Turbo makes extensive use of multithreading. Consequently, the API is stateless and more explicit. There is no such thing as a "current" world or context. Instead, you explicitly pass these variables to the appropriate commands.

One interesting aspect of this design is code like that below works perfectly fine. See if you can work through it and understand what's going on:

int main(int argc, const char *argv[])
{
	//Create a model ;)
	auto box = CreateBox(nullptr);

	//Create the world
	auto world = CreateWorld();
	
	//Create a camera
	auto camera = CreateCamera(world);
	camera->Move(0,0,-5);

	//Create an instance of the model in the new world
	auto model = box->Instance(world);

	//Create a window
	auto window = CreateWindow();

	//Create a rendering context
	auto context = CreateContext(window);

	while (not window->Closed())
	{
		if (window->KeyDown(KEY_ESCAPE)) window->Close();
		world->Update();
		world->Render(context);
	}
	return 0;
}

 

 Share

5 Comments


Recommended Comments

Just to play devils advocate, instead of having global functions like CreateBox() CreateCamera() and passing in the world, what about functions tied to the world itself like world->CreateCamera(), world->CreateBox()?

Link to comment
1 minute ago, Rick said:

Just to play devils advocate, instead of having global functions like CreateBox() CreateCamera() and passing in the world, what about functions tied to the world itself like world->CreateCamera(), world->CreateBox()?

Good question.

  1. Entities can be created without a world, as shown in the example above.
  2. It's ugly.
Link to comment

If we were following C++ ideology we would not have a creation function at all. You would do this for each object created:

auto model = make_shared<Model>(world);
model->MakeBox();

And I would go out of business because no one would want to use it. ?

Link to comment

I suppose the closest you could get is having static methods on the class that do the same thing as your straggler C methods. Might help with intellisense to have that instead of having to remember?

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...