• Welcome to Dark Bit Factory & Gravity.
 

Here's a simple glsl demo.

Started by Dr_D, July 15, 2006

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Dr_D

It's a metablob demo using a glsl vertex shader. It wont run on old cards, so I wouldn't bother with it, if you do have an older card.
By the way, nice forum!Ã,  :cheers:

Option Explicit
Randomize Timer
'$Static

'$INCLUDE: "\gl\gl.bi"
'$INCLUDE: "\gl\glu.bi"
'$INCLUDE: "\gl\glext.bi"
'$INCLUDE: "\gl\glfw.bi"

Const As Integer True = -1, False = Not True


Type DisplayMode
Ã,  Ã,  W As Uinteger
Ã,  Ã,  H As Uinteger
Ã,  Ã,  R_BITS As Uinteger
Ã,  Ã,  G_BITS As Uinteger
Ã,  Ã,  B_BITS As Uinteger
Ã,  Ã,  A_BITS As Uinteger
Ã,  Ã,  D_BITS As Uinteger
Ã,  Ã,  S_BITS As Uinteger
Ã,  Ã,  MODE As Uinteger
Ã,  Ã,  GlVer As Zstring Ptr
Ã,  Ã,  As Single FOVy, Aspect, zNear, zFar
End Type


Type Balls
Ã,  Ã,  As Single R, G, B
Ã,  Ã,  As Single x, Dx, y, Dy, Rad
End Type



Declare Sub Init_GL_Window( Display As DisplayMode )
Declare Sub Set_Ortho( Display As DisplayMode )
Declare Sub Drop_Ortho( Display As DisplayMode )
Declare Sub Init_Balls( Ball() As Balls, Display As DisplayMode)

Const MAX_BALLS As Integer = 25

Dim As Integer Use_Shader = True
Dim Ball(1 To Max_Balls) As Balls
Dim Display As DisplayMode
Init_GL_Window Display

#Define Midx (Display.w \ 2)
#Define Midy (Display.h \ 2)

Dim glCreateShaderObjectARBÃ,  Ã, As PFNglCreateShaderObjectARBPROCÃ,  Ã, = Cptr(PFNGLCREATESHADEROBJECTARBPROC, glfwGetProcAddress( "glCreateShaderObjectARB" ))
Dim glShaderSourceARBÃ,  Ã,  Ã,  Ã,  Ã, As PFNglShaderSourceARBPROCÃ,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNGLSHADERSOURCEARBPROC, glfwGetProcAddress( "glShaderSourceARB" ))
Dim glGetShaderSourceARBÃ,  Ã,  Ã,  As PFNglGetShaderSourceARBPROCÃ,  Ã,  Ã,  = Cptr(PFNGLGetSHADERSOURCEARBPROC, glfwGetProcAddress( "glGetShaderSourceARB" ))
Dim glCompileShaderARBÃ,  Ã,  Ã,  Ã,  As PFNGLCompileShaderARBPROCÃ,  Ã,  Ã,  Ã,  = Cptr(PFNglCompileShaderARBPROC, glfwGetProcAddress( "glCompileShaderARB" ))
Dim glDeleteObjectARBÃ,  Ã,  Ã,  Ã,  Ã, As PFNGLDeleteObjectARBPROCÃ,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNglDeleteObjectARBPROC, glfwGetProcAddress( "glDeleteObjectARB" ))
Dim glCreateProgramObjectARBÃ,  As PFNglCreateProgramObjectARBPROCÃ,  = Cptr(PFNglCreateProgramObjectARBPROC, glfwGetProcAddress( "glCreateProgramObjectARB" ))
Dim glAttachObjectARBÃ,  Ã,  Ã,  Ã,  Ã, As PFNglAttachObjectARBPROCÃ,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNglAttachObjectARBPROC, glfwGetProcAddress( "glAttachObjectARB" ))
Dim glUseProgramObjectARBÃ,  Ã,  Ã, As PFNglUseProgramObjectARBPROCÃ,  Ã,  Ã, = Cptr(PFNglUseProgramObjectARBPROC, glfwGetProcAddress( "glUseProgramObjectARB" ))
Dim glLinkProgramARBÃ,  Ã,  Ã,  Ã,  Ã,  As PFNglLinkProgramARBPROCÃ,  Ã,  Ã,  Ã,  Ã,  = Cptr(PFNglLinkProgramARBPROC, glfwGetProcAddress( "glLinkProgramARB" ))
Dim glValidateProgramARBÃ,  Ã,  Ã,  As PFNglValidateProgramARBPROCÃ,  Ã,  Ã,  = Cptr(PFNglValidateProgramARBPROC, glfwGetProcAddress( "glValidateProgramARB" ))
Dim glGetObjectParameterivARB As PFNglGetObjectParameterivARBPROC = Cptr(PFNglGetObjectParameterivARBPROC, glfwGetProcAddress( "glGetObjectParameterivARB" ))
Dim glGetInfoLogARBÃ,  Ã,  Ã,  Ã,  Ã,  Ã, As PFNglGetInfoLogARBPROCÃ,  Ã,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNglGetInfoLogARBPROC, glfwGetProcAddress( "glGetInfoLogARB" ))

If glfwExtensionSupported( "GL_ARB_shader_objects" ) = 0 Then
Ã,  Ã,  Print "Error: ARB shader objects extension not supported."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If

If( glCreateShaderObjectARB = 0 ) Then
Ã,  Ã,  Print "Error: glCreateShaderObjectARB not present."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If

If( glCreateProgramObjectARB = 0 ) Then
Ã,  Ã,  Print "Error: glCreateProgramObjectARB not present."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If

If( glShaderSourceARB = 0 ) Then
Ã,  Ã,  Print "Error: glShaderSourceARB not present."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If


If( GL_ARB_shading_language_100 = 0 ) Then
Ã,  Ã,  Print "Error: This program required GL_ARB_shading_language_100."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If


Dim As Integer Line_Cnt
Dim As String Shader_Text, tString
Dim As Integer i, x, y, Scale = 8
Dim As IntegerÃ,  Dist
Dim As GlHandleARB Vertex_Shader, Shader_Program
Dim As Gluint Shader_Compile_Success


Read Line_Cnt
For i = 1 To Line_Cnt
Ã,  Ã, Read tString
Ã,  Ã, Shader_Text + = tString + Chr( 13, 10 )
Next


Dim As GLcharARB Ptr table(0) => { Strptr( Shader_Text ) }
Vertex_Shader = glCreateShaderObjectARB( GL_VERTEX_SHADER )
glShaderSourceARB( Vertex_Shader, 1, @table(0), 0 )
glCompileShaderARB( Vertex_Shader )

glGetObjectParameterivARB(Vertex_Shader, GL_OBJECT_COMPILE_STATUS_ARB, @Shader_Compile_Success )
If Shader_Compile_Success = 0 Then
Ã,  Ã,  Dim As Gluint infologsize
Ã,  Ã,  glGetObjectParameterivARB( Vertex_Shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, @infoLogSize)
Ã,  Ã,  Dim As GlByte infolog(InfoLogSize)
Ã,  Ã,  glGetInfoLogARB(Vertex_Shader, InfoLogSize, 0, @infoLog(0))
Ã,  Ã,  tString=""
Ã,  Ã,  For i = 0 To InfoLogSize-1
Ã,  Ã,  Ã,  Ã,  tString+=Chr(InfoLog(i))
Ã,  Ã,  Next
Ã,  Ã,  
Ã,  Ã,  Print "Vertex Shader Infolog error message:"
Ã,  Ã,  Print tString
End If


Shader_Program = GlCreateProgramObjectARB()
glAttachObjectARB( Shader_Program, Vertex_Shader )


glLinkProgramARB( Shader_Program )
GlValidateProgramARB( Shader_Program )


glGetObjectParameterivARB( Shader_Program, GL_OBJECT_VALIDATE_STATUS_ARB, @Shader_Compile_Success )
If Shader_Compile_Success = 0 Then
Ã,  Ã,  Beep
Ã,  Ã,  Print "GLSL program failed to compile!"
Ã,  Ã,  Sleep 1000
End If


If GL_VERTEX_PROGRAM_POINT_SIZE_ARB = 0 Then
Ã,  Ã,  Beep
Ã,  Ã,  Print "GL_VERTEX_PROGRAM_POINT_SIZE_ARB required for program to run correctly!"
Else
Ã,  Ã,  GLEnable GL_VERTEX_PROGRAM_POINT_SIZE_ARB
End If


Set_Ortho( Display )
'Drop_Ortho( Display )
Init_Balls( Ball(), Display )


Do
Ã,  Ã,  
Ã,  Ã,  If GlfwGetKey(GLFW_KEY_SPACE) Then
Ã,  Ã,  Ã,  Ã,  Use_Shader Xor = True
Ã,  Ã,  Ã,  Ã,  Do While GlfwGetKey(GLFW_KEY_SPACE)
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlfwPollEvents()
Ã,  Ã,  Ã,  Ã,  LoopÃ,  Ã,  
Ã,  Ã,  End If
Ã,  Ã,  
Ã,  Ã,  If Use_Shader Then
Ã,  Ã,  Ã,  Ã,  glUseProgramObjectARB( Shader_Program )
Ã,  Ã,  Else
Ã,  Ã,  Ã,  Ã,  glUseProgramObjectARB( False )
Ã,  Ã,  End If
Ã,  Ã,  
Ã,  Ã,  GlClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
Ã,  Ã,  
Ã,  Ã,  For i = 1 To MAX_BALLS
Ã,  Ã,  Ã,  Ã,  Ball(i).x += Ball(i).dx
Ã,  Ã,  Ã,  Ã,  Ball(i).y += Ball(i).dy
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  If Ball(i).x>360 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ball(i).dx -= (1+Rnd*.5)
Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  If Ball(i).x<280 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ball(i).dx += (1+Rnd*.5)
Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  If Ball(i).y>280 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ball(i).dy -= (1+Rnd*.5)
Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  If Ball(i).y<200 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ball(i).dy += (1+Rnd*.5)
Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Next
Ã,  Ã,  
Ã,  Ã,  GlBegin GL_QUADS
Ã,  Ã,  For y = Display.h To Scale Step -Scale
Ã,  Ã,  Ã,  Ã,  For x = Scale To Display.w Step Scale
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Dim As Single R,G,B
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Dim As Integer Hits
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  For i = 1 To MAX_BALLS
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Dist = ((y-Ball(i).y)^2 + (x-Ball(i).x)^2)/Ball(i).Rad
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If Dist<= Ball(i).Rad Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  R += (Ball(i).Rad-Dist)/Ball(i).R
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  G += (Ball(i).Rad-Dist)/Ball(i).G
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  B += (Ball(i).Rad-Dist)/Ball(i).B
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Hits-=1
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Next
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If Hits>0 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  R/=Hits
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  G/=Hits
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  B/=Hits
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlEnable GL_BLEND
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlColor4F R, G, B, 0
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlVertex3f X, Y, -Y / 500
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlColor4F R, G, B, 0
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlVertex3f X-Scale, Y, -Y / 500
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlColor4F R, G, B, 0
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlVertex3f X-Scale, Y-Scale, -( Y - Scale ) / 500
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlColor4F R, G, B, 0
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  GlVertex3f X, Y-Scale, -( Y - Scale ) / 500
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Next
Ã,  Ã,  Next
Ã,  Ã,  GlEnd
Ã,  Ã,  
Ã,  Ã,  
Ã,  Ã,  GlfwSwapBuffers
Loop Until glfwGetKey( GLFW_KEY_ESC )

GlDeleteObjectArb( Vertex_Shader )
GlDeleteObjectArb( Shader_Program )
GlfwTerminate()
End


Sub Init_Balls( Ball() As Balls, Display As DisplayMode)
Ã,  Ã,  Dim As Integer i
Ã,  Ã,  
Ã,  Ã,  For i = 1 To MAX_BALLS
Ã,  Ã,  Ã,  Ã,  Ball(i).x = 320+Rnd*250
Ã,  Ã,  Ã,  Ã,  Ball(i).y = 240+Rnd*150
Ã,  Ã,  Ã,  Ã,  Ball(i).dx = 1+Rnd*10
Ã,  Ã,  Ã,  Ã,  Ball(i).dy = 1+Rnd*10
Ã,  Ã,  Ã,  Ã,  If Int(Rnd*10) = 5 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ball(i).dx = -Ball(i).dx
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If Int(Rnd*2) = 1 Then Ball(i).dy = -Ball(i).dy
Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ball(i).Rad = 64+Rnd*64
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ball(i).R = 64+Int(Rnd*255)
Ã,  Ã,  Ã,  Ã,  Ball(i).G = 64+Int(Rnd*255)
Ã,  Ã,  Ã,  Ã,  Ball(i).B = 64+Int(Rnd*255)
Ã,  Ã,  Next
Ã,  Ã,  
End Sub


Sub Set_Ortho( Display As DisplayMode )
Ã,  Ã,  GlMatrixMode( Gl_Projection )
Ã,  Ã,  GlPushMatrix
Ã,  Ã,  GlLoadIdentity
Ã,  Ã,  GlMatrixMode( Gl_Modelview )
Ã,  Ã,  GlPushMatrix
Ã,  Ã,  GlLoadIdentity
Ã,  Ã,  GlOrtho( 0, Display.W, 0, Display.H, -1, 1 )
End Sub


Sub Drop_Ortho( Display As DisplayMode )
Ã,  Ã,  GlMatrixMode( Gl_Projection )
Ã,  Ã,  GlPopMatrix
Ã,  Ã,  GlMatrixMode( Gl_Modelview )
Ã,  Ã,  GlPopMatrix
End Sub

Sub Init_GL_Window( Display As DisplayMode )
Ã,  Ã,  Display.WÃ,  Ã,  Ã, = 640
Ã,  Ã,  Display.HÃ,  Ã,  Ã, = 480
Ã,  Ã,  Display.R_BITS= 8
Ã,  Ã,  Display.G_BITS= 8
Ã,  Ã,  Display.B_BITS= 8
Ã,  Ã,  Display.A_BITS= 8
Ã,  Ã,  Display.D_BITS= 24
Ã,  Ã,  Display.S_BITS= 8
Ã,  Ã,  Display.MODEÃ,  = GLFW_WINDOW
Ã,  Ã,  
Ã,  Ã,  If glfwInit() Then
Ã,  Ã,  Ã,  Ã,  'Successful!
Ã,  Ã,  ElseÃ,  Ã,  
Ã,  Ã,  Ã,  Ã,  Print "Failed to initialize GLFW!"
Ã,  Ã,  Ã,  Ã,  Sleep 1000
Ã,  Ã,  Ã,  Ã,  End
Ã,  Ã,  End If
Ã,  Ã,  
Ã,  Ã,  
Ã,  Ã,  IfÃ,  glfwOpenWindow( _
Ã,  Ã,  Display.WÃ,  Ã,  Ã, , _
Ã,  Ã,  Display.HÃ,  Ã,  Ã, , _
Ã,  Ã,  Display.R_BITS, _
Ã,  Ã,  Display.G_BITS, _
Ã,  Ã,  Display.B_BITS, _
Ã,  Ã,  Display.A_BITS, _
Ã,  Ã,  Display.D_BITS, _
Ã,  Ã,  Display.S_BITS, _
Ã,  Ã,  Display.MODEÃ,  ) _
Ã,  Ã,  Then
Ã,  Ã,  GlfwSwapInterval 1
Ã,  Ã,  Display.GlVer = glGetString(GL_VERSION)
Else
Ã,  Ã,  GlfwTerminate()
Ã,  Ã,  End
End If
'To check, use... glfwGetWindowParam()


' OpenGL specific stuff...
glViewport 0, 0, Display.W, Display.H
glMatrixMode GL_PROJECTIONÃ,  Ã,  Ã,  Ã,  
glLoadIdentityÃ,  Ã,  
Display.FOVy = 45.0
Display.Aspect = Display.W / Display.H
Display.znear = 1
Display.zfar = 1000
gluPerspective Display.FOVy, Display.Aspect, Display.zNear, Display.zFar

glShadeModel GL_SMOOTH
glClearColor 0.0, 0.0, 0.0, 0.0
glClearDepth 1.0
glEnable GL_DEPTH_TEST
glDepthFunc GL_LEQUALÃ,  Ã,  
glEnable GL_COLOR_MATERIAL

glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST
glPolygonMode GL_FRONT_AND_BACK, GL_POINT
glEnable GL_CULL_FACE
End Sub


Data 13
Data "void main(void)"
Data "{"
Data "gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;"
Data "vec4 V = gl_ModelViewMatrix * gl_Vertex;"
Data "gl_FrontColor = gl_Color;"
Data "float ptSize = length(V);"
Data "ptSize *= ptSize;"
Data "gl_PointSize = (gl_Color * 10.0);"
Data "if (gl_PointSize || 0 )"
Data "{"
Data "gl_FrontColor = gl_Color * (gl_PointSize/64);"
Data "}"
Data "}"
The Dr. is INsane!!!

Shockwave

Thanks for posting the routine Dr_D  :) Unfortunately it stops compiling at line 10 for me, trying to kluge it makes the compilation fale at various declarations throughout the listing, when it get to the shader definitions I gave up. Shame because I have shaders on this card and I'd really love to see it.
Soo.. If anyone can get this to compile could they attach an exe of it to their post please? Thanks!
And by the way  :hi: to the board Dr_D, nice to see you here and I hope that you stick around.
Shockwave ^ Codigos
Challenge Trophies Won:

relsoft

Yo doc!!!

I just took a screenie!!!!

BTW, this forum is kool cuz you can post screenies as attachment.
Challenge Trophies Won:

Shockwave

Ah, thanks for posting the screen Rel, it looks excellent.
Could someone attach an exe so I can try running it please?
Thanks!  :)
Shockwave ^ Codigos
Challenge Trophies Won:

Clyde

Definately need to try this when I get home, my parents gfx card doesnt do OGL too well.
Looks way smart from the screenie, and nice one DR D. :)
Still Putting The IT Into Gravy
If Only I Knew Then What I Know Now.


Challenge Trophies Won:

Dr_D

Thanks guys! ;D It overloads after a while though... I mean the balls will eventually start flying way off the screen because I didn't limit their movement. I'm working on another version that also uses a fragment shader, but it's obvious that I've still got alot to learn. :|| I'll make an exe of this one though. It should be very small.
The Dr. is INsane!!!

Shockwave

Cool, you can just attach it to your post (as long as it is in a zip or rar file). Thanks :)
Shockwave ^ Codigos
Challenge Trophies Won:

Dr_D

Ok. I attached a zip to the first post.  :cheers:
The Dr. is INsane!!!

benny!

Quote from: Dr_D on July 16, 2006
Ok. I attached a zip to the first post.  :cheers:

Awesome ... very cool fx !
[ mycroBLOG - POUET :: whatever keeps us longing - for another breath of air - is getting rare ]

Challenge Trophies Won:

ninogenio

very cool shader work mate!
Challenge Trophies Won:

Shockwave

Thanks very much for attaching the exe, I managed to run it however it was odd. My card / drivers are obviously out of date so the program wouldnt run properly, I got a dos window with some errors, however I got a good idea of what it would look like moving because another window was opened with the blob effect running as just dots, looked cool like that, I'm just gutted I can't see it for real :)
Shockwave ^ Codigos
Challenge Trophies Won:

zparticle

Vertex Shader Infolog error message:
ERROR: 0:8: 'assign' :  cannot convert from '4-component vector of float' to 'Po
intSize float'
ERROR: 0:9: '||' :  wrong operand types  no operation '||' exists that takes a l
eft-hand operand of type 'PointSize float' and a right operand of type 'const in
t' (or there is no acceptable conversion)
ERROR: 0:11: '/' :  wrong operand types  no operation '/' exists that takes a le
ft-hand operand of type 'PointSize float' and a right operand of type 'const int
' (or there is no acceptable conversion)
ERROR: 3 compilation errors.  No code generated.


GLSL program failed to compile!

Shockwave

That's the same as I got. I still managed to get some metablobs constructed from dots displayed though.
Shockwave ^ Codigos
Challenge Trophies Won:

Dr_D

Dr_D attempts to make shader...

GFX card says... :whack:


hehehe, I told you I had alot to learn. I'm still reading. ;)
The Dr. is INsane!!!

Clyde

With the exe version everything looked pretty smart DR_D Dude :)
Perhaps it's a FB compiler issue.
Still Putting The IT Into Gravy
If Only I Knew Then What I Know Now.


Challenge Trophies Won:

Ghost^BHT

Got the same errors as Relsoft and the movings dots - and I believe my GL shader libarary is up to date/

Shockwave

It's not just my shader library then? :)
Please post any further updates Dr_D , it'd be nice to help you sort out this compatibility problem if we can.
Shockwave ^ Codigos
Challenge Trophies Won:

Dr_D

This is kind of a twist on the same thing... sort of. It's not real pretty, it just blurs a texture. It does show how to use a fragment shader. It also uses the point size extension from the other demo. ;)


Option Explicit
Randomize Timer
'$Static

'$INCLUDE: "\gl\gl.bi"
'$INCLUDE: "\gl\glu.bi"
'$INCLUDE: "\gl\glext.bi"
'$INCLUDE: "\gl\glfw.bi"

Const MAX_BALLS As Integer = 50
Const Depth As Single =Ã,  .503

Type DisplayMode
Ã,  Ã,  W As Uinteger
Ã,  Ã,  H As Uinteger
Ã,  Ã,  R_BITS As Uinteger
Ã,  Ã,  G_BITS As Uinteger
Ã,  Ã,  B_BITS As Uinteger
Ã,  Ã,  A_BITS As Uinteger
Ã,  Ã,  D_BITS As Uinteger
Ã,  Ã,  S_BITS As Uinteger
Ã,  Ã,  MODE As Uinteger
Ã,  Ã,  GlVer As Zstring Ptr
Ã,  Ã,  As Single FOVy, Aspect, zNear, zFar
End Type

Type Vector2D
Ã,  Ã,  As Single X,Y
End Type

Type Balls
Ã,  Ã,  As Single R, G, B
Ã,  Ã,  As Single x, Dx, y, Dy,z, Dz, Rad
End Type



Declare Sub Init_GL_Window( Display As DisplayMode )
Declare Sub Set_Ortho( Display As DisplayMode )
Declare Sub Drop_Ortho( Display As DisplayMode )
Declare Sub Init_Ball( Ball As Balls, Display As DisplayMode)

Dim Ball(1 To Max_Balls) As Balls
Dim Display As DisplayMode
Init_GL_Window Display

#Define Midx (Display.w \ 2)
#Define Midy (Display.h \ 2)


Dim Buffer As GLUINT, tData As Uinteger Ptr
glGenTextures 1, @Buffer
GlBindTexture GL_TEXTURE_2D, Buffer
glTexImage2D( GL_TEXTURE_2D, 0, 4, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST )
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST )


Dim glCreateShaderObjectARBÃ,  Ã, As PFNglCreateShaderObjectARBPROCÃ,  Ã, = Cptr(PFNGLCREATESHADEROBJECTARBPROC, glfwGetProcAddress( "glCreateShaderObjectARB" ))
Dim glShaderSourceARBÃ,  Ã,  Ã,  Ã,  Ã, As PFNglShaderSourceARBPROCÃ,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNGLSHADERSOURCEARBPROC, glfwGetProcAddress( "glShaderSourceARB" ))
Dim glGetShaderSourceARBÃ,  Ã,  Ã,  As PFNglGetShaderSourceARBPROCÃ,  Ã,  Ã,  = Cptr(PFNGLGetSHADERSOURCEARBPROC, glfwGetProcAddress( "glGetShaderSourceARB" ))
Dim glCompileShaderARBÃ,  Ã,  Ã,  Ã,  As PFNGLCompileShaderARBPROCÃ,  Ã,  Ã,  Ã,  = Cptr(PFNglCompileShaderARBPROC, glfwGetProcAddress( "glCompileShaderARB" ))
Dim glDeleteObjectARBÃ,  Ã,  Ã,  Ã,  Ã, As PFNGLDeleteObjectARBPROCÃ,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNglDeleteObjectARBPROC, glfwGetProcAddress( "glDeleteObjectARB" ))
Dim glCreateProgramObjectARBÃ,  As PFNglCreateProgramObjectARBPROCÃ,  = Cptr(PFNglCreateProgramObjectARBPROC, glfwGetProcAddress( "glCreateProgramObjectARB" ))
Dim glAttachObjectARBÃ,  Ã,  Ã,  Ã,  Ã, As PFNglAttachObjectARBPROCÃ,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNglAttachObjectARBPROC, glfwGetProcAddress( "glAttachObjectARB" ))
Dim glUseProgramObjectARBÃ,  Ã,  Ã, As PFNglUseProgramObjectARBPROCÃ,  Ã,  Ã, = Cptr(PFNglUseProgramObjectARBPROC, glfwGetProcAddress( "glUseProgramObjectARB" ))
Dim glLinkProgramARBÃ,  Ã,  Ã,  Ã,  Ã,  As PFNglLinkProgramARBPROCÃ,  Ã,  Ã,  Ã,  Ã,  = Cptr(PFNglLinkProgramARBPROC, glfwGetProcAddress( "glLinkProgramARB" ))
Dim glValidateProgramARBÃ,  Ã,  Ã,  As PFNglValidateProgramARBPROCÃ,  Ã,  Ã,  = Cptr(PFNglValidateProgramARBPROC, glfwGetProcAddress( "glValidateProgramARB" ))
Dim glGetObjectParameterivARB As PFNglGetObjectParameterivARBPROC = Cptr(PFNglGetObjectParameterivARBPROC, glfwGetProcAddress( "glGetObjectParameterivARB" ))
Dim glGetInfoLogARBÃ,  Ã,  Ã,  Ã,  Ã,  Ã, As PFNglGetInfoLogARBPROCÃ,  Ã,  Ã,  Ã,  Ã,  Ã, = Cptr(PFNglGetInfoLogARBPROC, glfwGetProcAddress( "glGetInfoLogARB" ))

Dim glGetUniformLocationARB As PFNglGetUniformLocationARBPROC = Cptr(PFNglGetUniformLocationARBPROC, glfwGetProcAddress( "glGetUniformLocationARB" ))
Dim glUniform1iARB As PFNglUniform1iARBPROC = Cptr(PFNglUniform1iARBPROC, glfwGetProcAddress( "glUniform1iARB" ))
Dim glUniform2fvARB As PFNglUniform2fvARBPROC = Cptr(PFNglUniform2fvARBPROC, glfwGetProcAddress( "glUniform2fvARB" ))

If glfwExtensionSupported( "GL_ARB_shader_objects" ) = 0 Then
Ã,  Ã,  Print "Error: ARB shader objects extension not supported."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If

If( glCreateShaderObjectARB = 0 ) Then
Ã,  Ã,  Print "Error: glCreateShaderObjectARB not present."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If

If( glCreateProgramObjectARB = 0 ) Then
Ã,  Ã,  Print "Error: glCreateProgramObjectARB not present."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If

If( glShaderSourceARB = 0 ) Then
Ã,  Ã,  Print "Error: glShaderSourceARB not present."
Ã,  Ã,  Sleep 1000
Ã,  Ã,  End -1
End If



Dim As Integer Line_Cnt
Dim As String Shader_Text, tString
Dim As Integer i, x, y, Scale = 8
Dim As IntegerÃ,  Dist
Dim As GlHandleARB Vertex_Shader, Fragment_Shader, Vertex_Program, Fragment_Program
Dim As Gluint Shader_Compile_Success

Restore Vertex_Shader_Data
Read Line_Cnt
For i = 1 To Line_Cnt
Ã,  Ã,  Read tString
Ã,  Ã,  Shader_Text + = tString + Chr( 13, 10 )
Next
Print "Vertex Shader" + + Chr( 13, 10 )
Print Shader_Text

Dim As GLcharARB Ptr table(0) => { Strptr( Shader_Text ) }
Vertex_Shader = glCreateShaderObjectARB( GL_VERTEX_SHADER )
glShaderSourceARB( Vertex_Shader, 1, @table(0), 0 )
glCompileShaderARB( Vertex_Shader )

glGetObjectParameterivARB(Vertex_Shader, GL_OBJECT_COMPILE_STATUS_ARB, @Shader_Compile_Success )
If Shader_Compile_Success = 0 Then
Ã,  Ã,  Dim As Gluint infologsize
Ã,  Ã,  glGetObjectParameterivARB( Vertex_Shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, @infoLogSize)
Ã,  Ã,  Dim As GlByte infolog(InfoLogSize)
Ã,  Ã,  glGetInfoLogARB(Vertex_Shader, InfoLogSize, 0, @infoLog(0))
Ã,  Ã,  tString=""
Ã,  Ã,  For i = 0 To InfoLogSize-1
Ã,  Ã,  Ã,  Ã,  tString+=Chr(InfoLog(i))
Ã,  Ã,  Next
Ã,  Ã,  
Ã,  Ã,  Print "Vertex Shader Infolog error message :("
Ã,  Ã,  Print tString
End If


Restore Fragment_Shader_Data
Shader_Text = ""
tString=""
Read Line_Cnt
For i = 1 To Line_Cnt
Ã,  Ã,  Read tString
Ã,  Ã,  Shader_Text += tString + Chr( 13, 10 )
Next
Print "Fragment Shader"Ã,  + Chr( 13, 10 )
Print Shader_Text

Dim As GLcharARB Ptr Frag_table(0) => { Strptr( Shader_Text ) }
Fragment_Shader = glCreateShaderObjectARB( GL_FRAGMENT_SHADER )
glShaderSourceARB( Fragment_Shader, 1, @Frag_table(0), 0 )
glCompileShaderARB( Fragment_Shader )


glGetObjectParameterivARB(Fragment_Shader, GL_OBJECT_COMPILE_STATUS_ARB, @Shader_Compile_Success )
If Shader_Compile_Success = 0 Then
Ã,  Ã,  Dim As Gluint infologsize
Ã,  Ã,  glGetObjectParameterivARB( Fragment_Shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, @infoLogSize)
Ã,  Ã,  Dim As GlByte infolog(InfoLogSize)
Ã,  Ã,  glGetInfoLogARB(Fragment_Shader, InfoLogSize, 0, @infoLog(0))
Ã,  Ã,  tString=""
Ã,  Ã,  For i = 0 To InfoLogSize-1
Ã,  Ã,  Ã,  Ã,  tString+=Chr(InfoLog(i))
Ã,  Ã,  Next
Ã,  Ã,  
Ã,  Ã,  Print "Fragment Shader Infolog error message :("
Ã,  Ã,  Print tString
End If


Vertex_Program = GlCreateProgramObjectARB()
glAttachObjectARB( Vertex_Program, Vertex_Shader )
glLinkProgramARB( Vertex_Program )

Fragment_Program = GlCreateProgramObjectARB()
glAttachObjectARB( Fragment_Program, Fragment_Shader )
glLinkProgramARB( Fragment_Program )


GlValidateProgramARB( Vertex_Program )
glGetObjectParameterivARB( Vertex_Program, GL_OBJECT_VALIDATE_STATUS_ARB, @Shader_Compile_Success )
If Shader_Compile_Success = 0 Then
Ã,  Ã,  Beep
Ã,  Ã,  Print "ARGHHHH!!!! GLSL program failed to compile. :("
Ã,  Ã,  Sleep 1000
End If

GlValidateProgramARB( Fragment_Program )
glGetObjectParameterivARB( Fragment_Program, GL_OBJECT_VALIDATE_STATUS_ARB, @Shader_Compile_Success )
If Shader_Compile_Success = 0 Then
Ã,  Ã,  Beep
Ã,  Ã,  Print "ARGHHHH!!!! GLSL program failed to compile. :("
Ã,  Ã,  Sleep 1000
End If



Dim As GLINT Sampler0Loc = glGetUniformLocationARB( Fragment_Program, Strptr("sampler0") )
Dim As GLINT tc_offsetLoc = glGetUniformLocationARB( Fragment_Program, Strptr("tc_offset") )


Dim As Vector2D tc_offset(8)

i=0
For y = -1 To 1
Ã,  Ã,  For x = -1 To 1
Ã,  Ã,  Ã,  Ã,  tc_offset(i).x = x/Depth
Ã,  Ã,  Ã,  Ã,  tc_offset(i).y = y/Depth
Ã,  Ã,  Ã,  Ã,  i+=1
Ã,  Ã,  Next
Ã,  Ã,  
Next
GLEnable GL_VERTEX_PROGRAM_POINT_SIZE_ARB

Dim Sphere As GLUquadricObj Ptr
Sphere = gluNewQuadric
gluQuadricDrawStyle Sphere, GLU_FILL
gluQuadricNormals Sphere, GLU_SMOOTH
gluQuadricOrientation Sphere, GLU_OUTSIDE

Dim As Single LightPos(2) => {0, 0, 100}

GlEnable GL_LIGHTING
GlEnable GL_Light0
glLightfv GL_LIGHT0, GL_POSITION, @LightPos(0)




For i = 1 To Max_Balls
Ã,  Ã,  Init_Ball( Ball(i), Display )
Ã,  Ã,  Ball(i).y = -i
Next



Do
Ã,  Ã,  
Ã,  Ã,  
Ã,  Ã,  glUseProgramObjectARB( Vertex_Program )
Ã,  Ã,  GlViewPort ( 0, 0, 512, 512 )
Ã,  Ã,  
Ã,  Ã,  GlClear( GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT)
Ã,  Ã,  GlMatrixMode GL_Modelview
Ã,  Ã,  GlLoadIdentity
Ã,  Ã,  GlEnable GL_LIGHTING
Ã,  Ã,  glLightfv GL_LIGHT0, GL_POSITION, @LightPos(0)
Ã,  Ã,  GluLookat (0,0,100, 0,0,-1, 0,1,0)
Ã,  Ã,  glPolygonMode GL_FRONT, GL_POINT'FILL
Ã,  Ã,  For i = 1 To Max_BallsÃ,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ball(i).x += Ball(i).dx
Ã,  Ã,  Ã,  Ã,  Ball(i).y += Ball(i).dy
Ã,  Ã,  Ã,  Ã,  Ball(i).z += Ball(i).dz
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ball(i).dy-=.1
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  If Ball(i).y<-100 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Init_Ball( Ball(i), Display )
Ã,  Ã,  Ã,  Ã,  End If

Ã,  Ã,  Ã,  Ã,  GlPushMatrix
Ã,  Ã,  Ã,  Ã,  GlTranslateF Ball(i).X, Ball(i).Y, Ball(i).Z
Ã,  Ã,  Ã,  Ã,  GlRotateF Ball(i).y*50, 1, 0, 0
Ã,  Ã,  Ã,  Ã,  GlColor4F Ball(i).R, Ball(i).G, Ball(i).B, 1
Ã,  Ã,  Ã,  Ã,  gluSphere Sphere, Ball(i).Rad, 16, 16
Ã,  Ã,  Ã,  Ã,  GlPopMatrix
Ã,  Ã,  Next
Ã,  Ã,  
Ã,  Ã,  GlEnable GL_TEXTURE_2D
Ã,  Ã,  glBindTexture(GL_TEXTURE_2D, Buffer)
Ã,  Ã,  glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 512, 512)
Ã,  Ã,  
Ã,  Ã,  GlClear GL_COLOR_BUFFER_BIT
Ã,  Ã,  glUseProgramObjectARB( Fragment_Program )
Ã,  Ã,  'glUseProgramObjectARB( 0 )
Ã,  Ã,  glUniform1iARB(Sampler0Loc, 0 )
Ã,  Ã,  glUniform2fvARB(tc_offsetLoc, 9, @tc_offset(0).X)
Ã,  Ã,  GlViewPort ( 0, 0, Display.W, Display.H )
Ã,  Ã,  glPolygonMode GL_FRONT, GL_FILL
Ã,  Ã,  Set_Ortho( Display )
Ã,  Ã,  glBindTexture(GL_TEXTURE_2D, Buffer)Ã,  Ã,  
Ã,  Ã,  GlDisable GL_LIGHTING
Ã,  Ã,  GlColor3F 1,1,1
Ã,  Ã,  GlBegin GL_QUADS
Ã,  Ã,  GlTexCoord2D 1,0
Ã,  Ã,  GlVertex3F Display.W,0,0
Ã,  Ã,  
Ã,  Ã,  GlTexCoord2D 1,1
Ã,  Ã,  GlVertex3F Display.W,Display.H,0
Ã,  Ã,  
Ã,  Ã,  GlTexCoord2D 0,1
Ã,  Ã,  GlVertex3F 0,Display.H,0
Ã,  Ã,  
Ã,  Ã,  GlTexCoord2D 0,0
Ã,  Ã,  GlVertex3F 0,0,0
Ã,  Ã,  GlEnd
Ã,  Ã,  
Ã,  Ã,  Drop_Ortho( Display )
Ã,  Ã,  GlDisable GL_TEXTURE_2D
Ã,  Ã,  
Ã,  Ã,  GlfwSwapBuffers
Loop Until glfwGetKey( GLFW_KEY_ESC )

GluDeleteQuadric Sphere
GlDeleteObjectArb( Vertex_Shader )
GlDeleteObjectArb( Fragment_Shader )
GlDeleteObjectArb( Vertex_Program )
GlDeleteObjectArb( Fragment_Program )
GlfwTerminate()
End


Sub Init_Ball( Ball As Balls, Display As DisplayMode)
Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ball.x = -5+Rnd*10
Ã,  Ã,  Ã,  Ã,  Ball.y = -25'+Rnd*30
Ã,  Ã,  Ã,  Ã,  Ball.z = -50+(RND*20)
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ball.dx = Ball.x/10
Ã,  Ã,  Ã,  Ã,  Ball.dy = 2+Rnd*2
Ã,  Ã,  Ã,  Ã,  Ball.dz = -Ball.z/50
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ball.Rad = 10'5+Rnd*10

Ã,  Ã,  Ã,  Ã,  Ball.R = .5+Rnd
Ã,  Ã,  Ã,  Ã,  Ball.G = .5+Rnd
Ã,  Ã,  Ã,  Ã,  Ball.B = .5+Rnd
End Sub


Sub Set_Ortho( Display As DisplayMode )
Ã,  Ã,  GlMatrixMode( Gl_Projection )
Ã,  Ã,  GlPushMatrix
Ã,  Ã,  GlLoadIdentity
Ã,  Ã,  GlMatrixMode( Gl_Modelview )
Ã,  Ã,  GlPushMatrix
Ã,  Ã,  GlLoadIdentity
Ã,  Ã,  GlOrtho( 0, Display.W, 0, Display.H, -1, 1 )
End Sub


Sub Drop_Ortho( Display As DisplayMode )
Ã,  Ã,  GlMatrixMode( Gl_Projection )
Ã,  Ã,  GlPopMatrix
Ã,  Ã,  GlMatrixMode( Gl_Modelview )
Ã,  Ã,  GlPopMatrix
End Sub

Sub Init_GL_Window( Display As DisplayMode )
Ã,  Ã,  Display.WÃ,  Ã,  Ã, = 800
Ã,  Ã,  Display.HÃ,  Ã,  Ã, = 600
Ã,  Ã,  Display.R_BITS= 8
Ã,  Ã,  Display.G_BITS= 8
Ã,  Ã,  Display.B_BITS= 8
Ã,  Ã,  Display.A_BITS= 8
Ã,  Ã,  Display.D_BITS= 24
Ã,  Ã,  Display.S_BITS= 8
Ã,  Ã,  Display.MODEÃ,  = GLFW_WINDOW
Ã,  Ã,  
Ã,  Ã,  If glfwInit() Then
Ã,  Ã,  Ã,  Ã,  'Successful!
Ã,  Ã,  ElseÃ,  Ã,  
Ã,  Ã,  Ã,  Ã,  Print "Failed to initialize GLFW!"
Ã,  Ã,  Ã,  Ã,  Sleep 1000
Ã,  Ã,  Ã,  Ã,  End
Ã,  Ã,  End If
Ã,  Ã,  
Ã,  Ã,  
Ã,  Ã,  IfÃ,  glfwOpenWindow( _
Ã,  Ã,  Display.WÃ,  Ã,  Ã, , _
Ã,  Ã,  Display.HÃ,  Ã,  Ã, , _
Ã,  Ã,  Display.R_BITS, _
Ã,  Ã,  Display.G_BITS, _
Ã,  Ã,  Display.B_BITS, _
Ã,  Ã,  Display.A_BITS, _
Ã,  Ã,  Display.D_BITS, _
Ã,  Ã,  Display.S_BITS, _
Ã,  Ã,  Display.MODEÃ,  ) _
Ã,  Ã,  Then
Ã,  Ã,  GlfwSwapInterval 1
Ã,  Ã,  Display.GlVer = glGetString(GL_VERSION)
Else
Ã,  Ã,  GlfwTerminate()
Ã,  Ã,  End
End If
'To check, use... glfwGetWindowParam()

' OpenGL specific stuff...
glViewport 0, 0, Display.W, Display.H
glMatrixMode GL_PROJECTIONÃ,  Ã,  Ã,  Ã,  
glLoadIdentityÃ,  Ã,  
Display.FOVy = 45.0
Display.Aspect = Display.W / Display.H
Display.znear = 1
Display.zfar = 1000
gluPerspective Display.FOVy, Display.Aspect, Display.zNear, Display.zFar

glShadeModel GL_SMOOTH
glClearColor 0.0, 0.0, 0.0, 0.0
glClearDepth 1.0
glEnable GL_DEPTH_TEST
glDepthFunc GL_LEQUAL
glEnable GL_COLOR_MATERIAL

glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST
glPolygonMode GL_FRONT, GL_POINT
glEnable GL_CULL_FACE
End Sub


Vertex_Shader_Data:
Data 10
Data "void main(void)"
Data "{"
Data "gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;"
Data "vec4 V = gl_ModelViewMatrix * gl_Vertex;"
Data "gl_FrontColor = gl_Color;"
Data "float ptSize = length(V);"
Data "ptSize *= ptSize;"
Data "gl_PointSize =Ã,  (ptSize/1000.0);"
Data "gl_FrontColor = gl_FrontColor - (gl_PointSize / 16.0);"
Data "}"

Fragment_Shader_Data:
Data 11
Data "uniform sampler2D sampler0;"
Data "uniform vec2 tc_offset[9];"
Data "void main(void)"
Data "{"
Data "vec4 sample[9];"
Data "for (int i = 0; i < 9; i++)"
Data "{"
Data "sample[i]Ã,  = texture2D(sampler0, gl_TexCoord[0].st + tc_offset[i]);"
Data "}"
Data "gl_FragColorÃ,  = (sample[0] + sample[1] + sample[2] + sample[3] + sample[4] + sample[5] + sample[6] + sample[7] + sample[8])/16.0;"
Data "}"
The Dr. is INsane!!!

Shockwave

Again I'm unable to run, everyone else will have to tell me how cool this is !
Shockwave ^ Codigos
Challenge Trophies Won:

Clyde

I can't get it to accept the gl commands proceeding @numbers.
Still Putting The IT Into Gravy
If Only I Knew Then What I Know Now.


Challenge Trophies Won: