Esempio n. 1
0
    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
Esempio n. 2
0
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