Followers 0

# A question about the word "rendering"

## 6 posts in this topic

So the specific context here involves SFML2 and sf::RenderTexture, but I think there is some generality here.

So I have a tile map and up until now I've been sending invidual draw commands for each and every tile.  I've read here and other places that this is generally considered bad form and that you're much better off putting together everything on your screen to be drawn and then sending one draw command.  That makes sense and I understand the reasoning behind it just fine.

My question is, can I assume that if I'm not actually drawing to the screen that I'm not actually rendering anything?  Or is this completely false?

Consider this:

sf::Sprite tile1;
sf::Sprite tile2;
sf::RenderTexture builder;
sf::RenderWindow screen;

builder.Draw(tile1);
builder.Draw(tile2);

screen.Draw(builder);


I know that code is incomplete, I just wanted to get my point across.

So in this case, am I "rendering" 1 time?  or 3 times?  Am I accomplishing my goal of only drawing to the screen once?  Or not?

The additional question is, if I'm not, how would I do it instead?

thanks for the help!

0

##### Share on other sites

It is false.

Reasoning behind drawing everything in 1 draw call is CPU usage. When you draw driver has to make sure all resources are correct, perform error checking & other things which eats reasonable amount of performance.

You say you draw to "screen", but actually you draw into texture, just later on it gets sent into the screen, so the difference between your current code and in this post is that you send different texture to screen.

What you want is called instancing. You'll have to search through SFML documentation how to use it, but general idea is that you set model's buffer (in your case tile), then set 2nd buffer which is an array of positions for those tiles, then draw 100 tiles and it'll merge those buffers, allowing to draw 100 tiles with single call.

2

##### Share on other sites

Thanks for the help, that should give me enough to figure it out.  :)

0

##### Share on other sites

So I have a tile map and up until now I've been sending invidual draw commands for each and every tile.  I've read here and other places that this is generally considered bad form and that you're much better off putting together everything on your screen to be drawn and then sending one draw command.  That makes sense and I understand the reasoning behind it just fine.

Usually when people are talking about that, they are referring to when drawing millions of 3D triangles or hundreds of thousands of 2D particle effects. A few thousands tiles shouldn't slow down your program much - is your program running abnormally slow?
0

##### Share on other sites

No, not at all.  The reason I brought it up is just because I'm revamping some aspects about how I draw everything already for unrelated (mostly code manageability) reasons and just thought that if there was a more "standard" way to do this that this would be a good time to learn it.

Would you say proceeding as I have been is a-ok?

0

##### Share on other sites

Thanks so much for the advice.  :)

0

## Create an account

Register a new account