Advertisement
Guest User

intro.cpp

a guest
Sep 25th, 2012
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.60 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <SDL.h>
  5. #include <GL/glu.h>
  6. #include <GL/glext.h>
  7. #include <GL/glx.h>
  8. #include <GL/glxext.h>
  9. #include <math.h>
  10. #include <time.h>
  11. #include <unistd.h>
  12. #include "shader.h"
  13.  
  14. PFNGLCREATEPROGRAMOBJECTARBPROC     glCreateProgramObjectARB = NULL;
  15. PFNGLCREATESHADEROBJECTARBPROC      glCreateShaderObjectARB = NULL;
  16. PFNGLSHADERSOURCEARBPROC            glShaderSourceARB = NULL;
  17. PFNGLCOMPILESHADERARBPROC           glCompileShaderARB = NULL;
  18. PFNGLGETOBJECTPARAMETERIVARBPROC    glGetObjectParameterivARB = NULL;
  19. PFNGLATTACHOBJECTARBPROC            glAttachObjectARB = NULL;
  20. PFNGLGETINFOLOGARBPROC              glGetInfoLogARB = NULL;
  21. PFNGLLINKPROGRAMARBPROC             glLinkProgramARB = NULL;
  22. PFNGLUSEPROGRAMOBJECTARBPROC        glUseProgramObjectARB = NULL;
  23. PFNGLGETUNIFORMLOCATIONARBPROC      glGetUniformLocationARB = NULL;
  24. PFNGLUNIFORM1FARBPROC               glUniform1f = NULL;
  25. PFNGLUNIFORM2FARBPROC               glUniform2f = NULL;
  26. PFNGLUNIFORM3FARBPROC               glUniform3f = NULL;
  27. PFNGLUNIFORM1IARBPROC               glUniform1i = NULL;
  28.  
  29. #define glXGetProcAddress(x) (*glXGetProcAddressARB)((const GLubyte*)x)
  30.  
  31. static SDL_Surface* gDrawSurface = NULL;
  32. static int width = 1024;
  33. static int height = 720;
  34. static float ratio = (float)width/height;
  35. static int program, vert_shader, frag_shader;
  36. static int lastFrame = 0;
  37. static int frames = 0;
  38. static uint t0 = 0;
  39. static uint t;
  40. static float view_angle = 45.0f;
  41. static float quad_dist = 1.135f/tan(view_angle/4.0f/M_PI);
  42. static float rot[] = {0.0f,0.0f,0.0f};
  43.  
  44. void DrawScene()
  45. {
  46.   float tf = (float)t/1000.0;
  47.   uint dt = t-t0;
  48.   t0 = t;
  49.   float dtf = (float)dt/1000.0f;
  50.   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  51.  
  52.   //generate rotations
  53.   rot[0] += dtf*10.0f;
  54.   rot[1] += dtf*10.0f;
  55.   rot[2] += dtf*10.0f;
  56.  
  57.   glLoadIdentity();
  58.   glTranslatef(0.0,0.0,-quad_dist);
  59.   glRotatef(rot[0],1,0,0);
  60.   glRotatef(rot[1],0,1,0);
  61.   glRotatef(rot[2],0,0,1);
  62.  
  63.   glUniform1f(glGetUniformLocationARB(program,"t"),tf);
  64.  
  65.   //draw full-screen quad
  66.   glBegin(GL_QUADS);
  67.   glTexCoord2f(-1.0f,-1.0f);
  68.   glVertex2f(-1.0f,-1.0f);
  69.   glTexCoord2f(1.0f,-1.0f);
  70.   glVertex2f(1.0f,-1.0f);
  71.   glTexCoord2f(1.0f,1.0f);
  72.   glVertex2f(1.0f,1.0f);
  73.   glTexCoord2f(-1.0f,1.0f);
  74.   glVertex2f(-1.0f,1.0f);
  75.   glEnd();
  76.   glPopMatrix();
  77.  
  78.   SDL_GL_SwapBuffers();
  79.   frames++;
  80. }
  81.  
  82. void SetupGLSLProcs()
  83. {
  84.   glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)glXGetProcAddress("glCreateProgramObjectARB");
  85.   glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)glXGetProcAddress("glCreateShaderObjectARB");
  86.   glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)glXGetProcAddress("glShaderSourceARB");
  87.   glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)glXGetProcAddress("glCompileShaderARB");
  88.   glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)glXGetProcAddress("glGetObjectParameterivARB");
  89.   glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)glXGetProcAddress("glAttachObjectARB");
  90.   glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)glXGetProcAddress("glGetInfoLogARB");
  91.   glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)glXGetProcAddress("glLinkProgramARB");
  92.   glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)glXGetProcAddress("glUseProgramObjectARB");
  93.   glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)glXGetProcAddress("glGetUniformLocationARB");
  94.   glUniform1f = (PFNGLUNIFORM1FARBPROC)glXGetProcAddress("glUniform1fARB");
  95.   glUniform2f = (PFNGLUNIFORM2FARBPROC)glXGetProcAddress("glUniform2fARB");
  96.   glUniform3f = (PFNGLUNIFORM3FARBPROC)glXGetProcAddress("glUniform3fARB");
  97.   glUniform1i = (PFNGLUNIFORM1IARBPROC)glXGetProcAddress("glUniform1iARB");
  98. }
  99.  
  100. int resizeWindow(int width,int height)
  101. {
  102.   GLfloat ratio;
  103.   if (height == 0) height = 1;
  104.   ratio = (GLfloat)width/(GLfloat)height;
  105.   glViewport(0,0,(GLsizei)width,(GLsizei)height);
  106.   glMatrixMode( GL_PROJECTION );
  107.   glLoadIdentity();
  108.   gluPerspective(view_angle,ratio,0.1f,10000.0f);
  109.   glMatrixMode(GL_MODELVIEW);
  110.   glLoadIdentity();
  111.   return(1);
  112. }
  113.  
  114. void handleKeyPress(SDL_keysym *keysym)
  115. {
  116.   switch (keysym->sym)
  117.   {
  118.     case SDLK_ESCAPE:
  119.       exit(0);
  120.       break;
  121.     case SDLK_F1:
  122.       SDL_WM_ToggleFullScreen(gDrawSurface);
  123.     break;
  124.     default:
  125.       printf("key: %d\n", keysym->sym);
  126.       break;
  127.   }
  128.   return;
  129. }
  130.  
  131. void handleKeyRelease(SDL_keysym *keysym)
  132. {
  133.   switch (keysym->sym)
  134.   {
  135.     //keys here
  136.   }
  137.   return;
  138. }
  139.  
  140. void LoopSDL()
  141. {
  142.   SDL_Event event;
  143.   while(1)
  144.   {
  145.     while(SDL_PollEvent(&event))
  146.     {
  147.       switch(event.type)
  148.       {
  149.         case SDL_QUIT:
  150.           exit(0);
  151.           break;
  152.         case SDL_KEYDOWN:
  153.           handleKeyPress(&event.key.keysym);
  154.           break;
  155.         case SDL_KEYUP:
  156.           handleKeyRelease(&event.key.keysym);
  157.           break;
  158.       }
  159.     }
  160. #if DRAWONCE
  161.     if(!done)
  162. {
  163.   done = 1;
  164. #endif
  165.       DrawScene();
  166.       t = SDL_GetTicks();
  167.       if(t > lastFrame + 1000)
  168.       {
  169.        
  170.         printf("fps=%d\n", frames);
  171.         lastFrame = t;
  172.         //I++;
  173.         frames = 0;
  174.       }
  175. #if DRAWONCE
  176. }
  177. #endif
  178.   }
  179. }
  180.  
  181. void SetupSDL(void)
  182. {
  183.   const SDL_VideoInfo* vidinfo;
  184.   if(SDL_Init(SDL_INIT_VIDEO)<0);
  185.   atexit(SDL_Quit);
  186.   vidinfo = SDL_GetVideoInfo();
  187.   SDL_GL_SetAttribute(SDL_GL_RED_SIZE,5);
  188.   SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,5);
  189.   SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,5);
  190.   SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,16);
  191.   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
  192.   gDrawSurface = SDL_SetVideoMode(width,height,vidinfo->vfmt->BitsPerPixel,SDL_OPENGL);
  193.   glViewport(0,0,width,height);
  194.   glMatrixMode(GL_PROJECTION);
  195.   glLoadIdentity();
  196.   gluPerspective( 45.0f, (float)width/height, .00001f, 100.0f);
  197.   glMatrixMode(GL_MODELVIEW);
  198.   glClearColor(0.0f, 0.0f, 0.0f, 0.0);
  199.   glClearDepth(1.0f);
  200.   glEnable(GL_BLEND);
  201.   glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  202.  
  203.   //create shaders
  204.   char str[1024];
  205.   program = glCreateProgramObjectARB();
  206.  
  207.   //vertex shader
  208.   vert_shader = glCreateShaderObjectARB(GL_VERTEX_SHADER);
  209.   glShaderSourceARB(vert_shader,1,&vs,0);
  210.   glCompileShaderARB(vert_shader);
  211.   glAttachObjectARB(program,vert_shader);
  212.  
  213.   //fragment shader
  214.   frag_shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER);
  215.   glShaderSourceARB(frag_shader,1,&fs,0);
  216.   glCompileShaderARB(frag_shader);
  217.   glAttachObjectARB(program,frag_shader);
  218.  
  219.   glLinkProgramARB(program);
  220.   glUseProgramObjectARB(program);
  221.   glGetInfoLogARB(program,sizeof(str),0,str);
  222.   printf("glsl program log:\n%s\n",str);
  223. }
  224.  
  225. int main(int argc, char** argv)
  226. {
  227.   SetupGLSLProcs();
  228.   SetupSDL();
  229.   LoopSDL();
  230.   return 0;
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement