pour la procédure LoadTextureGL() je l'ai un peu accélérée.
il n'y a pas de fonction OpenGL pour faire çà, c'est étonnant.
ceci dit çà marche bien comme çà de toutes façons.
Code : Tout sélectionner
Macro RGBA(bgr, a)
( (bgr) | ( (a) << 24 ) )
EndMacro
Procedure LoadTextureGL(Filename.s, TransparentColor.l, Filter.l)
Protected image.l, w.l, h.l, rgb.l, index.l, texture.l
image = LoadImage(#PB_Any, Filename)
If image
w = ImageWidth(image)
h = ImageHeight(image)
Protected Dim ImageData.l(w*h)
If StartDrawing(ImageOutput(image))
For x = 0 To w - 1
For y = 0 To h - 1
rgb = Point(x, y)
If rgb = TransparentColor
ImageData(index) = RGBA(rgb, 0)
Else
ImageData(index) = RGBA(rgb, 255)
EndIf
index + 1
Next
Next
StopDrawing()
EndIf
glGenTextures_(1, @texture)
glBindTexture_(#GL_TEXTURE_2D, texture)
Select Filter
Case 0
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
glTexImage2D_ (#GL_TEXTURE_2D, 0, 3, w, h, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData())
Case 1
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
glTexImage2D_ (#GL_TEXTURE_2D, 0, 3, w, h, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData())
Case 2
glTexParameteri_ (#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexParameteri_ (#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR_MIPMAP_NEAREST)
gluBuild2DMipmaps_(#GL_TEXTURE_2D, 3, w, h, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData())
EndSelect
FreeImage(image)
EndIf
ProcedureReturn texture
EndProcedure