Code borrowed from a flipcode article (thanks to a guy named Jeckle)
Be sure to check the paths to the textures!
Global ScreenWidth:Int=1024
Global ScreenHeight:Int=768
Global ScreenDepth:Int=32
Global tex0scale:Float=1.0 ' Modulate value, must be 1.0, 2.0 or 4.0
Global tex1scale:Float=1.0 ' same
Global useTex:Int[]=[1,1]
bglCreateContext ScreenWidth,ScreenHeight,ScreenDepth,0,BGL_BACKBUFFER | BGL_DEPTHBUFFER' | BGL_FULLSCREEN
' Needed to use Extensions
glewInit()
' Check extension support
If Not ExtensionSupported("GL_ARB_texture_env_combine") RuntimeError("GL_ARB_texture_env_combine Not supported!")
' some textures
Global tex1=bglTexFromPixmap( LoadPixmap( "E:\blitzmax\samples\birdie\misc\lightImage\media\light.png" ) )
Global tex2=bglTexFromPixmap( LoadPixmap( "E:\blitzmax\samples\birdie\misc\filmclip\media\B-Max.png" ) )
glActiveTextureARB(GL_TEXTURE0_ARB)
glBindTexture(GL_TEXTURE_2D, tex1)
glActiveTextureARB(GL_TEXTURE1_ARB)
glBindTexture(GL_TEXTURE_2D, tex2)
InitGl()
While Not KeyHit( KEY_ESCAPE )
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glColor3f(1.0,1.0,1.0)
glActiveTextureARB(GL_TEXTURE0_ARB)
glDisable(GL_TEXTURE_2D)
glActiveTextureARB(GL_TEXTURE1_ARB)
glDisable(GL_TEXTURE_2D)
'glDisable(GL_LIGHTING)
bglDrawText("Keys 1 & 2 toggle textures on & off",10,22)
bglDrawText("Cursors left/right, up/down adjusts modulate value for both textures",10,44)
bglDrawText("Texture 1 Modulate: "+tex0scale,10,68)
bglDrawText("Texture 1 Modulate: "+tex1scale,10,80)
'glEnable(GL_LIGHTING)
DrawScene()
FlushMem
bglSwapBuffers
Wend
End
Function InitGl()
glClearColor(0.5, 0.5, 0.5, 0.0)
glClearDepth 1.0
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
glFrontFace(GL_CW)
glShadeModel(GL_SMOOTH)
glViewport(0,0,ScreenWidth,ScreenHeight)
glEnable(GL_CULL_FACE)
' Light
Local lmodel_ambient#[]=[ 0.8,0.8,0.8,1.0]
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient)
glLoadIdentity()
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
Global light_position#[] = [0.0, 0.5, 5.0, 0.0]
glLightfv(GL_LIGHT0, GL_POSITION, light_position)
Global light_AMB#[] = [1.0,1.0,1.0,1.0]
Global light_DIF#[] = [1.0,1.0,1.0,1.0]
glLightfv(GL_LIGHT0, GL_AMBIENT, light_AMB)
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_DIF)
End Function
Function DrawScene()
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
Local aspect:Float = Float(screenwidth)/Float(screenheight)
gluPerspective(45.0,aspect,1.0,30.0)
' Toggle texture on & off
If KeyHit(KEY_1) useTex[0]=Not useTex[0]
If KeyHit(KEY_2) useTex[1]=Not useTex[1]
If useTex[0]
glActiveTextureARB(GL_TEXTURE0_ARB)
SetTexParams()
glEnable(GL_TEXTURE_2D)
Else
glActiveTextureARB(GL_TEXTURE0_ARB)
glDisable(GL_TEXTURE_2D)
End If
If useTex[1]
glActiveTextureARB(GL_TEXTURE1_ARB)
SetTexParams()
glEnable(GL_TEXTURE_2D)
Else
glActiveTextureARB(GL_TEXTURE1_ARB)
glDisable(GL_TEXTURE_2D)
End If
If KeyHit(KEY_LEFT) tex0scale:-1.0
If KeyHit(KEY_RIGHT) tex0scale:+1.0
If KeyHit(KEY_DOWN) tex1scale:-1.0
If KeyHit(KEY_UP) tex1scale:+1.0
Modulate2x()
glMatrixMode(GL_MODELVIEW)
glLoadIdentity
glTranslatef 0.0,0.0,-4.5
glRotatef -(300-MouseY()) *.4, 1.0,0.0,0.0
glRotatef -(400-MouseX()) *.4, 0.0,1.0,0.0
Local s:Float=1.0
glBegin GL_QUADS
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0, 0.0)
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0, 0.0)
glNormal3f(0.0, 0.0, -1.0)
glVertex3f -s, s, 0.0 ' Top Left
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0, 0.0)
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0, 0.0)
glNormal3f(0.0, 0.0, -1.0)
glVertex3f s, s, 0.0 ' Top Right
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0, 1.0)
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0, 1.0)
glNormal3f(0.0, 0.0, -1.0)
glVertex3f s,-s, 0.0 ' Bottom Right
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0, 1.0)
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0, 1.0)
glNormal3f(0.0, 0.0, -1.0)
glVertex3f -s,-s, 0.0 ' Bottom Left
glEnd
End Function
Function ExtensionSupported(ext$) ' cheers Terabit!
Local RetStr:String=String.FromCString$(Byte Ptr(glGetString( GL_EXTENSIONS )))
If Instr(retstr$,ext$)<>0 Return True
Return False
End Function
Function SetTexParams()
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
End Function
Function Modulate2x()
'Program texture environment zero
glActiveTexture(GL_TEXTURE0_ARB)
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE)
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_CONSTANT_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_PREVIOUS_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_ALPHA)
glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, tex0scale)
glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 1.0)
'Program texture environment one
glActiveTexture(GL_TEXTURE1_ARB)
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE)
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_CONSTANT_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE)
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_PREVIOUS_EXT)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, GL_SRC_ALPHA)
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, GL_SRC_ALPHA)
glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, tex1scale)
glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 1.0)
End Function