Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 3020 in orxonox.OLD for orxonox/branches/sound/hud


Ignore:
Timestamp:
Nov 29, 2004, 1:04:28 PM (20 years ago)
Author:
simon
Message:

/branches/sound/sound, branches/sound/hud: Made a few changes like a version which no longer compiles… Ah life is so hard on me. If it would compile, you would need to make a folder Data in hud and add a tga file named Font.tga with the letters in it.

Location:
orxonox/branches/sound/hud
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • orxonox/branches/sound/hud/hud.cc

    r2974 r3020  
    1 
    2 
    31/*
    42   orxonox - the future of 3D-vertical-scrollers
     
    1614*/
    1715
    18 
    1916#include "hud.h"
    2017
     
    2724}
    2825
     26bool Hud::LoadTGA(TextureImage *texture, char *filename) {   
     27  GLubyte TGAheader[12]={0,0,2,0,0,0,0,0,0,0,0,0};//Uncompressed TGA Header
     28  GLubyte TGAcompare[12];
     29  GLubyte header[6];//First 6 bytes of header
     30  GLuint bytesPerPixel;
     31  GLuint imageSize;
     32  GLuint temp;
     33  GLuint type=GL_RGBA;//GL Mode is RBGA (32 BPP)
     34  FILE *file = fopen(filename, "rb");
     35  if( file==NULL || fread(TGAcompare,1,sizeof(TGAcompare),file)!=sizeof(TGAcompare) || memcmp(TGAheader,TGAcompare,sizeof(TGAheader))!=0 || fread(header,1,sizeof(header),file)!=sizeof(header)) {
     36      if (file == NULL)
     37        return false;
     38      else {
     39        fclose(file);
     40        return false;
     41      }
     42    }
     43  texture->width = header[1] * 256 + header[0];//width (highbyte*256+lowbyte)
     44  texture->height = header[3] * 256 + header[2];//height (highbyte*256+lowbyte)
     45  if(texture->width <= 0 || texture->height <=0 || (header[4]!=24 && header[4]!=32)) {
     46    fclose(file);
     47    return false;
     48  }
     49  texture->bpp = header[4];//TGA's bits per pixel
     50  bytesPerPixel = texture->bpp/8;
     51  imageSize = texture->width*texture->height*bytesPerPixel;//memory required
     52  texture->imageData=(GLubyte *)malloc(imageSize);//Reserve Memory     
     53  if(texture->imageData==NULL || fread(texture->imageData, 1, imageSize, file)!=imageSize) {
     54      if(texture->imageData!=NULL)
     55        free(texture->imageData);
     56      fclose(file);
     57      return false;
     58    }
     59  for(GLuint i=0; i<int(imageSize); i+=bytesPerPixel) {
     60      temp=texture->imageData[i];//Swaps the 1st and 3rd byte (red & blue)
     61      texture->imageData[i] = texture->imageData[i + 2];
     62      texture->imageData[i + 2] = temp;
     63    }
     64  fclose (file);
     65  glGenTextures(1, &texture[0].texID);  // Generate OpenGL texture IDs
     66  glBindTexture(GL_TEXTURE_2D, texture[0].texID);
     67  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     68  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     69  if (texture[0].bpp==24) {
     70      type=GL_RGB;
     71    }
     72  glTexImage2D(GL_TEXTURE_2D, 0, type, texture[0].width, texture[0].height, 0, type, GL_UNSIGNED_BYTE, texture[0].imageData);
     73  return true;
     74}
     75
     76GLvoid Hud::BuildFont(GLvoid) {
     77  base=glGenLists(256);
     78  glBindTexture(GL_TEXTURE_2D, textures[0].texID);
     79  for (int loop1=0; loop1<256; loop1++) {
     80    float cx=float(loop1%16)/16.0f;//X of current character
     81    float cy=float(loop1/16)/16.0f;//Y of current character
     82    glNewList(base+loop1,GL_COMPILE);   
     83    glBegin(GL_QUADS);//Use a quad for each character
     84    glTexCoord2f(cx,1.0f-cy-0.0625f);
     85    glVertex2d(0,16);
     86    glTexCoord2f(cx+0.0625f,1.0f-cy-0.0625f);
     87    glVertex2i(16,16);
     88    glTexCoord2f(cx+0.0625f,1.0f-cy-0.001f);
     89    glVertex2i(16,0);
     90    glTexCoord2f(cx,1.0f-cy-0.001f);
     91    glVertex2i(0,0);
     92    glEnd();
     93    glTranslated(14,0,0);//Move to the right of the character
     94    glEndList();
     95  }                                                                           
     96}
     97
     98GLvoid Hud::KillFont(GLvoid)    {
     99  glDeleteLists(base,256);
     100}
     101
     102GLvoid Hud::glPrint(GLint x, GLint y, int set, const char *fmt, ...) {
     103  char text[1024];
     104  va_list ap;   
     105  if (fmt == NULL)
     106    return;
     107  va_start(ap, fmt);//parses string for variables, converts to numbers
     108  vsprintf(text, fmt, ap);
     109  va_end(ap);
     110  if (set>1) {
     111    set=1;
     112  }
     113  glEnable(GL_TEXTURE_2D);//Enable texture mapping
     114  glLoadIdentity();                                             
     115  glTranslated(x,y,0);
     116  glListBase(base-32+(128*set));
     117  glScalef(1.0f,2.0f,1.0f);//Enlarge by factor 2
     118  glCallLists(strlen(text),GL_UNSIGNED_BYTE, text);     
     119  glDisable(GL_TEXTURE_2D);                                     
     120}
     121
     122void Hud::Resize(int width, int height) {
     123  swidth=width;                 // Set Scissor Width To Window Width
     124  sheight=height;               // Set Scissor Height To Window Height
     125  if (height==0) {
     126    height=1;   
     127  }
     128  glViewport(0,0,width,height);
     129  glMatrixMode(GL_PROJECTION);
     130  glLoadIdentity();                                             
     131  glOrtho(0.0f,640,480,0.0f,-1.0f,1.0f);
     132  glMatrixMode(GL_MODELVIEW);                                   
     133  glLoadIdentity();
     134}
     135
     136int Hud::InitGL() {
     137  if (!LoadTGA(&textures[0],"Data/Font.tga")) {//Load font texture
     138    return false;                               
     139  }
     140  BuildFont();
     141  glShadeModel(GL_SMOOTH);//enable smooth shading
     142  glClearColor(0.0f, 0.0f, 0.0f, 0.5f);         
     143  glClearDepth(1.0f);
     144  glBindTexture(GL_TEXTURE_2D, textures[0].texID);
     145  return true;                                                 
     146}
     147
     148void Hud::handleKeyPress(SDL_keysym *keysym) {
     149  switch(keysym->sym) {
     150  case SDLK_ESCAPE:
     151    SDL_Quit();
     152    break;
     153  case SDLK_UP:
     154    scroller = -1;
     155    break;
     156  case SDLK_DOWN:
     157    scroller = 1;
     158    break;
     159  default:
     160    break;
     161  }
     162  return;
     163}
     164
     165void Hud::DrawGLScene() {
     166  char  *token;
     167  int cnt=0;
     168  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   // Clear Screen And Depth Buffer
     169    glColor3f(1.0f,0.5f,0.5f);//Set color to bright red
     170  glPrint(50,16,1,"Renderer");
     171  glPrint(80,48,1,"Hersteller");
     172  glPrint(66,80,1,"Version");
     173  glColor3f(1.0f,0.7f,0.4f);//Set color to orange
     174  glPrint(200,16,1,(char *)glGetString(GL_RENDERER));           
     175  glPrint(200,48,1,(char *)glGetString(GL_VENDOR));
     176  glPrint(200,80,1,(char *)glGetString(GL_VERSION));
     177    glColor3f(0.5f,0.5f,1.0f);//Set color to bright blue
     178  glPrint(192,432,1,"orxonox HUD");
     179  glLoadIdentity();   
     180  glColor3f(1.0f,1.0f,1.0f);//Set the color to white
     181  glBegin(GL_LINE_STRIP);
     182  glVertex2d(639,417);
     183  glVertex2d(  0,417);
     184  glVertex2d(  0,480);
     185  glVertex2d(639,480);
     186  glVertex2d(639,128);
     187  glEnd();
     188  glBegin(GL_LINE_STRIP);
     189  glVertex2d(  0,128);
     190  glVertex2d(639,128);                                                         
     191  glVertex2d(639,  1);
     192  glVertex2d(  0,  1);
     193  glVertex2d(  0,417);
     194  glEnd();
     195  glScissor(1   ,int(0.135416f*sheight),swidth-2,int(0.597916f*sheight));//Scissor region
     196  glEnable(GL_SCISSOR_TEST);
     197  char* text=(char *)malloc(strlen((char *)glGetString(GL_EXTENSIONS))+1);
     198  strcpy (text,(char *)glGetString(GL_EXTENSIONS));//Store extension list
     199  token=strtok(text," ");
     200  while(token!=NULL) {
     201    cnt++;
     202    if (cnt>maxtokens) {
     203      maxtokens=cnt;
     204    }
     205    glColor3f(0.5f,1.0f,0.5f);//Set color to bright green
     206    glPrint(0,96+(cnt*32)-scroll,0,"%i",cnt);
     207    glColor3f(1.0f,1.0f,0.5f);  // Set Color To Yellow
     208    glPrint(50,96+(cnt*32)-scroll,0,token);
     209    token=strtok(NULL," ");
     210  }
     211  glDisable(GL_SCISSOR_TEST);
     212  free(text); 
     213  SDL_GL_SwapBuffers();
     214  return;                                                       
     215}
     216
     217int Hud::main(int argc, char **argv) {
     218  int videoFlags;
     219  int done = false;
     220  SDL_Event event;
     221  const SDL_VideoInfo *videoInfo;
     222  int isActive = true;
     223  if(SDL_Init(SDL_INIT_VIDEO) < 0) {
     224    fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError());
     225    SDL_Quit();
     226    exit(0);
     227  }
     228  videoInfo = SDL_GetVideoInfo();
     229  if(!videoInfo) {
     230    fprintf(stderr, "Video query failed: %s\n", SDL_GetError());
     231    SDL_Quit();
     232    exit(0);
     233  }
     234  videoFlags  = SDL_OPENGL;          // Enable OpenGL in SDL
     235  videoFlags |= SDL_GL_DOUBLEBUFFER; // Enable double buffering
     236  videoFlags |= SDL_HWPALETTE;       // Store the palette in hardware
     237  videoFlags |= SDL_RESIZABLE;       // Enable window resizing
     238  if(videoInfo->hw_available)
     239    videoFlags |= SDL_HWSURFACE;
     240  else
     241    videoFlags |= SDL_SWSURFACE;
     242  if (videoInfo->blit_hw)
     243    videoFlags |= SDL_HWACCEL;
     244  SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
     245  surface = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, videoFlags);
     246 
     247  if (!surface) {
     248      fprintf(stderr,  "Video mode set failed: %s\n", SDL_GetError());
     249      SDL_Quit();
     250      exit(1);
     251    }
     252  InitGL();
     253  Resize(SCREEN_WIDTH, SCREEN_HEIGHT);
     254  DrawGLScene();
     255  while (!done) {
     256      SDL_Delay(10);
     257      while(SDL_PollEvent(&event)) {
     258        switch(event.type) {
     259        case SDL_ACTIVEEVENT:
     260          if(event.active.gain == 0)
     261            isActive = false;
     262          else
     263            isActive = true;
     264          break;                           
     265        case SDL_VIDEORESIZE:
     266          surface = SDL_SetVideoMode(event.resize.w, event.resize.h, 16, videoFlags);
     267          if(!surface) {
     268            fprintf(stderr, "Could not get a surface after resize: %s\n", SDL_GetError());
     269            SDL_Quit();
     270            exit(1);
     271          }
     272          Resize(event.resize.w, event.resize.h);
     273          break;
     274        case SDL_KEYDOWN:
     275          handleKeyPress(&event.key.keysym);
     276          break;
     277        case SDL_KEYUP:
     278          scroller = 0;
     279          break;
     280        case SDL_QUIT:
     281          done = true;
     282          break;
     283        default:
     284          break;
     285        }
     286      }
     287      if(scroller == -1)
     288        if(scroll > 0)
     289          scroll -= 2;
     290      if(scroller ==  1)
     291        if(scroll < 32*(maxtokens-9))
     292          scroll += 2;
     293      if(isActive)
     294        DrawGLScene();
     295  }
     296  SDL_Quit();
     297  exit(0);
     298}
     299
  • orxonox/branches/sound/hud/hud.h

    r2974 r3020  
    22#define HUD_H
    33
     4#include <stdlib.h>
     5#include <stdio.h>
     6#include <stdarg.h>
     7#include <string.h>
     8#include <GL/gl.h>
     9#include <GL/glu.h>
     10#include "SDL.h"
     11
     12#define SCREEN_WIDTH  640
     13#define SCREEN_HEIGHT 480
     14#define SCREEN_BPP     16
     15
    416class Hud {
    5 
    617 public:
     18  typedef struct {
     19    GLubyte *imageData; // Image Data
     20    GLuint bpp;         // Image bits per pixel.
     21    GLuint width;       // Image width
     22    GLuint height;      // Image height
     23    GLuint texID;       // Texture ID
     24  } TextureImage;
    725  Hud ();
    826  ~Hud ();
    9 
     27  bool LoadTGA(TextureImage *texture, char *filename);
     28  GLvoid BuildFont(GLvoid);
     29  GLvoid KillFont(GLvoid);
     30  GLvoid glPrint(GLint x, GLint y, int set, const char *fmt, ...);
     31  void Resize(int width, int height);
     32  int InitGL();
     33  void handleKeyPress(SDL_keysym *keysym);
     34  void DrawGLScene();
     35  int main( int argc, char **argv );
     36  SDL_Surface* surface;
     37  int scroll;
     38  int maxtokens;
     39  int swidth;
     40  int sheight;
     41  int scroller;
     42  GLuint base;
     43  TextureImage textures[1];
    1044};
    1145
     46
    1247#endif
Note: See TracChangeset for help on using the changeset viewer.