Page 1 of 1

Posted: Wed Jan 14, 2009 12:57 am
by mpz
Hi dige,

i send this code and information to the english and german user forum. I got only one answer, the answer from you...

Her comes a alpha version of a Textur Shader testprogram.

Quickstart only for Windows user:
Left Mesh has no funktion (for now), right Mesh shows the loaded or created textur. You can load and save texures, load and save Shader, i write 6 demo shader. You Load a Demo shader, Compile it and then start the Code.

To Do list:
Help file, Variable input, Demo shader to change a image file and so on...

I hope somebody will help to write more interresting shader and then i will send more shader if i get response and help from you...

http://rapidshare.de/files/41342300/MP_ ... r.exe.html

best Michael

Code: Select all


;-
;- ProgrammStart
;////////////////////////////////////////////////////////////////
;//
;// Project Title: MP 3D Engine
;// File Title: MP_TexturShader.pb
;// Created On: 14.1.2009
;// Updated On: 
;// Author: Michael Paulwitz
;// OS:Windows
;// 
;// Demofile for Texturshader 
;// 
;////////////////////////////////////////////////////////////////


If CreatePopupMenu(0)
  MenuItem( 1, "Easy Color Demo")
  MenuItem( 2, "4 side Color Demo")
  MenuItem( 3, "Color Demo with Lines")
  MenuItem( 4, "Mandelbrot Demo")
  MenuItem( 5, "Sinus/Cos Demo")
  MenuItem( 6, "Easy Sin Cos 2 Demo")
  MenuBar()
  MenuItem( 10, "Quit")
EndIf

If MP_Graphics3D (940,497,0,2); Create 3D Fenster/Windows
 

 
      SetWindowTitle(0, "MPs Shader Textur Testprogram V 0.1") 
      Editor_0 = EditorGadget(#PB_Any, 550, 210, 380, 280)
      Button_0 = ButtonGadget(#PB_Any, 800, 170, 120, 30, "Start")
      Button_1 = ButtonGadget(#PB_Any, 550, 10, 120, 20, "Load Textur Left")
      Button_2 = ButtonGadget(#PB_Any, 550, 40, 120, 20, "Load Textur Shader")
      Button_3 = ButtonGadget(#PB_Any, 550, 70, 120, 20, "Save Shader Textur")
      Button_4 = ButtonGadget(#PB_Any, 550, 110, 120, 20, "Load Demo Shader")
      Button_5 = ButtonGadget(#PB_Any, 550, 140, 120, 20, "Load Shader")
      Button_6 = ButtonGadget(#PB_Any, 550, 170, 120, 20, "Save Shader")
      Button_7 = ButtonGadget(#PB_Any, 680, 170, 100, 20, "Compile")
      Text_0 = TextGadget(#PB_Any, 740, 10, 220, 20, "Left      Mesh      Shader.Variable")
      Text_1 = TextGadget(#PB_Any, 680, 30, 50, 20, "Cube")
      Radio_0 = OptionGadget(#PB_Any, 740, 30, 20, 20, "")
      Radio_1 = OptionGadget(#PB_Any, 740, 60, 20, 20, "")
      Radio_2 = OptionGadget(#PB_Any, 740, 90, 20, 20, "")
      SetGadgetState(Radio_0 , 1)
      Text_2 = TextGadget(#PB_Any, 680, 60, 60, 20, "Sphere")
      Radio_3 = OptionGadget(#PB_Any, 780, 30, 20, 20, "")
      Radio_4 = OptionGadget(#PB_Any, 780, 60, 20, 20, "")
      Radio_5 = OptionGadget(#PB_Any, 780, 90, 20, 20, "")
      SetGadgetState(Radio_3 , 1)
      Text_3 = TextGadget(#PB_Any, 680, 90, 40, 20, "Teapot")
      Text_4 = TextGadget(#PB_Any, 680, 120, 40, 20, "Move")
      CheckBox_0 = CheckBoxGadget(#PB_Any, 740, 120, 40, 20, "")
      CheckBox_1 = CheckBoxGadget(#PB_Any, 780, 120, 40, 20, "")
      MP_Viewport(D3DCOLOR_XRGB(236,233,216),2,2,535,492)
Else 

  End ; Kann Fenster nicht erstellen/Cant Create Windows

EndIf 

camera=MP_CreateCamera() ; Kamera erstellen / Create Camera
light=MP_CreateLight(1,1,1,1) ; Es werde Licht / Light on

Mesh1 = MP_CreateCube()
Textur1 =  MP_CreateTextureColor(512, 512,RGB(Random(255),Random(255),Random(255)))
MP_EntityTexture(Mesh1, Textur1) 

Mesh2 = MP_CreateCube()
Textur2 =  MP_CreateTextureColor(512, 512,RGB(255,255,255))
MP_EntityTexture(Mesh2, Textur2) 

x.f=0 : y.f=0 : z.f=4 

While Not MP_KeyDown(#PB_Key_Escape) ; Esc abfrage / SC pushed?
 Select MP_WindowEvent()
       Case #PB_Event_Menu
      
        Select EventMenu()  ; To see which menu has been selected

          Case 1 ; Easy Color Demo
          
            Restore DemoShader1
            MyEffect.s = ""
            Read.s Purestring.s
            Repeat
                 MyEffect.s + Purestring.s
                 Read.s Purestring.s
            Until Purestring.s  = "End"
            ClearGadgetItems(Editor_0)                
            AddGadgetItem(Editor_0, 0,MyEffect) 

          Case 2 ; 4 side color

            Restore DemoShader2
            MyEffect.s = ""
            Read.s Purestring.s
            Repeat
                 MyEffect.s + Purestring.s
                 Read.s Purestring.s
            Until Purestring.s  = "End"
            ClearGadgetItems(Editor_0)                
            AddGadgetItem(Editor_0, 0,MyEffect) 
         
          Case 3 ; Texture with lines

            Restore DemoShader3
            MyEffect.s = ""
            Read.s Purestring.s
            Repeat
                 MyEffect.s + Purestring.s
                 Read.s Purestring.s
            Until Purestring.s  = "End"
            ClearGadgetItems(Editor_0)               
            AddGadgetItem(Editor_0, 0,MyEffect) 

          Case 4 ; Mandelbrot

            Restore DemoShader4
            MyEffect.s = ""
            Read.s Purestring.s
            Repeat
                 MyEffect.s + Purestring.s
                 Read.s Purestring.s
            Until Purestring.s  = "End"
            ClearGadgetItems(Editor_0)             
            AddGadgetItem(Editor_0, 0,MyEffect)           

          Case 5 ; Sin/Cos Demo

            Restore DemoShader5
            MyEffect.s = ""
            Read.s Purestring.s
            Repeat
                 MyEffect.s + Purestring.s
                 Read.s Purestring.s
            Until Purestring.s  = "End"
            ClearGadgetItems(Editor_0)             
            AddGadgetItem(Editor_0, 0,MyEffect)   
           
           Case 6 ; Sin/Cos 2 Demo

            Restore DemoShader6
            MyEffect.s = ""
            Read.s Purestring.s
            Repeat
                 MyEffect.s + Purestring.s
                 Read.s Purestring.s
            Until Purestring.s  = "End"
            ClearGadgetItems(Editor_0)             
            AddGadgetItem(Editor_0, 0,MyEffect)            
          Case 10 ; Quit
            Quit = 1

        EndSelect
       Case #PB_Event_Gadget
        Select EventGadget()
          Case Button_0

              MyEffect.s = GetGadgetText(Editor_0) 
              StartTime = ElapsedMilliseconds()  
              
             ; If texturshader
              ;MyTextureShader\SetValue(@"Noisfac", @Noisfac, 4)
             
              ;MyTextureShader\SetTexture( @"Texture1", PeekL(Texture2));
             
              If Not MP_FillTexture (Textur2,MyTextureShader)
                 MessageRequester("Shader error message", "No Shader effekt, please recompile your shader, it does not work", #PB_MessageRequester_Ok)
              EndIf
                  ;D3DXFillTextureTX(PeekL(Textur2), MyTextureShader);
            ;  EndIf

              ElapsedTime = ElapsedMilliseconds()-StartTime 
              SetWindowTitle(0, "MPs Shader Textur Testprogram V 0.1 - Shader calculation time in ms "+Str(ElapsedTime)) 
          
          
          Case Button_7              

               MyEffect.s = GetGadgetText(Editor_0) 
               MyTextureShader = MP_CreateTextureShader(MyEffect.s)
               
               If MyTextureShader
                  MP_MsgRequesterOk("Shader message", "File was successful compiled", 3) 
               EndIf    
                 
              ;Noisfac.f = 2

         
          Case Button_1
              Pattern$ = "Image Files (bmp,jpg,tga,png,dds,ppm,dib,hdr,pfm|*.bmp;*.jpg;*.tga;*.png;*.dds;*.ppm;*.dib;*.hdr;*.pfm" 
              directory$ = "C:\Programme\PureBasic\media\" 
              File.s = OpenFileRequester("Load Textur1", directory$, Pattern$,  0) 
              If File
                 MP_FreeTexture (Textur1)
                 Texture1 =  MP_LoadTexture(File.s)
                 MP_EntityTexture(Mesh1, Textur1) 
              EndIf
          Case Button_2
              Pattern$ = "Image Files (bmp,jpg,tga,png,dds,ppm,dib,hdr,pfm|*.bmp;*.jpg;*.tga;*.png;*.dds;*.ppm;*.dib;*.hdr;*.pfm" 
              directory$ = "C:\Programme\PureBasic\media\" 
              File.s = OpenFileRequester("Load Textur3", directory$, Pattern$,  0) 
              If File
                 MP_FreeTexture (Textur2)
                 Texture1 =  MP_LoadTexture(File.s)
                 MP_EntityTexture(Mesh2, Textur2) 
              EndIf
          Case Button_3
              File.s = SaveFileRequester("Save Textur as JPG", "Textur.jpg", "Textur Files(*.jpg)|*.jpg",  0)
              If File
                 MP_SaveTexture (File, Textur2 , 1)
              EndIf
          Case Button_4
              ;MessageRequester("Info", "Demo Shader comming soon", #PB_MessageRequester_Ok)
              DisplayPopupMenu(0, WindowID(0))
          Case Button_5
             ; directory$ = "C:\Programme\PureBasic\media\" 
              File.s = OpenFileRequester("Load Shader FX File", "", "Shader File (fx)|*.fx",  0) 
              If File
                If ReadFile(0,  File)   ; wenn die Datei geöffnet werden konnte, setzen wir fort...
                  MyEffect.s = ""
                  While Eof(0) = 0           ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
                    MyEffect.s + ReadString(0) + Chr(10)      ; Zeile für Zeile im Debugger-Fenster anzeigen
                  Wend
                  CloseFile(0)
                  ClearGadgetItems(Editor_0)                ; schließen der zuvor geöffneten Datei
                  AddGadgetItem(Editor_0, 0,MyEffect) 
                EndIf
              EndIf
          Case Button_6
              File.s = SaveFileRequester("Save Shader File", "Shader.fx", "Shader Files (*.fx)|*.fx",  0)
              If File
                  ;Debug file
                  MyEffect.s = GetGadgetText(Editor_0) 
                  If CreateFile(0, File)
                     WriteString(0, MyEffect)
                     CloseFile(0)
                  EndIf
              EndIf
          Case Radio_0
              MP_FreeEntity (Mesh1)
              Mesh1 = MP_CreateCube()
              MP_EntityTexture(Mesh1, Textur1) 
          Case Radio_1
              MP_FreeEntity (Mesh1)
              Mesh1 = MP_CreateSphere(20)
              MP_EntityTexture(Mesh1, Textur1)
              MP_EntityScaling (Mesh1,0.6,0.6,0.6) 
          Case Radio_2
              MP_FreeEntity (Mesh1)
              Mesh1 = MP_Createteapot()
              MP_EntityScaling (Mesh1,0.6,0.6,0.6) 
              MP_EntityTexture(Mesh1, Textur1) 
          Case Radio_3
              MP_FreeEntity (Mesh2)
              Mesh2 = MP_CreateCube()
              MP_EntityTexture(Mesh2, Textur2) 
          Case Radio_4
              MP_FreeEntity (Mesh2)
              Mesh2 = MP_CreateSphere(20)
              MP_EntityTexture(Mesh2, Textur2)
              MP_EntityScaling (Mesh2,0.6,0.6,0.6) 
          Case Radio_5
              MP_FreeEntity (Mesh2)
              Mesh2 = MP_Createteapot()
              MP_EntityScaling (Mesh2,0.6,0.6,0.6) 
              MP_EntityTexture(Mesh2, Textur2) 
         EndSelect

       Case #PB_Event_CloseWindow 
         End 
 EndSelect 

    MP_PositionEntity (Mesh1,-0.8,0,z) 
    If GetGadgetState(CheckBox_0) : MP_TurnEntity (Mesh1,-0.1,0,0) : EndIf 

    MP_PositionEntity (Mesh2,0.8,0,z) 
    If GetGadgetState(CheckBox_1) : MP_TurnEntity (Mesh2,-0.1,0,0) : EndIf 
  
    MP_DrawText (10,10,RGB(255,255,255),Str(MP_FPS()))
  
    MP_RenderWorld () 
    MP_Flip () 
Wend 

  DataSection

    DemoShader1: 
      Data.s "// Easy Color Demo"                             + Chr(10) 
      Data.s "// float4 = color (r,g,b,a) r,g,b,a = 0-1 float"+ Chr(10) 
      Data.s "// float4(1,0,0,0) = red"                       + Chr(10) 
      Data.s "// float4(1,1,0,0) = yellow"                    + Chr(10) 
      Data.s "// float4(0,0,1,0) = blue"                      + Chr(10) 
      Data.s ""                                               + Chr(10) 
      Data.s "float4 Testout( ) : COLOR"                      + Chr(10) 
      Data.s "  {"                                            + Chr(10) 
      Data.s "    return float4(0,0,1,0);"                    + Chr(10) 
      Data.s "  };"                                           + Chr(10) 
      Data.s "End"
  
    DemoShader2: 
      Data.s "// 4 side Color Demo"                       + Chr(10) 
      Data.s "float4 Testout("                            + Chr(10) 
      Data.s "  float2 vTexCoord : POSITION) : COLOR"     + Chr(10) 
      Data.s "  {"                                        + Chr(10) 
      Data.s "    float r,g, b, xSq,ySq, a;"              + Chr(10) 
      Data.s "    xSq = 2.f*vTexCoord.x-1.f; xSq *= xSq;" + Chr(10) 
      Data.s "    ySq = 2.f*vTexCoord.y-1.f; ySq *= ySq;" + Chr(10) 
      Data.s "    a = sqrt(xSq+ySq);"                     + Chr(10) 
      Data.s "    if (a > 1.0f) {"                        + Chr(10) 
      Data.s "        a = 1.0f-(a-1.0f);"                 + Chr(10) 
      Data.s "    }"                                      + Chr(10) 
      Data.s "    else if (a < 0.2f) {"                   + Chr(10) 
      Data.s "        a = 0.2f;"                          + Chr(10) 
      Data.s "    }"                                      + Chr(10) 
      Data.s "    r = 1-vTexCoord.x;"                     + Chr(10) 
      Data.s "    g = 1-vTexCoord.y;"                     + Chr(10) 
      Data.s "    b = vTexCoord.x;"                       + Chr(10) 
      Data.s "    return float4(r, g, b, a);"             + Chr(10) 
      Data.s "  };"                                       + Chr(10) 
      Data.s "End"
      
    DemoShader3: 
      Data.s "// Color Demo with Lines"                               + Chr(10) 
      Data.s "float4 oCol;"                                         	+ Chr(10) 
      Data.s "float4 Testout (float2 vTex : POSITION) : COLOR"	      + Chr(10) 
      Data.s "{"							 	                                      + Chr(10) 
      Data.s "    oCol = float4(vTex.x,vTex.x, 0, 0);"			 	        + Chr(10)
      Data.s "    // horizontal lines"					 	                    + Chr(10)
      Data.s "    if( (0.25 < vTex.y)  && (vTex.y < 0.30) )"	 	      + Chr(10)
      Data.s "        {"			 				                                + Chr(10)
      Data.s "        oCol.x = 0;"	                        		 			+ Chr(10)
      Data.s "        oCol.y = 0;"                        			 			+ Chr(10)
      Data.s "        oCol.z = 0;"			 			                        + Chr(10)
      Data.s "        }"			 				                                + Chr(10)
      Data.s "    else if( (0.50 < vTex.y) && (vTex.y < 0.55) )"	  	+ Chr(10)
      Data.s "        oCol.x = 0;"			 		                        	+ Chr(10)
      Data.s "    else if( (0.75 < vTex.y) &&  (vTex.y < 0.80) )"		  + Chr(10)
      Data.s "        oCol.x = 0;"			 		                        	+ Chr(10)
      Data.s "    // vertical lines"			 			                      + Chr(10)
      Data.s "    if( (0.40 < vTex.x) && (vTex.x < 0.42) )"		       	+ Chr(10)
      Data.s "        oCol.x = 0;"			 			                        + Chr(10)
      Data.s "    else if( (0.50 < vTex.x) && (vTex.x < 0.52) )"	  	+ Chr(10)
      Data.s "        oCol.x = 0;"			 			                        + Chr(10)
      Data.s "    else if( (0.60 < vTex.x) && (vTex.x < 0.62) )"	  	+ Chr(10)
      Data.s "        oCol.x = 0;"			 			                        + Chr(10)
      Data.s "    else if( (0.70 < vTex.x) && (vTex.x < 0.72) )"	  	+ Chr(10)
      Data.s "        oCol.x = 0;"			 			                        + Chr(10)
      Data.s "    else if( (0.80 < vTex.x) &&  (vTex.x < 0.82) )"	   	+ Chr(10)
      Data.s "        oCol.x = 0;"			 			                        + Chr(10)
      Data.s "    else if( (0.90 < vTex.x) &&  (vTex.x < 0.92) )"	  	+ Chr(10)
      Data.s "        oCol.x = 0;"			 			                        + Chr(10)
      Data.s "    return oCol;"			 				                          + Chr(10)
      Data.s "}"			 					                                      + Chr(10)	 
      Data.s "End"
      		 
    DemoShader4: ; Apfelmännchen
      Data.s "// Mandelbrot Demo"                                                + Chr(10) 
      Data.s "#define Iterations 16"					                                	+ Chr(10)
      Data.s "float2 Pan;"							                                        + Chr(10)
      Data.s "float Zoom;"							                                        + Chr(10)
      Data.s "float Aspect;    "						                                    + Chr(10)
      Data.s "float4 Testout(float2 texCoord :POSITION) : COLOR0"		            + Chr(10)
      Data.s "{"								                                                + Chr(10)
      Data.s "Pan = float2(0.25f,0);"						                                + Chr(10)
      Data.s "Zoom = 3;"							                                          + Chr(10)
      Data.s "Aspect = 1;"							                                        + Chr(10)
      Data.s "   float2 c = (texCoord - 0.5) * Zoom * float2(1, Aspect) - Pan;"	+ Chr(10)
      Data.s "   float2 v = 0;"							                                    + Chr(10)
      Data.s "   for (int n = 0; n < Iterations; n++)"				                  + Chr(10)
      Data.s "   {"								                                              + Chr(10)
      Data.s "       v = float2(v.x * v.x - v.y * v.y, v.x * v.y * 2) + c;"	    + Chr(10)
      Data.s "   }"		                                                          + Chr(10)				
      Data.s "   return (dot(v, v) > 1) ? 1 : 0;"				                        + Chr(10)
      Data.s "} "								                                                + Chr(10) 
      Data.s "End"     
      
    DemoShader5: ; Sinus/Cos Demo
      Data.s "// Sinus/Cos Demo"								                                  + Chr(10) 
      Data.s "// float2 a: POSITION = Texturposition, a.x and a.y "							+ Chr(10) 
      Data.s "// float4 = color (r,g,b,a)"								                      + Chr(10)  
      Data.s "// r = sin(length(a) * 100.0) * 0.5 + 0.5"								        + Chr(10) 
      Data.s "// g=sin(a.y * 50.0)"								                              + Chr(10) 
      Data.s "// b=cos(a.x * 50.0)"								                              + Chr(10) 
      Data.s "// a=0"								                                            + Chr(10) 
      Data.s ""								                                                  + Chr(10) 
      Data.s "float4 Testout(float2 a: POSITION ) : COLOR"								      + Chr(10) 
      Data.s "  {"											                                        + Chr(10) 
      Data.s "    return float4(sin(length(a) * 100.0) * 0.5 + 0.5, sin(a.y * 50.0), cos(a.x * 50.0), 1);"+ Chr(10) 
      Data.s ""								                                                  + Chr(10) 
      Data.s "  };"								                                              + Chr(10) 
      Data.s "End"

    DemoShader6: ; Sinus/Cos 2 Demo 
      Data.s "// Easy Sin Cos 2 Demo"	                      				+ Chr(10) 
      Data.s "// float2 a: POSITION = Texturposition, a.x and a.y " + Chr(10) 
      Data.s "// float4 = color (r,g,b,a) "					                + Chr(10) 
      Data.s "// r = sin(a.y*6.0-1)+cos(a.x*6.0-2.5)"					      + Chr(10) 
      Data.s ""					                                            + Chr(10) 
      Data.s "float4 Testout(float2 a: POSITION ) : COLOR"					+ Chr(10) 
      Data.s "  {"					                                        + Chr(10) 
      Data.s "    return float4(sin(a.y*6.0-1)+cos(a.x*6.0-2.5),0,0,0);"+ Chr(10) 
      Data.s "  };"					                                        + Chr(10) 
      Data.s "End"

      
  EndDataSection



Posted: Sun Jan 18, 2009 3:11 pm
by va!n
@mpz:
have read your post but had not the time to reply...
i cant compile/run your examples with v4.30 :(

Posted: Sun Jan 18, 2009 5:16 pm
by mpz
Hi Va!n,

the MP Engine ist not a offical libary. I work on it and will publishing it in the future. The code of the Texturshaderprogram is only an example...


Greatings Michael

Posted: Thu Jan 22, 2009 12:46 am
by mpz
New function:
10 Demoshader
4 x Variable input
color cycling Background

http://em.q-soft.ch/422MP_Texturshader.exe

Last release of Texturshader

Greetings Michael