Steward
分享是一種喜悅、更是一種幸福
程式語言 - Simple DirectMedia Layer (SDL) - v1.2 - C/C++ - OpenGL 1.0 - Use Bitmap Font
參考資訊:
https://github.com/gamedev-net/nehe-opengl
main.c
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <GL/gl.h>
int main(int argc, char *argv[])
{
int i = 0;
const int W = 320;
const int H = 240;
char buf[255] = { "Hello, world!" };
GLuint tex = 0;
GLuint base = 0;
SDL_Surface *font = NULL;
SDL_Surface *screen = NULL;
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(W, H, 16, SDL_SWSURFACE | SDL_OPENGL);
font = SDL_LoadBMP("font.bmp");
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glEnable(GL_TEXTURE_2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, font->w, font->h, 0, GL_BGR, GL_UNSIGNED_BYTE, font->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
base = glGenLists(256);
glBindTexture(GL_TEXTURE_2D, tex);
for (i = 0; i < 256; i++) {
const int sz = 16;
const float fix = 0.0625;
float cx = 1 - (float)(i % sz) / (GLfloat)sz;
float cy = 1 - (float)(i / sz) / (GLfloat)sz;
glNewList(base + (255 - i), GL_COMPILE);
glBegin(GL_QUADS);
glTexCoord2f(cx - fix, cy);
glVertex2i(0, 0);
glTexCoord2f(cx, cy);
glVertex2i(sz, 0);
glTexCoord2f(cx, cy - fix);
glVertex2i(sz, sz);
glTexCoord2f(cx - fix, cy - fix);
glVertex2i(0, sz);
glEnd();
glTranslated(16, 0, 0);
glEndList();
}
glViewport(0, 0, W, H);
glMatrixMode(GL_PROJECTION);
glOrtho(0, W, 0, H, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(10, 100, 0);
glListBase(base - 32);
glCallLists(strlen(buf), GL_BYTE, buf);
SDL_GL_SwapBuffers();
SDL_Delay(3000);
glDeleteTextures(1, &tex);
SDL_FreeSurface(font);
SDL_Quit();
return 0;
}
編譯、執行
$ gcc main.c -I/usr/include/SDL -o main -lSDL -lGL $ ./main
