Surface (=RenderToTexture2D avec le Screen)

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Surface (=RenderToTexture2D avec le Screen)

Message par blendman »

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.