Page 1 of 1

Screen & Sprite Request (Surface)

Posted: Sat Jun 06, 2015 12:15 pm
by [blendman]
Hi

Here are some requests, for the Screen and sprite system, which is great.

Surface - rendertotexture2D (draw on a surface (like DirectX surface))

Informations
For the game or graphic application it would be very great to have a surface. We could make the drawing on a surface (like the directX or OpenGL surface (renderTotexture)).
If the surface is in OpenGl, we could use the shader on it.
With the screen and Sprite, we can use in game and even on graphic appli.

Fonctions
CreateSurface(#Surface, width, height,[flag]) ; flag : transparent or not, depth(32), like the images. width et height could be > screenwidth and screenheight, very usefull in a 2D application.
FreeSurface(#surface) : to delete the surface
ResizeSurface(#surface,x,y,width,height) ou ZoomSurface(#surface, w,h) (likezoomsprite())
SaveSurface(#surface, Filename$, [format, option]) ; format : png, jpg.., option : quality for jpg (like saveImage())
Surfaceoutput(#surface) for startdrawing() : to draw on the surface
DrawSurface(#surface,x,y,[flag]) : like drawimage() or displaysprite, we have to display the surface on screenoutput(), imageoutput(), canvasoutput()... Flag could be the alpha (like DrawAlphaImage()).

ClearSurface(#surface, [color]) : I don't know if it's really necessary (like clearScreen()), because, if we can use surfaceOutput(), we can clear the surface by our-self).

Example of use

Game : drawing sprites on the surface, with a special blendmode (spriteblendingmode()), shaders... It's very used in video game (it's rendertotexture()), for the fx (water, reflexion, light engine, shadow, and a lot of post-fx).

Application : in a graphic (or in an application which need some graphic screen), we could draw on a surface with the screen and sprites.
The performances would be excellent, because we can easily display 50 layers (1 layer = 1 sprite), use a 3000*3000 size document and have a very good fluidity for the appli.
Ex :
- we display sprite (layer under the current layer)
- we draw on the surface (current layer) the Sprites, or shader if it's possible ^^.
- we display the surface
- we display the other sprites (layers over the current layer)
And here we have a 2D application like photoshop :), in which we can use very big image size (5000*5000 if the surface can have this size)






FR (pour Fred) :

Surface (rendertotexture2D avec screen, sprite...)
Informations
Que ce soit pour les jeux ou pour une application graphique, ce serait vraiment intéressant d'avoir la possibilité d'effectuer le rendu de sprite ou dessin (avec le screen donc) sur une surface (comme les surfaces directX).
L'idéal serait que ce soit en opengl, afin de pouvoir utiliser des shaders aussi sur ces surfaces.

Fonctions
CreateSurface(#Surface, width, height,[flag]) ; flag : transparent ou non, profondeur (32), comme les images. width et height pourraient être supérieures à la taille d'écran, pour créer par exemple des images.
FreeSurface(#surface) : pour supprimer la surface
ResizeSurface(#surface,x,y,width,height) ou ZoomSurface(#surface, w,h) (comme zoomsprite())
SaveSurface(#surface, Filename$, [format, option]) ; format : png, jpg.., option : qualité (jpg)
Surfaceoutput(#surface) pour startdrawing() (pour dessiner sur la surface)
DrawSurface(#surface,x,y,[flag]) : comme drawimage() ou displaysprite, on doit pouvoir afficher la surface sur screenoutput(), imageoutput(), canvasoutput()... Flag pourrait être l'alpha de la surface.

ClearSurface(#surface, [color]) : je ne sais pas si c'est nécessaire (comme clearScreen(), car si on peut utiliser surfaceOutput(), on peut effacer nous-même).

Exemple d'utilisation

Jeu : dessiner un/des sprites sur la surface (avec un blendmode spécial), des shaders, etc... C'est très utilisé dans les jeux vidéos 2D pour les effets (eau, chaleur, réflexion, moteur de lumière, et plein de post-fx ou autre etc)

Application : dans une application graphique, ça permettrait de dessiner sur une surface avec le screen et les sprites. Et donc, au niveau performance c'est énorme, car on peut facilement afficher 50 calques (sprites) en 3000*3000 (voire plus) en restant hyper fluide et en dessinant sur la surface :).
Exemple : on affiche des sprites (calques du dessous), on dessine un sprite sur la surface (calque courant) qu'on affiche directement ensuite et on affiche les sprites du dessus (calques du dessus). Et le tour est joué, on a une application de dessin qui gère de grandes images, permet de dessiner de manière très fluide.