Hi everyone, can anyone tell me what I am doing wrong here? Please have a look at the attached example code. When using pygame,image.tostring for getting the pixel values to transform them into a texture, everything works well (see the outcommented part with WORKS). However, when I replace this part with pygame.surfarray.pixels2d, then the resulting texture seems broken for some reason. Does anyone have an idea what is going on here? Thanks in advance, Florian
import time
import pygame
import OpenGL.GL as ogl
import OpenGL.GLU as oglu
pygame.init()
screensize = (pygame.display.Info().current_w,
pygame.display.Info().current_h)
screen = pygame.display.set_mode(screensize,
pygame.DOUBLEBUF | pygame.OPENGL | pygame.FULLSCREEN)
surf = pygame.image.load("expyriment_logo.png").convert_alpha()
txtr = ogl.glGenTextures(1)
### WORKS ###
#textureData = pygame.image.tostring(surf, "RGBA", 1)
### /WORKS ###
### DOESN NOT WORK ###
textureData = pygame.surfarray.pixels2d(surf)
### /DOES NOT WORK ###
ogl.glEnable(ogl.GL_TEXTURE_2D)
ogl.glBindTexture(ogl.GL_TEXTURE_2D, txtr)
width, height = surf.get_size()
ogl.glTexImage2D(ogl.GL_TEXTURE_2D, 0, ogl.GL_RGBA, width, height, 0,
ogl.GL_RGBA, ogl.GL_UNSIGNED_BYTE, textureData)
ogl.glTexParameterf(ogl.GL_TEXTURE_2D,
ogl.GL_TEXTURE_MAG_FILTER,
ogl.GL_NEAREST)
ogl.glTexParameterf(ogl.GL_TEXTURE_2D,
ogl.GL_TEXTURE_MIN_FILTER,
ogl.GL_NEAREST)
ogl.glDisable(ogl.GL_TEXTURE_2D)
bottomleft = oglu.gluUnProject(0, height , 0)
bottomright = oglu.gluUnProject(width, height, 0)
topleft = oglu.gluUnProject(0, 0, 0)
topright = oglu.gluUnProject(width,0, 0)
dims = bottomleft, bottomright, topright, topleft
ogl.glEnable(ogl.GL_BLEND)
ogl.glBlendFunc(ogl.GL_SRC_ALPHA, ogl.GL_ONE_MINUS_SRC_ALPHA)
ogl.glEnable(ogl.GL_TEXTURE_2D)
ogl.glBindTexture(ogl.GL_TEXTURE_2D, txtr)
ogl.glTexEnvf(ogl.GL_TEXTURE_ENV, ogl.GL_TEXTURE_ENV_MODE,
ogl.GL_REPLACE)
ogl.glTexParameterfv(ogl.GL_TEXTURE_2D, ogl.GL_TEXTURE_MIN_FILTER,
ogl.GL_LINEAR)
ogl.glBegin(ogl.GL_QUADS)
ogl.glTexCoord2f(0.0, 1.0)
ogl.glVertex3f(*dims[0])
ogl.glTexCoord2f(1.0, 1.0)
ogl.glVertex3f(*dims[1])
ogl.glTexCoord2f(1.0, 0.0)
ogl.glVertex3f(*dims[2])
ogl.glTexCoord2f(0.0, 0.0)
ogl.glVertex3f(*dims[3])
ogl.glEnd()
ogl.glDisable(ogl.GL_BLEND)
ogl.glDisable(ogl.GL_TEXTURE_2D)
pygame.display.flip()
time.sleep(3)
Attachment:
expyriment_logo.png
Description: PNG image