hmm, GLAdjustTexSize doesn't work here, becouse there is any bug with proxy textures.
See: http://www.blitzbasic.com/Community/posts.php?topic=55157
Please use:
What about shaders? Very easy to bind this in TBrush.
Like:
(Shit big functionnames, but you can find a way to use like TShader)
Make a function like BrushVertexProgram(Brush:TBrush, VP:TVertexProgram) and BrushFragmentProgram(Brush:TBrush, FP:TFragmentProgram).
Render it with
glEnable(GL_VERTEX_PROGRAM_ARB)
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, VP.ProgramID)
and
glEnable(GL_FRAGMENT_PROGRAM_ARB)
glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, FP.ProgramID)
cu olli
See: http://www.blitzbasic.com/Community/posts.php?topic=55157
Please use:
Function AdjustTexSize(Width:Int Var, Height:Int Var) Local MaxSize:Int glGetIntegerv(GL_MAX_TEXTURE_SIZE, Varptr(MaxSize)) Width = Pow2Size(Width, MaxSize) Height = Pow2Size(Height, MaxSize) Function Pow2Size:Int(Size:Int, MaxSize:Int) Local QuadSize:Int QuadSize = 1 While QuadSize < Size And QuadSize < MaxSize QuadSize = QuadSize Shl 1 Wend Return QuadSize End Function End Function
What about shaders? Very easy to bind this in TBrush.
Like:
Type TFragmentProgram Global MaxInstructions : Int Global MaxLocalParams : Int Global MaxEnvParams : Int Global MaxTemporaries : Int Global MaxParams : Int Global MaxAttribs : Int Global MaxTexInstructions : Int Field ProgramID : Int Method Delete() glDeleteProgramsARB(1, Varptr(Self.ProgramID)) End Method Method SetLocalParameter(Index:Int, X:Float, Y:Float, Z:Float, W:Float) If Index => 0 And Index <= TFragmentProgram.MaxLocalParams Then glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, Index, X, Y, Z, W) Else RuntimeError("FragmentProgram-Local-Parameter-Index out of range!") EndIf End Method Function CreateFragmentProgram:TFragmentProgram(Program:String) Local FragmentProgram:TFragmentProgram FragmentProgram = New TFragmentProgram glGenProgramsARB(1, Varptr(FragmentProgram.ProgramID)) glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, FragmentProgram.ProgramID) glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, .. Program.Length, Program.ToCString()) If glGetError() = GL_INVALID_OPERATION Then Local Error:String Error = String.FromCString(Byte Ptr(glGetString(GL_PROGRAM_ERROR_STRING_ARB))) RuntimeError("FragmentProgram Error: "+Error) Return Null Else Return FragmentProgram EndIf End Function Function SetEnvParameter(Index:Int, X:Float, Y:Float, Z:Float, W:Float) If Index => 0 And Index <= TFragmentProgram.MaxEnvParams Then glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, Index, X, Y, Z, W) Else RuntimeError("FragmentProgram-Environment-Parameter-Index out of range!") EndIf End Function Function GetInfo() glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_INSTRUCTIONS_ARB, .. Varptr(MaxInstructions)) glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, .. Varptr(MaxLocalParams)) glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, .. Varptr(MaxEnvParams)) glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_TEMPORARIES_ARB, .. Varptr(MaxTemporaries)) glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_PARAMETERS_ARB, .. Varptr(MaxParams)) glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ATTRIBS_ARB, .. Varptr(MaxAttribs)) glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, .. Varptr(MaxTexInstructions)) End Function End Type Type TVertexProgram Global MaxInstructions : Int Global MaxLocalParams : Int Global MaxEnvParams : Int Global MaxTemporaries : Int Global MaxParams : Int Global MaxAttribs : Int Global MaxTexInstructions : Int Field ProgramID : Int Method Delete() glDeleteProgramsARB(1, Varptr(Self.ProgramID)) End Method Method SetLocalParameter(Index:Int, X:Float, Y:Float, Z:Float, W:Float) If Index => 0 And Index <= TVertexProgram.MaxLocalParams Then glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, Index, X, Y, Z, W) Else RuntimeError("VertexProgram-Local-Parameter-Index out of range!") EndIf End Method Function CreateVertexProgram:TVertexProgram(Program:String) Local VertexProgram:TVertexProgram VertexProgram = New TVertexProgram glGenProgramsARB(1, Varptr(VertexProgram.ProgramID)) glBindProgramARB(GL_VERTEX_PROGRAM_ARB, VertexProgram.ProgramID) glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, .. Program.Length, Program.ToCString()) If glGetError() = GL_INVALID_OPERATION Then Local Error:String Error = String.FromCString(Byte Ptr(glGetString(GL_PROGRAM_ERROR_STRING_ARB))) RuntimeError("VertexProgram Error: "+Error) Return Null Else Return VertexProgram EndIf End Function Function SetEnvParameter(Index:Int, X:Float, Y:Float, Z:Float, W:Float) If Index => 0 And Index <= TFragmentProgram.MaxEnvParams Then glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, Index, X, Y, Z, W) Else RuntimeError("VertexProgram-Environment-Parameter-Index out of range!") EndIf End Function Function GetInfo() glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_INSTRUCTIONS_ARB, .. Varptr(MaxInstructions)) glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, .. Varptr(MaxLocalParams)) glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, .. Varptr(MaxEnvParams)) glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_TEMPORARIES_ARB, .. Varptr(MaxTemporaries)) glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_PARAMETERS_ARB, .. Varptr(MaxParams)) glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ATTRIBS_ARB, .. Varptr(MaxAttribs)) glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, .. Varptr(MaxTexInstructions)) End Function End Type Function CreateVertexProgram:TVertexProgram(Program:String) Return TVertexProgram.CreateVertexProgram(Program) End Function Function VertexProgramLocalParameter(VP:TVertexProgram, Index:Int, .. X:Float, Y:Float, Z:Float, W:Float) VP.SetLocalParameter(Index, X, Y, Z, W) End Function Function VertexProgramEnvParameter(Index:Int, X:Float, Y:Float, Z:Float, W:Float) TVertexProgram.SetEnvParameter(Index, X, Y, Z, W) End Function Function CreateFragmentProgram:TFragmentProgram(Program:String) Return TFragmentProgram.CreateFragmentProgram(Program) End Function Function FragmentProgramLocalParameter(FP:TVertexProgram, Index:Int, .. X:Float, Y:Float, Z:Float, W:Float) FP.SetLocalParameter(Index, X, Y, Z, W) End Function Function FragmentProgramEnvParameter(Index:Int, X:Float, Y:Float, Z:Float, W:Float) TFragmentProgram.SetEnvParameter(Index, X, Y, Z, W) End Function
(Shit big functionnames, but you can find a way to use like TShader)
Make a function like BrushVertexProgram(Brush:TBrush, VP:TVertexProgram) and BrushFragmentProgram(Brush:TBrush, FP:TFragmentProgram).
Render it with
glEnable(GL_VERTEX_PROGRAM_ARB)
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, VP.ProgramID)
and
glEnable(GL_FRAGMENT_PROGRAM_ARB)
glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, FP.ProgramID)
cu olli