def draw(self): __GL.glEnable(__GL.GL_DEPTH_TEST) for sid in self.stack: #should return order as 0+ (0 being the FG, [-1] the BG) d=(len(stack)-sid)*.01 primitives=self.stack[sid].primitives #faster access (I think) for pid in primitives: p=primitives[pid] __GL.glBegin(p.primitive) __GL.glColor4iv(p.color) __GL.glVertex3fv(p.v1+[d]) __GL.glVertex3fv(p.v2+[d]) __GL.glVertex3fv(p.v3+[d]) if p.v4!=None: __GL.glVertex3fv(p.v4+[d]) __GL.glEnd() __GL.glDisable(__GL.GL_DEPTH_TEST) FontSize=0 for oid in self.overlay: primitives=self.overlay[oid].primitives for pid in primitives: p=primitives[pid] __GL.glBegin(p.primitive) __GL.glColor4iv(p.color) __GL.glVertex2fv(p.v1) __GL.glVertex2fv(p.v2) __GL.glVertex2fv(p.v3) if p.v4!=None: __GL.glVertex2fv(p.v4) __GL.glEnd() strings=self.font[oid].strings for sid in strings: tet,size=strings[sid].text,strings[sid].size if size!= FontSize: F=__pyg.font.Font('fonts/tahoma.ttf',size) #don't use .fon files FontSize=size w,h=F.size(text) image=__pyg.transform.flip(F.render(text,True,strings[sid].color), False, True).get_buffer().raw #get raw pixel data x,y,X,Y = strings[sid].x,strings[sid].y,strings[sid].X,strings[sid].Y px=x*pw if type(x)==int else x py=y*ph if type(y)==int else y #center to the area: (if specified) if x2!=None: px+=((X if type(X)==float else float(X)*pw)-px)/2; px-=(w*pw)/2 if y2!=None: py+=((Y if type(Y)==float else float(Y)*ph)-py)/2; py-=(h*ph)/2 py+=(h*ph) __GL.glRasterPos2f(px,py) __GL.glDrawPixels(w,h,__GL.GL_BGRA,__GL.GL_UNSIGNED_BYTE,image) del(image) #remove the old buffer
def __font(x,y,size,text,color=(0,0,0,255)): global pw,ph,FontSize #__GL.glEnable(__GL.GL_TEXTURE_2D) #Create Font #to increase performance, only create a new font when changing the size if size != FontSize: F=__pyg.font.Font('fonts/tahoma.ttf',size) #don't use .fon files w,h=F.size(text) #_w,_h=1,1 #GL-modified width/height (binary multiple) #while _w<w: _w<<=1 #while _h<h: _h<<=1 #fsurf=__pyg.Surface((w,h),__pyg.SRCALPHA) #fsurf.blit(__pyg.transform.flip(F.render(text,True,color), False, True),(0,0)) #Create GL-Font Image #w,h=fsurf.get_size() image=__pyg.transform.flip(F.render(text,True,color), False, True).get_buffer().raw #get raw pixel data # Create Texture __GL.glGenTextures(1) '''__GL.glBindTexture(__GL.GL_TEXTURE_2D, 0) # 2d texture (x and y size) __GL.glPixelStorei(__GL.GL_UNPACK_ALIGNMENT,1) __GL.glTexImage2D(__GL.GL_TEXTURE_2D, 0, 3, _w, _h, 0, __GL.GL_BGRA, __GL.GL_UNSIGNED_BYTE, image) __GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP) __GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_T, __GL.GL_CLAMP) __GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_REPEAT) __GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_T, __GL.GL_REPEAT) __GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MAG_FILTER, __GL.GL_NEAREST) __GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MIN_FILTER, __GL.GL_NEAREST) __GL.glTexEnvf(__GL.GL_TEXTURE_ENV, __GL.GL_TEXTURE_ENV_MODE, __GL.GL_DECAL) w*=pw; h*=ph __GL.glBegin(__GL.GL_QUADS) __GL.glColor4f(0.0,0.0,0.0,color[3]*(1.0/255)) __GL.glVertex2f(x,y); __GL.glTexCoord2f(0.0,0.0) __GL.glVertex2f(x+w,y); __GL.glTexCoord2f(1.0,0.0) __GL.glVertex2f(x+w,y+h); __GL.glTexCoord2f(1.0,1.0) __GL.glVertex2f(x,y+h); __GL.glTexCoord2f(0.0,1.0) __GL.glEnd()''' __GL.glRasterPos2f(float(x)*pw if type(x)==int else x , float(y+h)*ph if type(y)==int else y+(h*ph) ) __GL.glDrawPixels(w,h,__GL.GL_BGRA,__GL.GL_UNSIGNED_BYTE,image) del(image) #remove the old buffer