Page 1 sur 1

Texture OpenGl

Publié : lun. 22/nov./2010 10:16
par Scrat
Bonjour

J'essaye de transformer une image purebasic en une texture Opengl
j'ai essayé avec un tableau statique puis une zone memoire, mais j'obtiens toujours un joli quad tout blanc

Code : Tout sélectionner

Procedure LoadGlTexture(NumTexture,Fichier.s)
Img=LoadImage(#PB_Any,Fichier)
Wi=ImageWidth(Img)
Hi=ImageHeight(Img)
  
; Dim OpenGlData.c(Wi*Hi,4)
; c = 0
; 
; StartDrawing(ImageOutput(Img))
; For j = 0 To Hi - 1 
;   For i = 0 To Wi - 1 
;     Color = Point(i, j)
;     OpenGLData(c,0) = Red(color)
;     OpenGLData(c,1) = Green(color)
;     OpenGLData(c,2) = Blue(color)
;     OpenGlData(c,3)= Alpha(color)
;     c+1
;   Next i
; Next j                                  
; StopDrawing()


*Mem=AllocateMemory(Wi*Hi*4)
StartDrawing(ImageOutput(Img))
P=0
For H=0 To Hi-1
  For W=0 To Wi-1
    Color = Point(W, H)
    PokeB(*Mem+P,Red(color))
    P+1
    PokeB(*Mem+P,Green(color))
    P+1
    PokeB(*Mem+P,Blue(color))
    P+1
    PokeB(*Mem+P,Alpha(color))
    P+1
  Next W
Next H
StopDrawing()

glBindTexture_(#GL_TEXTURE_2D, TabTexture(NumTexture))
glTexParameterf_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_S,#GL_CLAMP_TO_EDGE)
glTexParameterf_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_T,#GL_CLAMP_TO_EDGE)
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,#GL_RGBA, Wi, Hi, 0, #GL_RGBA, #GL_UNSIGNED_BYTE,*Mem)
FreeMemory(*Mem)
;Dim OpenGlData(0,0)
FreeImage(Img)

EndProcedure  
J'ai fais le tour des forums PB mais je ne trouve pas grand chose.
Le sujet a pourtant du déja être evoqué.

Si vous avez un lien ou une idée, merci par avance

Re: Texture OpenGl

Publié : lun. 22/nov./2010 20:52
par G-Rom
Ouvre d'abord un écran OpenGL.
@+

Re: Texture OpenGl

Publié : lun. 22/nov./2010 22:08
par Scrat
Salut

Le pb vient tout simplement du drawingmode qu'il faut utiliser avec une methode de blendig par ex DrawingMode(#PB_2DDrawing_AlphaBlend)
et comme ça on recupère bien la valeur Alpha par le Point()
Sinon la valeur alpa reste à 0 et evidement on voit pas la texture car full transparente.

Pb résolu.

Par contre ça ne fonctionne pas avec un tableau statique qui pourtant doit être une zone de mémoire contigue.

A+

Re: Texture OpenGl

Publié : mar. 23/nov./2010 0:45
par G-Rom