Advertisement
thecplusplusguy

GLSL tutorial 1 - opengl.cpp

Jul 26th, 2012
2,254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.63 KB | None | 0 0
  1. //http://www.youtube.com/user/thecplusplusguy
  2.  
  3. #include <iostream>
  4. #include <SDL/SDL.h>
  5. #include "GLee.h"
  6. #include <GL/gl.h>
  7. #include <GL/glu.h>
  8. #include "camera.h"
  9. #include <vector>
  10. #include <string>
  11. #include <fstream>
  12.  
  13. camera cam;
  14. //data->vertex->fragment
  15.  
  16. void loadFile(const char* fn,std::string& str)
  17. {
  18.     std::ifstream in(fn);
  19.     if(!in.is_open())
  20.     {
  21.         std::cout << "The file " << fn << " cannot be opened\n";
  22.         return;
  23.     }
  24.     char tmp[300];
  25.     while(!in.eof())
  26.     {
  27.         in.getline(tmp,300);
  28.         str+=tmp;
  29.         str+='\n';
  30.     }
  31. }
  32.  
  33. unsigned int loadShader(std::string& source,unsigned int mode)
  34. {
  35.     unsigned int id;
  36.     id=glCreateShader(mode);
  37.    
  38.     const char* csource=source.c_str();
  39.    
  40.     glShaderSource(id,1,&csource,NULL);
  41.     glCompileShader(id);
  42.     char error[1000];
  43.     glGetShaderInfoLog(id,1000,NULL,error);
  44.     std::cout << "Compile status: \n" << error << std::endl;
  45.     return id;
  46. }
  47.  
  48. unsigned int vs,fs,program;
  49.  
  50. void initShader(const char* vname,const char* fname)
  51. {
  52.     std::string source;
  53.     loadFile(vname,source);
  54.     vs=loadShader(source,GL_VERTEX_SHADER);
  55.     source="";
  56.     loadFile(fname,source);
  57.     fs=loadShader(source,GL_FRAGMENT_SHADER);
  58.    
  59.     program=glCreateProgram();
  60.     glAttachShader(program,vs);
  61.     glAttachShader(program,fs);
  62.    
  63.     glLinkProgram(program);
  64.     glUseProgram(program);
  65. }
  66.  
  67. void clean()
  68. {
  69.     glDetachShader(program,vs);
  70.     glDetachShader(program,fs);
  71.     glDeleteShader(vs);
  72.     glDeleteShader(fs);
  73.     glDeleteProgram(program);
  74. }
  75.  
  76. void init()
  77. {
  78.     glClearColor(0,0,0,1);
  79.     glMatrixMode(GL_PROJECTION);
  80.         glLoadIdentity();
  81.         gluPerspective(50,640.0/480.0,1,1000);
  82.     glMatrixMode(GL_MODELVIEW);
  83.     glEnable(GL_DEPTH_TEST);
  84.     initShader("vertex.vs","fragment.frag");
  85. }
  86.  
  87. void display()
  88. {
  89.     glLoadIdentity();
  90.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  91.     cam.Control();
  92.     cam.UpdateCamera();
  93.    
  94.     glBegin(GL_TRIANGLES);
  95.         glVertex3f(0,1,-4);
  96.         glVertex3f(-1,-1,-4);
  97.         glVertex3f(1,-1,-4);
  98.     glEnd();
  99. }
  100.  
  101. int main()
  102. {
  103.     SDL_Init(SDL_INIT_EVERYTHING);
  104.     SDL_SetVideoMode(640,480,32,SDL_OPENGL);
  105.     Uint32 start;
  106.     SDL_Event event;
  107.     bool running=true;
  108.     init();
  109.     bool b=false;
  110.     while(running)
  111.     {
  112.         start=SDL_GetTicks();
  113.         while(SDL_PollEvent(&event))
  114.         {
  115.             switch(event.type)
  116.             {
  117.                 case SDL_QUIT:
  118.                     running=false;
  119.                     break;
  120.                 case SDL_KEYDOWN:
  121.                     switch(event.key.keysym.sym)
  122.                     {
  123.                         case SDLK_ESCAPE:
  124.                             running=false;
  125.                             break;
  126.                     }
  127.                     break;
  128.                 case SDL_MOUSEBUTTONDOWN:
  129.                     cam.mouseIn(true);
  130.                     break;
  131.                    
  132.             }
  133.         }
  134.         display();
  135.         SDL_GL_SwapBuffers();
  136.         if(1000.0/30>SDL_GetTicks()-start)
  137.             SDL_Delay(1000.0/30-(SDL_GetTicks()-start));
  138.     }
  139.     clean();
  140.     SDL_Quit();
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement