Jump to content

  • Log In with Google      Sign In   
  • Create Account

skizomik

Member Since 23 Oct 2011
Offline Last Active Oct 24 2011 07:47 AM

Topics I've Started

FONT - lisson 13 with code

23 October 2011 - 04:51 AM

Hello, i have a problem in my code, i show you a little part :
I'm using code block, and i really don't know what is wrong. Arial.ttf is with the .exe and the sources..

#include <windows.h>
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <SDL/SDL_ttf.h>

GLuint Nom ;
GLuint	base;				// Base Display List For The Font Set
HDC			hDC=NULL;		// Private GDI Device Context
GLfloat	cnt1;				// 1st Counter Used To Move Text & For Coloring
GLfloat	cnt2;				// 2nd Counter Used To Move Text & For Coloring


void KillFont()	{
	glDeleteLists(base, 96);							// Delete All 96 Characters
}

void BuildFont(){
	HFONT font;	// Windows Font ID
	HFONT oldfont; // Used For Good House Keeping
	base= glGenLists(96); // Storage For 96 Characters

	font= CreateFont(-24,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,
                 	ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,"arial");

	oldfont = (HFONT)SelectObject(hDC, font);       	// Selects The Font We Want
	wglUseFontBitmaps(hDC, 32, 96, base);				// Builds 96 Characters Starting At Character 32
	SelectObject(hDC, oldfont);							// Selects The Font We Want
	DeleteObject(font);									// Delete The Font
}

void glPrint(const char *fmt, ...){
	char text[256];								// Holds Our String
	va_list	ap;										// Pointer To List Of Arguments

	if (fmt == NULL)									// If There's No Text
		return;											// Do Nothing

	va_start(ap, fmt);									// Parses The String For Variables
		vsprintf(text, fmt, ap);						// And Converts Symbols To Actual Numbers
	va_end(ap);											// Results Are Stored In Text

	glPushAttrib(GL_LIST_BIT);							// Pushes The Display List Bits
	glListBase(base - 32);								// Sets The Base Character to 32
	glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);	// Draws The Display List Text
	glPopAttrib();										// Pops The Display List Bits
}

int initialisation(){

glViewport(0,0,640,480);						// Reset The Current Viewport

	glMatrixMode(GL_PROJECTION);						// Select The Projection Matrix
	glLoadIdentity();									// Reset The Projection Matrix

	 gluPerspective(80,640/480,0.0001f,100.0f);

	glMatrixMode(GL_MODELVIEW);							// Select The Modelview Matrix
	glLoadIdentity();

	 glShadeModel(GL_SMOOTH);            	// Enable Smooth Shading
	glClearColor(0.0f, 0.0f, 0.0f, 0.5f);       	// Black Background
	glClearDepth(1.0f);             	// Depth Buffer Setup
	glEnable(GL_DEPTH_TEST);            	// Enables Depth Testing
	glDepthFunc(GL_LEQUAL);             	// The Type Of Depth Testing To Do
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Really Nice Perspective Calculations
	
	BuildFont();
	return 0;
}




int DrawGLScene(){printf("draw\n");
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
	glLoadIdentity();									// Reset The Current Modelview Matrix
	glTranslatef(0.0f,0.0f,-1.0f);						// Move One Unit Into The Screen
	// Pulsing Colors Based On Text Position
	glColor3f(1.0f,1.0f,1.0f);
	// Position The Text On The Screen
	glRasterPos2f(-0.45f+0.05f*(float)(cos(cnt1)), 0.32f*(float)(sin(cnt2)));
 	glPrint("Active OpenGL Text With NeHe - %7.2f", cnt1);	// Print GL Text To The Screen
	cnt1+=0.051f;										// Increase The First Counter
	cnt2+=0.005f;										// Increase The First Counter
	return TRUE;										// Everything Went OK
}


/// ********************************************************************************************MAIN
int main(int argc, char *argv[]){

	SDL_Init(SDL_INIT_VIDEO);
	SDL_WM_SetCaption("Gestion des palettes",NULL);
	/*ecran =*/  SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
	SDL_EnableKeyRepeat(10,10);

	bool continuer = true;
	SDL_Event event;
	initialisation();
	while (continuer){

    	//Draw_3D();
    	//Draw_2D();
    	DrawGLScene();
    	SDL_WaitEvent(&event);
    	switch(event.type){
        	case SDL_QUIT:
            	break;
        	case SDL_KEYUP:
            	switch (event.key.keysym.sym){
                	case SDLK_ESCAPE:
                    	letsexit = 1; printf("évènement SDL: QUITTER\n"); exit(0);
                    	break;
                	case SDLK_1:
                    	caisse1 = 1;
                    	//create_palette(1);
                    	printf("évènement SDL: ajouter une caisse en 1 \n");
                    	break;
                	case SDLK_2:
                    	caisse2 = 1;
                    	//create_palette(2);
                    	printf("évènement SDL: ajouter une caisse en 2 \n");
                    	break;
                	case SDLK_3:
                    	caisse3 = 1;
                    	//create_palette(3);
                    	printf("évènement SDL: ajouter une caisse en 3\n");
                    	break;
                	case SDLK_r: printf("reset\n");
                    	reset = 1;
                    	break;
                	default:
                    	break;
        	}
    	}


    	SDL_GL_SwapBuffers();
	}

	//TTF_CloseFont(police);
	TTF_Quit();
	SDL_Quit(); /// arrêt de la SDL
	return 0;
}

PARTNERS