## News:

*NEW* Current Version on STEAM16.793

Webchat:
Visit the chat

## GLBasic Contest 02: 2D Art

Hi,

here we go, it's time for an other contest:

Definition

Write a 2D art program in GLBasic. It should be a little piece of art, not an art creation program.

Rules

• Write the whole program only in GLBasic
• no third party libraries
• Keep the code short and simple
• Make the result look impressive

Goal

Show us your best little art project, with or without movement and impress us.

Submission

Just post your code here in a codeblock, so everybody can study your awesome work.

Closing Date

19.05.2019

Example

Here is my little example. It's an optical illusion.

If you press the space bar, you can start and stop the movement.

Code (glbasic) Select
`TYPE tRect x y direction speedENDTYPEGLOBAL rect[] AS tRect, spacemain()FUNCTION main: generateRects() WHILE TRUE drawLines() drawBoxes() IF INKEY\$() = " " INC space, 1 IF space > 1 THEN space = 0 ENDIF SHOWSCREEN WENDENDFUNCTIONFUNCTION generateRects:LOCAL r AS tRectLOCAL offset FOR tmpY = 0 TO 15 offset = RND(25) r.direction =  MOD(tmpY, 2) r.speed = 100 + RND(200) FOR tmpX = 0 TO 10 r.x = 0 + (tmpX * 60) + offset r.y = 5 + (tmpY * 30) DIMPUSH rect[], r NEXT NEXTENDFUNCTIONFUNCTION addRect: x, y, directionENDFUNCTIONFUNCTION drawLines:LOCAL tmpY FOR tmpY = 0 TO 15 DRAWRECT 0, 0 + (tmpY * 30), 640, 5, RGB(128, 128, 128) NEXTENDFUNCTIONFUNCTION drawBoxes: FOREACH r IN rect[] IF space = TRUE IF r.direction = 0 INC r.x, r.speed / 500 ENDIF IF r.direction = 1 DEC r.x, r.speed / 500 ENDIF ENDIF DRAWRECT r.x, r.y, 5, 25, RGB(128, 128, 128) DRAWRECT r.x + 5, r.y, 25, 25, RGB(255, 255, 255) DRAWRECT r.x + 30, r.y, 5, 25, RGB(128, 128, 128) IF r.x < -30 r.x = 640 ENDIF IF r.x > 640 r.x = -30 ENDIF NEXTENDFUNCTION`

Winner

This is a fun contest and there is nothing to win... Nevertheless, together we can choose a winner...

Good luck and have fun.

=====

Winner of the contest:

Qedo (50%) & Snoopy (50%)

AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

I know, this contest looks pointless at first, but it's pretty handy for backgrounds or scenes in games
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

#### Hemlos

#2
This is an experimental piece i tinkered with a few years ago, hardly worth being called art.
It uses a rocking motion of sins and cos. eg. -1 to 1 to -1 to 1 etc

1. compile fullscreen 1920x1080
2. dont forget to grab this background image, or the special effect at the end will not look right.

Code (glbasic) Select
`// --------------------------------- //// Project: ColorPalette// Start: Saturday, August 08, 2015// IDE Version: 12.312// compile 1920 x 1080 resolution fullscreenLOADSPRITE "sky2.png", 9999WHILE TRUE STATIC a# = 0 a# = a# + 0.1 IF a# > 359.0 a# = 0.0 ENDIF b# = SIN(a#) * 127.0 // the meters - still experimenting with colors..these are read to go...they have inputs [0.0..1.0] or [-1.0..1.0] METER_Volume(30,40,20,300,SIN(a/2)) METER_SINE(60,40,20,300,SIN(a) )//, 0x604020, 0x707070) METER_SINE(90,40,20,300,COS(b) )//, 0x604020, 0x707070)// stars DrawStar(200,500, 0xffffff, 5 , -50 , a , 0.5) DrawStar(300,600, 0xff00ff, 5 , -100 , a , 0.75) DrawStar(200,640, 0x808080 + RGB(COS(a)*127,128,0), 24 , -128 , 0 , SIN(a) * 1.0) DrawStar(200,640, 0x808080 + RGB(0,COS(a)*127,128), 24 , -128 , a , 0.2) // fractal sun // this one needs HEAVY experimenting! MakeSun(960,540, 2048, 2048+COS(b)*2048, 1, RGB( (127+COS(b*10)*127), (127+SIN(b*10)*127),COS(b*5)*127+127), 0x000000, b#, 0.1)  //this is the fractal...its a lil messy IF (GETTIMERALL() >20000) c=c+0.01 IF c>1.0 THEN c=1.0 DrawStar( 940, 540, 0xffffff, 5, 9999, a, c) ENDIF IF (GETTIMERALL() >24000) THEN END SHOWSCREENWEND//FUNCTION MakeSun: x1%, y1%, Points2%, Size2%, Wander%, Color#, Color2#, Angle#, Depth# DrawStar(x1% , y1%+2 , Color#, Points2%, -Size2%  ,  COS(Angle#)*2.0, Depth#) DrawStar(x1% , y1% , Color2#, Points2% , -Size2% ,  0 , Depth#) RETURN 0ENDFUNCTIONFUNCTION METER_SINE: x%, y%, w%, h%, Level#, Color1% = 0x00f0f0, Color2% = 0xf0f000 // Level# = -1.0 to 1.0 eg. [-1.0..1.0] IF Level# < -1.0 THEN Level# = -1.0 IF Level# > 1.0 THEN Level# = 1.0 PRINT Level,10,10 LOCAL MeterLevel# = (h% - 1 ) * Level# POLYVECTOR x%,y%,w%,h%,0x0000f0 DRAWRECT x%+2,y%+2,w%-4,h%-4,Color2% DRAWRECT x%+4,y%+4,w%-8,h%-8,Color2% * 0.4 DRAWRECT x%+4,y%+(h%/2),w%-8,-MeterLevel#/2,Color1% RETURN 0ENDFUNCTIONFUNCTION METER_Volume: x%, y%, w%, h%, Level#, Color1% = 0x806040, Color2% = 0xf0f000 //Level# = 0 to 1.0 [0..1] IF Level# < 0 THEN Level# = 0 IF Level# > 1.0 THEN Level# = 1.0 PRINT Level,10,10 LOCAL MeterLevel# = ( h% - 4 ) * Level# DRAWRECT x%,y%,w%,h,Color1% DRAWRECT x%+4,y%+4,w%-8,h%-9,Color1% * 0 DRAWRECT x%+4,y%+h%-4,w%-8,-MeterLevel#, Color2% RETURN 0ENDFUNCTIONFUNCTION DrawStar: x%, y%, Color#, NumberOfPoints%, TextureID%, Rotate#, Depth# // make some stars! -TextureID# = SIZE If No Sprites ID is supplied. (-) Negative ID // Star Creator Code Designed Neil M. Silver,  Aug. 9, 2015 // // The Algorithm: // -- //   NumberOfPoints = Number of visually obvious points, eg. An American Star is 5 pointed. // -- //   Vector Count = The number of actual vectors a polyvector needs, in fan mode, can be calculated: // //     ( V = P * 2 + 2 ) //     VectorCount% = ( NumberOfPoints% * 2 ) + 2 ) //     Note: Add Two, one for the center point, one for the last point. // -- //   VectorAngleSize% = is the turn size for each vector to draw. //     ( A = 180 / P ) //     VectorAngleSize# = ( 180.0 / NumberOfPoints% ) // -- //   Depth% //     The inner and outer radius represent the length of the points, and the depth of thier inner corners. //     The Depth% value is a scalar, a ratio of the outer radius, 0.5 is good for stars...play with this [0.1~~1.0] // //                           . ________________ //                                            ^ //                    .   .    .     .        |   Outer Radius //                                            V //                       .     ________________ //                                            V  Inner Radius (Depth#) //                           .   ______________ //                      .          . // // // --    //   Rotate%, 360 degrees    // -- //  A negative value for TextureID% will make the star that size, without an image. //  eg ( TextureID%  = -5 ) will make the star 10 wide, radius 5...no skin. // --    // // Other notes: // Its midhandled. // Use a square image, root 2 // STATIC Phase% LOCAL iW%, iH%, ViR#, VoR# LOCAL VectorCount% = ( ( NumberOfPoints% * 2 ) + 2 ) LOCAL VectorAngleSize# = ( 180.0 / NumberOfPoints% ) * 1.0 LOCAL tX#, tY#, vX#, vY# // Get the outer radius: IF TextureID% >= 0 GETSPRITESIZE TextureID%, iW%, iH% ViR# = ( iW% * 0.5 ) * Depth# VoR# = ( iW% * 0.5 ) * 1.0 ELSE VoR# = ABS(TextureID%) //use -textureid for a size param ViR# = ( VoR# * Depth# ) ENDIF //STAR: STARTPOLY TextureID%, 0 // FAN Mode only! POLYVECTOR x%, y%, VoR#, VoR#, Color# // center vector LOCAL AngleNow# FOR i% = 0 TO VectorCount% - 1 AngleNow# = ( ( VectorAngleSize# * i% * 1.0 ) + Rotate# ) * 1.0 Phase% = Phase% + 1 IF Phase% > 1 Phase% = 0 ENDIF IF Phase% vX# = COS( AngleNow# ) * VoR# vY# = SIN( AngleNow# ) * VoR# ELSE vX# = COS( AngleNow# ) * ViR# vY# = SIN( AngleNow# ) * ViR# ENDIF tX# = vX# + VoR# tY# = vY# + VoR# POLYVECTOR x% + vX#, y% + vY#, tX#, tY#, Color# NEXT ENDPOLY RETURN 0ENDFUNCTION`
Bing ChatGpt is pretty smart

This is awesome
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

#### bigsofty

Quote from: Hemlos on 2019-Apr-20
This is an experimental piece i tinkered with a few years ago, hardly worth being called art.

I disagree, very much art!
Cheers,

Ian.

"It is practically impossible to teach good programming style to students that have had prior exposure to BASIC.  As potential programmers, they are mentally mutilated beyond hope of regeneration."
(E. W. Dijkstra)

#### SnooPI

Hemlos is a very very good programmer.

A professional level.

#### Hemlos

I'm not a pro, but i have read a few books.
And to give credit where it's due, Gernot was a huge influence on my thirst for math.
I'm looking forward to more entries!

About the program, it was simply really.
It was a benchtest program to show what the function DrawStar() could do.
DrawStar was a brainstorm, as you can see in the remarks of the function showing a progression of the idea.
All the effects, are a result of using several combinations and configurations of this function:
Code (glbasic) Select
`DrawStar(x%, y%, Color#, NumberOfPoints%, TextureID%, Rotate#, Depth#)`

Bing ChatGpt is pretty smart

#### SnooPI

You can have a professional level without being a professional.
In fact, I was talking about your work in general, not just this program. For example, your particle engine was really good.
But if you prefer me to say that you are an average programmer, ok no problem

I will try to do something (I like the concurence friendly). The code of WPShadow is simpler but the optical effect is nice (and according to the rules of the contest, the complexity doesn't matter this time).

Ps : Since I really rediscover the interactions between GLB and C, Gernot is not only for me a very good programmer, but my living god

#### Hemlos

Quote from: Snoopy on 2019-Apr-24
I will try to do something (I like the concurence friendly). The code of WPShadow is simpler but the optical effect is nice (and according to the rules of the contest, the complexity doesn't matter this time).

Sounds good, looking forward to more entries.
I like these contests because it gives access to some cool functions.
The more the merrier!
Bing ChatGpt is pretty smart

QuoteI like these contests because it gives access to some cool functions.

That's my idea. Short little codes and everybody can learn something from the different programming styles
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

#### dreamerman

I had no idea for something small & simple and didn't want to copy another plasma/fire example so I made this, nothing special, just to have more entries in competition.  Code isn't piece of art, so..

Main source:
Code (glbasic) Select
`// --------------------------------- //// Project: 2dpixart// by dreamerman_pl// only GLBasic code// coded to run in 640x480//TYPE point2d    x%    y%ENDTYPETYPE point_struct    pos AS point2d    vec AS point2d    target AS point2d    dir_num%    color%ENDTYPE            GLOBAL my_point[] AS point_structGLOBAL my_point_count% = 1000       // how many moving rectanglesGLOBAL endit% = 0GLOBAL i1%, anim_pos%, txt_pos AS point2dDIM my_point[my_point_count%]SMOOTHSHADING FALSE         // prefer stronk pixelsLIMITFPS 60CREATESCREEN 0, 1, 640, 480prepare_text()// set some pointsFOR i1% = 0 TO my_point_count%  -1    my_point[i1%].pos = ret_p2d(RND(639), RND(479))    find_newtarget(i1%)    my_point[i1%].color% = RGB(RND(4)*64-1, RND(4)*64-1, RND(4)*64-1)   // yeap some may be totally black :DNEXTREPEAT    CLEARSCREEN    USESCREEN 0    ALPHAMODE -0.025    DRAWRECT 0, 0, 640, 480, RGB(0,0,0)    ALPHAMODE -0.25        // move rectangles    FOR i1% = 0 TO my_point_count% - 1        IF (my_point[i1%].pos.x% = my_point[i1%].target.x%)            IF (my_point[i1%].pos.y% = my_point[i1%].target.y%)                find_newtarget(i1%)            ELSE                INC my_point[i1%].pos.y%, my_point[i1%].vec.y%            ENDIF        ELSE            INC my_point[i1%].pos.x%, my_point[i1%].vec.x%        ENDIF        DRAWRECT my_point[i1%].pos.x%-3, my_point[i1%].pos.y%-3, 7, 7, my_point[i1%].color%    NEXT        USESCREEN 1    ALPHATESTING 1.0    ALPHAMODE -1.0    // text background animation, what a crap code :D    INC anim_pos%, 2    IF anim_pos% > 500 THEN anim_pos% = anim_pos% - 180    FOR i1% = 0 TO 800 STEP 5        DRAWRECT i1%, 0, 5, 200, RGB(128*ABS(SIN(i1%+anim_pos%)), 0, 255*ABS(SIN(i1%)))    NEXT        ALPHAMODE 0.0    glEnable(GL_BLEND)                      // change opengl blend func    glBlendFunc(GL_ONE, GL_SRC_ALPHA)       // so we can draw magenta-pink and transparent pixel at same time    DRAWSPRITE 3, 0, 0        ALPHATESTING 1.0    USESCREEN -1    ALPHAMODE 0.0    DRAWSPRITE 1, 0, 0                  // draw offscreen buffer with moving rectangles    glBlendFunc(GL_SRC_ALPHA, GL_ONE)    glDisable(GL_BLEND)                 // back to normal?    //CLEARSCREEN RGB(0, 255, 0)        // for tests    ALPHATESTING 1.0                    // draw magenta-pink as transparent    ALPHAMODE -1.0    DRAWSPRITE 2, txt_pos.x%, txt_pos.y%    // draw text inside    DRAWSPRITE 4, txt_pos.x%, txt_pos.y%    // text border    SHOWSCREENUNTIL endit% = 1END// return point2d typeFUNCTION ret_p2d AS point2d: x%, y%    LOCAL temp AS point2d    temp.x% = x%    temp.y% = y%    RETURN tempENDFUNCTION// find new target-direction for rectangleFUNCTION find_newtarget%: id%    my_point[id%].target = ret_p2d(RND(639), RND(479))    IF (my_point[id%].target.x% < my_point[id%].pos.x%); my_point[id%].vec.x% = -1    ELSEIF (my_point[id%].target.x% > my_point[id%].pos.x%); my_point[id%].vec.x% = 1    ELSE; my_point[id%].vec.x% = 0    ENDIF    IF (my_point[id%].target.y% < my_point[id%].pos.y%); my_point[id%].vec.y% = -1    ELSEIF (my_point[id%].target.y% > my_point[id%].pos.y%); my_point[id%].vec.y% = 1    ELSE; my_point[id%].vec.y% = 0    ENDIFENDFUNCTION// load image from Data section and draw with desired colorsFUNCTION prepare_txt_sprite%: screenid%, acode1%, color1%, acode2%, color2%    LOCAL i1%, i2%, i3%, i4%, i5%, czs1\$        RESTORE napis_glb    READ i1%, i2%    USESCREEN screenid%    ALPHATESTING 1.0            // force drawing all colors even transparent magenta-pink    ALPHAMODE 0.0    CLEARSCREEN 0x008000ff    // transparent color    FOR i4% = 0 TO i2% - 1        READ czs1\$        FOR i3% = 0 TO i1% - 1            i5% = ASC(czs1\$, i3%)            IF (i5% = acode1%)  // => if X                DRAWRECT i3% * 4, i4% * 4, 4, 4, color1%     // black border            ELSEIF (i5% = acode2%)  // => if :                DRAWRECT i3% * 4, i4% * 4, 4, 4, color2%     // transparent inside            ENDIF        NEXT    NEXT    ALPHATESTING 1.0    ALPHAMODE 0.0ENDFUNCTION// forcing 4x scaleFUNCTION prepare_text%:    LOCAL i1%, i2%, i3%, i4%, czs1\$, czs2\$, pix%[]    RESTORE napis_glb    READ i1%, i2%   // get size    txt_pos = ret_p2d((640 - i1% * 4) / 2, (480 - i2% * 4) / 2)     // calc position    CREATESCREEN 1, 2, i1% * 4, i2% * 4     // text effect    CREATESCREEN 2, 3, i1% * 4, i2% * 4     // text pink outside    CREATESCREEN 3, 4, i1% * 4, i2% * 4     // text black border    // prepare text sprites    prepare_txt_sprite(2, 88, 0x00000000, 58, 0x00000000)    prepare_txt_sprite(3, 88, 0x00000000, 58, 0x008000ff)    // now we can free those surfaces    CREATESCREEN 2, -1, 0, 0    CREATESCREEN 3, -1, 0, 0    USESCREEN -1    // back to back bufferENDFUNCTIONSTARTDATA napis_glb:// Ascii text made with: www.patorjk.com/software/taag/// used font: DohDATA 126, 16DATA "       XXXXXXXXXXXXXXXXXXXXXXXX              XXXXXXXXXXXXXXXXX                                      XXXX                      "DATA "     XXX::::::::::::XX:::::::::X            X::::::::::::::::X                                     X::::X                     "DATA "   XX:::::::::::::::XX:::::::::X            X::::::XXXXXX:::::X                                     XXXX                      "DATA "  X:::::XXXXXXXX::::XXX:::::::XX            XX:::::X     X:::::X                                                              "DATA " X:::::X       XXXXXX  X:::::X                X::::X     X:::::X  XXXXXXXXXXXXX      XXXXXXXXXX   XXXXXXX     XXXXXXXXXXXXXXXX"DATA "X:::::X                X:::::X                X::::X     X:::::X  X::::::::::::X   XX::::::::::X  X:::::X   XX:::::::::::::::X"DATA "X:::::X                X:::::X                X::::XXXXXX:::::X   XXXXXXXXX:::::XXX:::::::::::::X  X::::X  X:::::::::::::::::X"DATA "X:::::X    XXXXXXXXXX  X:::::X                X:::::::::::::XX             X::::XX::::::XXXX:::::X X::::X X:::::::XXXXXX:::::X"DATA "X:::::X    X::::::::X  X:::::X                X::::XXXXXX:::::X     XXXXXXX:::::X X:::::X  XXXXXX  X::::X X::::::X     XXXXXXX"DATA "X:::::X    XXXXX::::X  X:::::X                X::::X     X:::::X  XX::::::::::::X  XX:::::XX       X::::X X:::::X             "DATA "X:::::X        X::::X  X:::::X                X::::X     X:::::X X::::XXXX::::::X    XX:::::XX     X::::X X:::::X             "DATA " X:::::X       X::::X  X:::::X        XXXXXX  X::::X     X:::::XX::::X    X:::::XXXXXXX XX:::::XX  X::::X X::::::X     XXXXXXX"DATA "  X:::::XXXXXXXX::::XXX:::::::XXXXXXXX:::::XXX:::::XXXXXX::::::XX::::X    X:::::XX:::::XXXX::::::XX::::::XX:::::::XXXXXX:::::X"DATA "   XX:::::::::::::::XX:::::::::::::::::::::XX:::::::::::::::::X X:::::XXXX::::::XX::::::::::::::X X::::::X X:::::::::::::::::X"DATA "     XXX::::::XXX:::XX:::::::::::::::::::::XX::::::::::::::::X   X::::::::::XX:::XX:::::::::::XX  X::::::X  XX:::::::::::::::X"DATA "        XXXXXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXX  XXXX XXXXXXXXXXX    XXXXXXXX    XXXXXXXXXXXXXXXX"ENDDATA`
additional OpenGL functions, paste to second file:
Code (glbasic) Select
`INLINE#ifdef CENTERLINE_CLPP#define signed#endif#define OGL ::typedef unsigned int    GLenum;typedef unsigned char   GLboolean;typedef unsigned int    GLbitfield;typedef void            GLvoid;typedef signed char     GLbyte;typedef short           GLshort;typedef int             GLint;typedef unsigned char   GLubyte;typedef unsigned short  GLushort;typedef unsigned int    GLuint;typedef int             GLsizei;typedef float           GLfloat;typedef float           GLclampf;typedef double          GLdouble;typedef double          GLclampd;ENDINLINEGLOBAL GL_ALPHA_TEST                                      = 0x0BC0GLOBAL GL_ALPHA_TEST_REF                                  = 0x0BC2GLOBAL GL_ALPHA_TEST_FUNC                                 = 0x0BC1GLOBAL GL_BLEND                                           = 0x0BE2GLOBAL GL_BLEND_SRC                                       = 0x0BE1GLOBAL GL_BLEND_DST                                       = 0x0BE0GLOBAL GL_ZERO                                            = 0x0GLOBAL GL_ONE                                             = 0x1GLOBAL GL_SRC_COLOR                                       = 0x0300GLOBAL GL_ONE_MINUS_SRC_COLOR                             = 0x0301GLOBAL GL_SRC_ALPHA                                       = 0x0302GLOBAL GL_ONE_MINUS_SRC_ALPHA                             = 0x0303GLOBAL GL_DST_ALPHA                                       = 0x0304GLOBAL GL_ONE_MINUS_DST_ALPHA                             = 0x0305GLOBAL GL_DST_COLOR                                       = 0x0306GLOBAL GL_ONE_MINUS_DST_COLOR                             = 0x0307GLOBAL GL_SRC_ALPHA_SATURATE                              = 0x0308GLOBAL GL_CONSTANT_COLOR                                  = 0x8001GLOBAL GL_ONE_MINUS_CONSTANT_COLOR                        = 0x8002GLOBAL GL_CONSTANT_ALPHA                                  = 0x8003GLOBAL GL_ONE_MINUS_CONSTANT_ALPHA                        = 0x8004INLINE    }    extern "C" {        #include <cstdio>        void __stdcall glDisable( GLenum cap );        void __stdcall glColorMask( GLboolean red , GLboolean green , GLboolean blue , GLboolean alpha );        void __stdcall glAlphaFunc( GLenum func , GLclampf ref );        void __stdcall glBlendFunc( GLenum sfactor , GLenum dfactor );        void __stdcall glEnable( GLenum cap );        const unsigned char* __stdcall glGetString( int name );        }    namespace __GLBASIC__ {ENDINLINEFUNCTION glColorMask: red, green, blue, alpha INLINE OGL glColorMask(red, green, blue, alpha); ENDINLINEENDFUNCTIONFUNCTION glAlphaFunc: func, ref INLINE OGL glAlphaFunc(func, ref); ENDINLINEENDFUNCTIONFUNCTION glBlendFunc: sfactor, dfactor INLINE OGL glBlendFunc(sfactor, dfactor); ENDINLINEENDFUNCTIONFUNCTION glEnable: cap INLINE OGL glEnable(cap); ENDINLINEENDFUNCTIONFUNCTION glDisable: cap INLINE OGL glDisable(cap); ENDINLINEENDFUNCTIONFUNCTION glGetString\$: id%        INLINE                return DGStr((const char*)glGetString(id));        ENDINLINEENDFUNCTION`

Waiting for entries from others
btw. what about shaders? They can be used to make some crazy stuff, maybe separate them to another competition.
Check my source code editor for GLBasic - link Update: 20.04.2020

#### Qedo

And instead another plasma / fire example.
Surely there is something better but I hope you like it and above all that it is useful.

ps It's not entirely my idea. In the program the references of inspiration

#### Hemlos

Fantastic dreamerman, really nice!
And thank you for this, it might be useful for something i'm working on.
Bing ChatGpt is pretty smart

#### Hemlos

Qedo i don't know how that works, but i want to figgure it out!
Looks really cool!
Bing ChatGpt is pretty smart

#### dreamerman

@Qedo: Thank You, this will be usefully as it's looking really nice and there is no need to port/rewrite other fire effect if someone needs it

Background of fancy sprites with black-hole effect, and text filled with such nice fire as above. This would be great :> I hope that there will be more entries, there is still time.
Check my source code editor for GLBasic - link Update: 20.04.2020