Code archives/Graphics/OGL bitmap font
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| a simple way of displaying bitmap fonts in ogl. | |||||
SuperStrict
Type TTexture
Field texID:Int = 0
Method CDelete()
If(glIsTexture(texID)) glDeleteTextures(1, Varptr texID);
End Method
Method LoadTexture:Int(filename:String)
Local glimage:TPixmap =LoadPixmap(filename);
If(glimage = Null)Return False;
Local data:Byte[,,]= New Byte[glimage.Width,glimage.Height,3]
Local pp:Int = 0
glGenTextures(1, Varptr texID);
glBindTexture(GL_TEXTURE_2D, texID);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, glimage.Width, glimage.Height, 0, GL_RGB, GL_UNSIGNED_BYTE, glimage.pixels)'data);
Return True;
End Method
Method BindTexture()
glBindTexture(GL_TEXTURE_2D, texID);
End Method
Method GetTexID:Int()
Return texID;
End Method
End Type
Type TFont
Field tex:TTexture;
Field FontSize:Float;
Field fontColor:Float[4];
Method Create()
FontSize = 1.0;
fontColor[0] = 1;
fontColor[1] = 1;
fontColor[2] = 1;
fontColor[3] = 1;
tex = New TTexture
tex.LoadTexture("mypng.png");
End Method
Method DrawText(x:Int, y:Int, text:String)
If(text=Null) Return;
Local x1:Int=x
Local y1:Int=y
Local cx:Float
Local cy:Float
Local i:Int
Local offset:Int = 0
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
tex.BindTexture();
glColor4fv(fontColor);
For i=0 Until text.length
cx=(((text[i]+offset)/16.0) Mod 1);
cy=((text[i]+offset)/16)/16.0;
glBegin(GL_QUADS);
glTexCoord2f(cx,cy);
glVertex2i(x1,y1);
glTexCoord2f(cx,(cy+0.0625));
glVertex2i(x1,Int(16*FontSize)+y1);
glTexCoord2f(cx+0.0625,(cy+0.0625))
glVertex2i(Int(16*FontSize)+x1,Int(16*FontSize)+y1)
glTexCoord2f(cx+0.0625,cy);
glVertex2i(Int(16*FontSize)+x1,y1);
glEnd();
x1:+Int(13.0*(FontSize));
Next
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
End Method
Method SetSize(size:Float )
FontSize = size;
End Method
Method SetColor(r:Float, g:Float, b:Float, a:Float)
fontColor[0] = r;
fontColor[1] = g;
fontColor[2] = b;
fontColor[3] = a;
End Method
End Type
GLGraphics 800,600
' glEnable(GL_DEPTH_TEST);
' glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,800,600,0);
' glMatrixMode(GL_MODELVIEW);
glEnable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
Local font:Tfont = New Tfont
font.Create()
Repeat
Local alpha:Float = Abs(Sin(MilliSecs()/10.0))
Local red:Float = Abs(Sin(MilliSecs()/100))
Local green:Float = Abs(Cos(MilliSecs()/100))
Local blue:Float = Abs(Sin(MilliSecs()/1000))
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
font.SetColor(red,green,blue,alpha)
font.SetSize(2.0)
font.drawtext(10,270,"abcdefghijklmnopqrstuvwxyz")
Flip()
Until KeyDown(key_escape) |
Comments
| ||
Strict
Graphics 800,600
SetBlend(alphablend)
Local size:Int = 32
Local r:Timagefont = LoadImageFont("c:\windows\fonts\courbd.TTF",size)
If r = Null Notify "windows font not found";End
SetImageFont(r)
For Local y:Int = 0 Until 16
For Local x:Int = 0 Until 16
DrawText Chr(y*16+x),x*size,y*size
Next
Next
Local pixmap:TPixmap = GrabPixmap(0,5,512,512)
If SavePixmapPNG(pixmap,"mypng.png") Notify "ok mypng.png file created"
Cls
DrawPixmap(pixmap,30,30)
SetAlpha .2
DrawRect(30,30,512,512)
SetAlpha 1.0
DrawText "press a key to continue",200,550
Flip()
WaitKey()
End
this file creates a bitmap to be used in the example also a 512 x 512 bitmap may be used using the same text format |
| ||
| by mistake I put this in under bb can someone at brl change this to bmax. |
Code Archives Forum