Posted: Wed Jan 14, 2009 12:57 am
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
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