SHARE
TWEET

GLSL tutorial 1 - opengl.cpp

thecplusplusguy Jul 26th, 2012 2,049 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top