<s> """<STR_LIT>""" <EOL> import os <EOL> import ctypes <EOL> from . gllib import gl <EOL> TEX_WIDTH = <NUM_LIT> <EOL> GL_VERSION = <NUM_LIT> <EOL> GL_COLOR_BUFFER_BIT = <NUM_LIT> <EOL> GL_TRIANGLES = <NUM_LIT:4> <EOL> GL_BLEND = <NUM_LIT> <EOL> GL_SRC_ALPHA = <NUM_LIT> <EOL> GL_ONE_MINUS_SRC_ALPHA = <NUM_LIT> <EOL> GL_LUMINANCE = <NUM_LIT> <EOL> GL_ALPHA = <NUM_LIT> <EOL> GL_RGBA = <NUM_LIT> <EOL> GL_FLOAT = <NUM_LIT> <EOL> GL_UNSIGNED_BYTE = <NUM_LIT> <EOL> GL_TEXTURE_2D = <NUM_LIT> <EOL> GL_TEXTURE_WRAP_S = <NUM_LIT> <EOL> GL_TEXTURE_WRAP_T = <NUM_LIT> <EOL> GL_TEXTURE_MAG_FILTER = <NUM_LIT> <EOL> GL_TEXTURE_MIN_FILTER = <NUM_LIT> <EOL> GL_LINEAR = <NUM_LIT> <EOL> GL_REPEAT = <NUM_LIT> <EOL> GL_VERTEX_ARRAY = <NUM_LIT> <EOL> GL_TEXTURE_COORD_ARRAY = <NUM_LIT> <EOL> GL_PROJECTION = <NUM_LIT> <EOL> GL_MODELVIEW = <NUM_LIT> <EOL> GL_FLAT = <NUM_LIT> <EOL> THISDIR = os . path . dirname ( os . path . abspath ( __file__ ) ) <EOL> class Tex ( object ) : <EOL> _known_errors = { <NUM_LIT> : '<STR_LIT>' , <EOL> <NUM_LIT> : '<STR_LIT>' , <EOL> <NUM_LIT> : '<STR_LIT>' , <EOL> } <EOL> def __init__ ( self ) : <EOL> if False : <EOL> import imageio <EOL> im = imageio . imread ( '<STR_LIT>' ) [ : , : , <NUM_LIT:1> ] . copy ( ) <EOL> self . _tex_size = im . shape [ <NUM_LIT:1> ] , im . shape [ <NUM_LIT:0> ] <EOL> self . _data = im . tostring ( ) <EOL> else : <EOL> self . _data = open ( os . path . join ( THISDIR , '<STR_LIT>' ) , '<STR_LIT:rb>' ) . read ( ) <EOL> self . _tex_size = TEX_WIDTH , len ( self . _data ) // TEX_WIDTH <EOL> self . _use_new_gl = True <EOL> self . _bgcolor = <NUM_LIT> , <NUM_LIT> , <NUM_LIT> <EOL> self . _color = <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> <EOL> self . init_gl ( ) <EOL> def set_vertex_data ( self , vcoords , tcoords ) : <EOL> BufferType = ctypes . c_float * len ( vcoords ) <EOL> self . _vcoords = BufferType ( ) <EOL> self . _tcoords = BufferType ( ) <EOL> self . _vcoords [ : ] = vcoords <EOL> self . _tcoords [ : ] = tcoords <EOL> def _check_error ( self , where ) : <EOL> err = gl . glGetError ( ) <EOL> if err : <EOL> err = self . _known_errors . get ( err , str ( err ) ) <EOL> print ( '<STR_LIT>' % ( where , err ) ) <EOL> def init_gl ( self ) : <EOL> gl . activate ( ) <EOL> version = gl . glGetString ( GL_VERSION ) . decode ( '<STR_LIT:utf-8>' ) <EOL> if not version : <EOL> raise RuntimeError ( '<STR_LIT>' ) <EOL> elif True : <EOL> self . _use_new_gl = False <EOL> print ( version ) <EOL> if self . _use_new_gl : <EOL> self . _create_texture ( ) <EOL> self . _create_program ( ) <EOL> else : <EOL> self . _create_texture ( ) <EOL> def _reshape ( self , size ) : <EOL> gl . glViewport ( <NUM_LIT:0> , <NUM_LIT:0> , int ( size [ <NUM_LIT:0> ] ) , int ( size [ <NUM_LIT:1> ] ) ) <EOL> if self . _use_new_gl : <EOL> pass <EOL> else : <EOL> gl . glMatrixMode ( GL_PROJECTION ) <EOL> gl . glLoadIdentity ( ) <EOL> gl . glMatrixMode ( GL_MODELVIEW ) <EOL> gl . glLoadIdentity ( ) <EOL> self . _check_error ( '<STR_LIT>' ) <EOL> def _create_texture ( self ) : <EOL> textures = ( ctypes . c_uint * <NUM_LIT:1> ) ( ) <EOL> gl . glGenTextures ( <NUM_LIT:1> , textures ) <EOL> self . _texid = textures [ <NUM_LIT:0> ] <EOL> gl . glBindTexture ( GL_TEXTURE_2D , self . _texid ) <EOL> gl . glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_WRAP_S , GL_REPEAT ) <EOL> gl . glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_WRAP_T , GL_REPEAT ) <EOL> gl . glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR ) <EOL> gl . glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR ) <EOL> w , h = self . _tex_size <EOL> ptr = ctypes . cast ( self . _data , ctypes . c_void_p ) <EOL> gl . glTexImage2D ( GL_TEXTURE_2D , <NUM_LIT:0> , GL_ALPHA , w , h , <NUM_LIT:0> , <EOL> GL_ALPHA , GL_UNSIGNED_BYTE , ptr ) <EOL> self . _check_error ( '<STR_LIT>' ) <EOL> def _create_program ( self ) : <EOL> pass <EOL> def draw ( self ) : <EOL> gl . glClearColor ( * ( self . _bgcolor + ( <NUM_LIT:1.0> , ) ) ) <EOL> gl . glClear ( GL_COLOR_BUFFER_BIT ) <EOL> gl . glEnable ( GL_BLEND ) <EOL> gl . glBlendFunc ( GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA ) <EOL> gl . glColor3f ( * self . _color ) <EOL> gl . glEnable ( GL_TEXTURE_2D ) <EOL> gl . glBindTexture ( GL_TEXTURE_2D , self . _texid ) <EOL> self . _check_error ( '<STR_LIT>' ) <EOL> if self . _use_new_gl : <EOL> raise NotImplementedError ( ) <EOL> else : <EOL> if True : <EOL> gl . glEnableClientState ( GL_VERTEX_ARRAY ) <EOL> gl . glEnableClientState ( GL_TEXTURE_COORD_ARRAY ) <EOL> gl . glVertexPointer ( <NUM_LIT:2> , GL_FLOAT , <NUM_LIT:0> , self . _vcoords ) <EOL> gl . glTexCoordPointer ( <NUM_LIT:2> , GL_FLOAT , <NUM_LIT:0> , self . _tcoords ) <EOL> gl . glDrawArrays ( GL_TRIANGLES , <NUM_LIT:0> , len ( self . _vcoords ) // <NUM_LIT:2> ) <EOL> else : <EOL> gl . _lib . glBegin ( GL_TRIANGLES ) <EOL> gl . glTexCoord2f ( <NUM_LIT:0> , <NUM_LIT:1> ) ; gl . glVertex3f ( - <NUM_LIT:1> , - <NUM_LIT:1> , <NUM_LIT:0> ) <EOL> gl . glTexCoord2f ( <NUM_LIT:1> , <NUM_LIT:1> ) ; gl . glVertex3f ( + <NUM_LIT:1> , - <NUM_LIT:1> , <NUM_LIT:0> ) <EOL> gl . glTexCoord2f ( <NUM_LIT:0> , <NUM_LIT:0> ) ; gl . glVertex3f ( - <NUM_LIT:1> , + <NUM_LIT:1> , <NUM_LIT:0> ) <EOL> gl . glTexCoord2f ( <NUM_LIT:0> , <NUM_LIT:0> ) ; gl . glVertex3f ( - <NUM_LIT:1> , + <NUM_LIT:1> , <NUM_LIT:0> ) <EOL> gl . glTexCoord2f ( <NUM_LIT:1> , <NUM_LIT:1> ) ; gl . glVertex3f ( + <NUM_LIT:1> , - <NUM_LIT:1> , <NUM_LIT:0> ) <EOL> gl . glTexCoord2f ( <NUM_LIT:1> , <NUM_LIT:0> ) ; gl . glVertex3f ( + <NUM_LIT:1> , + <NUM_LIT:1> , <NUM_LIT:0> ) <EOL> gl . _lib . glEnd ( ) <EOL> gl . glFlush ( ) <EOL> self . _check_error ( '<STR_LIT>' ) </s>
