Advertisement
Guest User

Untitled

a guest
Mar 25th, 2012
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.96 KB | None | 0 0
  1. //////////////////////////////
  2. //Main Libary
  3. /////////////////////////////
  4. #define NO_SDL_GLEXT
  5. #include <glew.h>
  6. #include "SDL/SDL.H"
  7. #include  "SDL/SDL_IMAGE.H"
  8. #include "SDL/SDL_OPENGL.H"
  9. #undef main
  10. #include <iostream>
  11. #include <cassert>
  12. #include <string>
  13. #include <algorithm>
  14. #include <boost/iostreams/stream.hpp>
  15. #include <libs/iostreams/example/container_device.hpp>
  16. #include <boost/filesystem.hpp>
  17. #include <boost/iostreams/categories.hpp>
  18. #include <boost/algorithm/string.hpp>
  19. #include <vector>
  20. #include <fstream>
  21. #include "GL/glu.h"
  22. ////////////////////////////
  23. using namespace std;
  24. ///////////////////////////
  25. //DEFINES
  26. ///////////////////////////
  27. #define SCREEN_WIDTH  1240
  28. #define SCREEN_HEIGHT 960
  29. #define BPP 32
  30. #define GL_GLEXT_PROTOTYPES
  31. #define GetError( )\
  32.         {\
  33.             for ( GLenum Error = glGetError( ); ( GL_NO_ERROR != Error ); Error = glGetError( ) )\
  34.             {\
  35.                 switch ( Error )\
  36.                 {\
  37.                     case GL_INVALID_ENUM:      printf( "\n%s\n\n", "GL_INVALID_ENUM"      ); assert( 0 ); break;\
  38.                     case GL_INVALID_VALUE:     printf( "\n%s\n\n", "GL_INVALID_VALUE"     ); assert( 0 ); break;\
  39.                     case GL_INVALID_OPERATION: printf( "\n%s\n\n", "GL_INVALID_OPERATION" ); assert( 0 ); break;\
  40.                     case GL_OUT_OF_MEMORY:     printf( "\n%s\n\n", "GL_OUT_OF_MEMORY"     ); assert( 0 ); break;\
  41.                     default:                                                                              break;\
  42.                 }\
  43.             }\
  44.         }
  45.  
  46. ///////////////////////////
  47.  
  48.  
  49. ////////////////////////////
  50. //Other Header Files
  51. ///////////////////////////
  52. #include "SurfaceStorage.h"
  53. //////////////////////////
  54.            
  55.  
  56.  
  57.             //Load Shader Function
  58.             GLuint LoadProgram(const char * vertex_file_path, const char * Fragment_file_path){
  59.            
  60.             GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
  61.             GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
  62.  
  63.             //READ THE VERTEX SHADER CODE
  64.             string VertexShaderCode;
  65.             ifstream VertexShaderStream(vertex_file_path, std::ios::in);
  66.             if(VertexShaderStream.is_open())
  67.             {
  68.                 string Line = "";
  69.                 while(getline(VertexShaderStream, Line))
  70.                     VertexShaderCode += "\n" + Line;
  71.                 VertexShaderStream.close();  
  72.             }
  73.            
  74.  
  75.             //READ THE FRAGMENT SHADER CODE
  76.             string FragmentShaderCode;
  77.             ifstream FragmentShaderStream(Fragment_file_path, std::ios::in);
  78.             if(FragmentShaderStream.is_open())
  79.             {
  80.            
  81.               string Line = "";
  82.               while(getline(FragmentShaderStream, Line))
  83.                   FragmentShaderCode += "\n" + Line;
  84.               FragmentShaderStream.close();
  85.            
  86.             }
  87.  
  88.             GLint Result = GL_FALSE;
  89.             int InfoLogLength;
  90.  
  91.             //Compile Vertex Shader
  92.             printf("Compiling Shader : %s\n", vertex_file_path);
  93.             char const * VertexSourcePointer = VertexShaderCode.c_str();
  94.             glShaderSource(VertexShaderID,  1,  &VertexSourcePointer,  NULL);
  95.             glCompileShader(VertexShaderID);
  96.  
  97.             //Check Vertex Shader
  98.             glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS,  &Result);
  99.             glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
  100.             vector<char> VertexShaderErrorMessage(InfoLogLength);
  101.             glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
  102.             fprintf(stdout, "%s\n",  &VertexShaderErrorMessage[0]);
  103.  
  104.  
  105.             //Compile Fragment Shader
  106.             printf("Compiling Shader : %s\n",  Fragment_file_path);
  107.             char const * FragmentSourcePointer = FragmentShaderCode.c_str();
  108.             glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer, NULL);
  109.             glCompileShader(FragmentShaderID);
  110.  
  111.             //Check Fragment Shader
  112.             glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
  113.             glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
  114.             vector<char> FragmentShaderErrorMessage(InfoLogLength);
  115.             glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
  116.             fprintf(stdout,  "%s\n",  &FragmentShaderErrorMessage[0]);
  117.            
  118.             fprintf(stdout,  "Linking Program\n");
  119.              GLuint ProgramID = glCreateProgram();
  120.  
  121.              //Bind Attribute
  122.              glBindAttribLocation(ProgramID, 0, "position");
  123.              glBindAttribLocation(ProgramID, 1, "Texcoord0");
  124.  
  125.             //Link The Program
  126.            
  127.             glAttachShader(ProgramID, VertexShaderID);
  128.             glAttachShader(ProgramID, FragmentShaderID);
  129.             glLinkProgram(ProgramID);
  130.  
  131.             //Check The Program
  132.             glGetProgramiv(ProgramID,  GL_LINK_STATUS, &Result);
  133.             glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
  134.             vector<char> ProgramErrorMessage( max(InfoLogLength, int(1)) );
  135.             fprintf(stdout,  "%s\n", &ProgramErrorMessage[0]);
  136.            
  137.             //Delete Shader
  138.             glDeleteShader(VertexShaderID);
  139.             glDeleteShader(FragmentShaderID);
  140.  
  141.            
  142.            
  143.             glUseProgram(ProgramID);
  144.  
  145.  
  146.          
  147.        
  148.  
  149.  
  150.              return ProgramID;
  151.    
  152.                  
  153.             }
  154.      
  155.          
  156.  
  157.  
  158.  
  159.                   //Draw Function for arrays
  160.                   void draw (void)
  161.                   {
  162.                     //draw array
  163.                     glDrawArrays(GL_QUADS, 0, 4);
  164.                  
  165.  
  166.                   }
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.         //Main Entry Point
  174.         int main(int argc , char *argv[])
  175.         {
  176.           /////////////////////////////////////////////////////////////////////////////////////////////////
  177.  
  178.           //////////////////
  179.           //SDL SETUP
  180.           /////////////////
  181.  
  182.           //ENABLE SDL
  183.           SDL_Init(SDL_INIT_EVERYTHING);
  184.  
  185.          
  186.           //Screen Position
  187.           SDL_putenv("SDL_VIDEO_CENTERED=center");
  188.  
  189.  
  190.           //Screen Setup
  191.           Screen = SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,BPP,SDL_OPENGL|SDL_DOUBLEBUF);
  192.  
  193.      
  194.            //////////////////////////////////////////////////////////////////////////////////////////
  195.  
  196.             //////////////////
  197.            //GLEW SETUP
  198.           /////////////////
  199.          
  200.           //Glew setup
  201.           GLenum err = glewInit();
  202.            glGetError();
  203.  
  204.           //Glew Error Checking
  205.           if (GLEW_OK != err)
  206.             {
  207.               /* Problem: GlewInit failed, something is seriously wrong. */
  208.                fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
  209.  
  210.             }
  211.                fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
  212.             /////////////////////////////////////////////////////////////////////////////////////    
  213.    
  214.              
  215.             //ON and OFF Switch for Application
  216.             bool done = false;
  217.  
  218.             //SDL Event
  219.             SDL_Event event;
  220.  
  221.  
  222.             //////////////////////////////////////////////////////////////////////////////////////
  223.  
  224.               //////////////////////
  225.              //Global Variables
  226.             //////////////////////
  227.  
  228.  
  229.             //Container for Virtual Array Object
  230.             GLuint vao;
  231.          
  232.             //Container for Virtual Buffer Object
  233.             GLuint vbo;
  234.  
  235.             //Texture Sampler
  236.             GLint myTextureSampler;
  237.            
  238.             //////////////////////////////////////////////////////////////////////////////
  239.  
  240.  
  241.             ////////////////////////////////////////////////////////////////////////////
  242.  
  243.              //////////////////
  244.             //IMAGE LOADING
  245.            //////////////////
  246.  
  247.  
  248.             //Top File Menu <Top ToolBar>
  249.            SDL_Surface *TopFileMenuSurf = NULL;
  250.  
  251.            TopFileMenuSurf = IMG_Load("GUI/FileMenu.png");
  252.  
  253.            ///////////////////////////////////////////////////////////////////////
  254.    
  255.                 ///////////////////
  256.                //Vertex Cordinates
  257.               ///////////////////        
  258.  
  259.                  //File Menu Cordinates x y z w - NEEDS TEX CORDS
  260.                 static const GLfloat FileMenuVerts[] = {
  261.                              1.0f,  1.0f, 0.0f,  1.0f, 1.0f, 1.0f,
  262.                              -1.0f,  1.0f, 0.0f,  1.0f, 0.0f, 1.0f,
  263.                              -1.0f,  0.94f, 0.0f, 1.0f, 0.0f, 0.0f,
  264.                              1.0f,   0.94f, 0.0f, 1.0f, 1.0f, 0.0f
  265.                    };
  266. //-1
  267.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  268.                    
  269.                     /////////////////////////////
  270.                    // OpenGL - Viewport Setup
  271.                   /////////////////////////////
  272.  
  273.  
  274.                   //Clear Color
  275.                   glClearColor(0.0,0.0,0.0,0.0);
  276.      
  277.                   //View Port Setup
  278.                   glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
  279.  
  280.  
  281.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  282.                  
  283.                    //Load Shader Program
  284.                    LoadProgram("graphicaluserinterface.v", "graphicaluserinterface.f");
  285.  
  286.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  287.  
  288.                     ///////////////////////////////////
  289.                    // Vertex Array Object <SETUP>
  290.                   //////////////////////////////////
  291.  
  292.                   //Generate Vertex Array Object
  293.                   glGenVertexArrays(1, &vao);
  294.  
  295.                  
  296.                   //Bind Vertex Array Object as the current used object
  297.                   glBindVertexArray(vao);
  298.  
  299.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  300.  
  301.                     ///////////////////////////////////
  302.                    // Vertex Buffer Object <SETUP>
  303.                   //////////////////////////////////
  304.  
  305.                   //Generate Vertex Buffer Object
  306.                   glGenBuffers(1, &vbo);
  307.                  
  308.  
  309.                   //Bind array buffer to Vertex Buffer Object
  310.                   glBindBuffer(GL_ARRAY_BUFFER, vbo);
  311.  
  312.  
  313.                   //Give data to Vertex Buffer Object
  314.                   glBufferData(GL_ARRAY_BUFFER, sizeof(FileMenuVerts), FileMenuVerts, GL_STATIC_DRAW);
  315.  
  316.                   //////////////////////////////////////////////////////////////////////////////////////////////////
  317.  
  318.                     ///////////////////////////////////
  319.                    // Attribute <SETUP>
  320.                   //////////////////////////////////
  321.                  
  322.                   //<INDEX GOES UP FOR EACH ATTRIBUTE THATS ONE MORE INDEX TO ADD TO CURRENT INDEX COUNT >//
  323.  
  324.                   //Set up Attribute for "index 0"
  325.                   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float)*6, 0);
  326.                    
  327.                  
  328.  
  329.                   //Enable Attribute for "index 0"
  330.                   glEnableVertexAttribArray(0);
  331.                
  332.  
  333.                    
  334.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  335.                  
  336.                     ///////////////////////////////////
  337.                    // Textures <SETUP>
  338.                   //////////////////////////////////
  339.                  
  340.                   ////////////////////////////////////////
  341.                   //Top File Menu Bar Texture Loading
  342.                   ///////////////////////////////////////
  343.  
  344.                   // Create one OpenGL texture
  345.                   GLuint textureID;
  346.                   glGenTextures(1, &textureID);
  347.  
  348.                   // "Bind" the newly created texture : all future texture functions will modify this texture
  349.                   glBindTexture(GL_TEXTURE_2D, textureID);
  350.  
  351.                   // Give the image to OpenGL
  352.                   glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, TopFileMenuSurf->w,TopFileMenuSurf->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, TopFileMenuSurf->pixels);
  353.  
  354.                   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  355.                   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  356.                  
  357.                   /////////////////////////////////////////////////////////////////////////////////////////////////////
  358.  
  359.                     ///////////////////////////////////
  360.                    // Uniforms <SETUP>
  361.                   //////////////////////////////////
  362.                  
  363.                  glUniform1i(myTextureSampler, 0.0);
  364.  
  365.                  
  366.                 /////////////////////////////////////////////////////////////////////////////////////////////////////
  367.  
  368.  
  369.           //Main While Loop
  370.           while(!done)
  371.           {
  372.                  
  373.            
  374.  
  375.              //Clear
  376.              glClear(GL_COLOR_BUFFER_BIT);
  377.          
  378.        
  379.              //Logic
  380.              
  381.  
  382.  
  383.             //draw
  384.             draw();
  385.          
  386.  
  387.           //SDL EVENT QUEUE
  388.           while(SDL_PollEvent(&event))
  389.             {
  390.             switch(event.type)
  391.                {
  392.                
  393.                  case SDL_QUIT:
  394.                    return 0;
  395.                    break;          
  396.                   }
  397.              
  398.                    
  399.                 }
  400.      
  401.  
  402.                      //Update
  403.                      SDL_GL_SwapBuffers();  
  404.  
  405.  
  406.           }
  407.                    
  408.  
  409. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  410.        
  411.                
  412.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement