98 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "pch.c"
 | 
						|
#pragma hdrstop
 | 
						|
 | 
						|
#define WIDTH 256
 | 
						|
#define HEIGHT 128
 | 
						|
 | 
						|
#define STRING "Test"
 | 
						|
#define STRLEN (sizeof(STRING)-1)
 | 
						|
#define CHAR_BASE 64
 | 
						|
#define CHAR_NUM 64
 | 
						|
 | 
						|
#define ANG_STEP 45
 | 
						|
 | 
						|
static void OglBounds(int *w, int *h)
 | 
						|
{
 | 
						|
    *w = WIDTH;
 | 
						|
    *h = HEIGHT;
 | 
						|
}
 | 
						|
 | 
						|
static void OglDraw(int w, int h)
 | 
						|
{
 | 
						|
    HDC hdc;
 | 
						|
    LOGFONT lf;
 | 
						|
    HFONT hfont, hfontOld;
 | 
						|
    GLuint lists;
 | 
						|
    
 | 
						|
    glLoadIdentity();
 | 
						|
    glViewport(0, 0, w, h);
 | 
						|
    glMatrixMode(GL_PROJECTION);
 | 
						|
    glLoadIdentity();
 | 
						|
    glOrtho(-WIDTH, WIDTH, -HEIGHT, HEIGHT, -1, 1);
 | 
						|
    glMatrixMode(GL_MODELVIEW);
 | 
						|
    
 | 
						|
    hdc = wglGetCurrentDC();
 | 
						|
    memset(&lf, 0, sizeof(LOGFONT));
 | 
						|
    lf.lfHeight = -24;
 | 
						|
    lf.lfWeight = FW_NORMAL;
 | 
						|
    lf.lfCharSet = ANSI_CHARSET;
 | 
						|
    lf.lfOutPrecision = OUT_SCREEN_OUTLINE_PRECIS;
 | 
						|
    lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
 | 
						|
    lf.lfQuality = PROOF_QUALITY;
 | 
						|
    lf.lfPitchAndFamily = FF_DONTCARE | DEFAULT_PITCH;
 | 
						|
    lstrcpy (lf.lfFaceName, "Arial") ;
 | 
						|
 | 
						|
    hfont = CreateFontIndirect(&lf);
 | 
						|
    if (hfont == NULL)
 | 
						|
    {
 | 
						|
        printf("CreateFontIndirect failed, %d\n", GetLastError());
 | 
						|
        return;
 | 
						|
        
 | 
						|
    }
 | 
						|
    hfontOld = (HFONT)SelectObject(hdc, hfont);
 | 
						|
 | 
						|
    lists = glGenLists(CHAR_NUM);
 | 
						|
    
 | 
						|
    if (!wglUseFontOutlines(hdc, CHAR_BASE, CHAR_NUM, lists, 0.0f, 0.0f, 
 | 
						|
                            WGL_FONT_POLYGONS, NULL))
 | 
						|
    {
 | 
						|
        printf("wglUseFontOutlines failed, %d\n", GetLastError());
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        int i;
 | 
						|
        GLfloat grey;
 | 
						|
        
 | 
						|
        glClear(GL_COLOR_BUFFER_BIT);
 | 
						|
 | 
						|
        glScalef(72.0f, 72.0f, 72.0f);
 | 
						|
        glListBase(lists-CHAR_BASE);
 | 
						|
 | 
						|
        grey = 0.5f;
 | 
						|
        for (i = 0; i < 360; i += ANG_STEP)
 | 
						|
        {
 | 
						|
            glPushMatrix();
 | 
						|
 | 
						|
            glColor3f(grey, grey, grey);
 | 
						|
            glRotatef((GLfloat)i, 0.0f, 0.0f, 1.0f);
 | 
						|
            glCallLists(STRLEN, GL_UNSIGNED_BYTE, STRING);
 | 
						|
 | 
						|
            glPopMatrix();
 | 
						|
 | 
						|
            grey += 0.5f/(360/ANG_STEP-1);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    SelectObject(hdc, hfontOld);
 | 
						|
    DeleteObject(hfont);
 | 
						|
}
 | 
						|
 | 
						|
OglModule oglmod_ofont =
 | 
						|
{
 | 
						|
    "ofont",
 | 
						|
    NULL,
 | 
						|
    OglBounds,
 | 
						|
    NULL,
 | 
						|
    OglDraw
 | 
						|
};
 |