SFML community forums

Help => Graphics => Topic started by: pighead10 on October 29, 2012, 02:51:57 pm

Title: Sizing RenderTexture resizes graphics
Post by: pighead10 on October 29, 2012, 02:51:57 pm
As I am using multiple views of the same screen I am drawing to a RenderTexture, which I then draw to the RenderWindow. At the beginning of my program the RenderTexture is created to twice the size of the window. I was expecting my rendering area to be increased (e.g. so the size of  the window was 600x600 but I could render to this texture at (800,800) ), but instead when I draw all my graphics were scaled up - so my 32x32 sprites became 64x64, and the positions were scaled - creating the RenderTexture double the size just stretched it.

Here is what I'm doing each rendering frame (in pseudocode):
rendertexture.clear()
window.clear()
rendertexture.setView(view)
rendertexture.draw(all)
rendertexture.display()
window.draw(rendertexture)
window.setView(minimap)
window.draw(rendertexture)
window.display()

I'm trying to have the minimap display the same screen as the main view except the area that is shows is double the size. If the RenderTexture didn't stretch I would be able to do this (SFML 2, but not the most up to date version).



Title: Re: Sizing RenderTexture resizes graphics
Post by: Laurent on October 29, 2012, 03:06:50 pm
What's displayed in your render-window is defined by the view. If you make your render-texture larger but don't change the view, things will just get stretched. If you want to see a larger region of your scene, you must adjust the view too.

Quote
rendertexture.setView(minimap)
window.draw(rendertexture)
Changing the view without drawing anything will have no effect. It doesn't draw or resize anything, it just changes how the next entities will be drawn.
Title: Re: Sizing RenderTexture resizes graphics
Post by: pighead10 on October 29, 2012, 03:55:32 pm
Quote
rendertexture.setView(minimap)
should be window.setView(minimap). Edited.

Quote
What's displayed in your render-window is defined by the view. If you make your render-texture larger but don't change the view, things will just get stretched.

Here is an image - hopefully this will explain what I mean:

(https://dl.dropbox.com/u/53835113/rendertexture.png)
Title: Re: Sizing RenderTexture resizes graphics
Post by: Laurent on October 29, 2012, 04:00:56 pm
I had correctly understood your problem. Did you understand my answer?

It seems like you don't understand how view work (your second and third pictures are wrong), you should read the tutorial/doc/wiki (there's a good tutorial on the wiki).
Title: Re: Sizing RenderTexture resizes graphics
Post by: pighead10 on October 29, 2012, 04:11:30 pm
I incorrectly understood your answer as not understanding my problem. :(

I have read the documentation and the wiki - I may understand something incorrectly. As I understand, in my scenario the view will display a portion of the rendertexture. The mental image I have of what's happening is the 3rd image, and you say it is wrong - what does actually happen?
Title: Re: Sizing RenderTexture resizes graphics
Post by: Laurent on October 29, 2012, 04:24:19 pm
The view always covers the entier target, unless you play with the viewport (which doesn't seem to be the case). That's why your second and third pictures, where the view stays stuck at the old size, are wrong.

What I'm trying to explain is that the view always displays the same region of the scene if you don't change it. No matter how big is the target on which it is displayed. What you see on screen is what's inside the view, so if you want to see more stuff, you must make it bigger (zoom out).
Title: Re: Sizing RenderTexture resizes graphics
Post by: pighead10 on October 29, 2012, 04:48:55 pm
I understand now!  ;D Thanks!