Guest User

Untitled

a guest
Jul 18th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.20 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.              glBindAttribLocation(ProgramID, 1, "Texcoord1");
  125.  
  126.             //Link The Program
  127.            
  128.             glAttachShader(ProgramID, VertexShaderID);
  129.             glAttachShader(ProgramID, FragmentShaderID);
  130.             glLinkProgram(ProgramID);
  131.  
  132.             GLuint texture1;
  133.  
  134.             texture1 = glGetUniformLocation(ProgramID, "myTextureSampler");
  135.  
  136.                
  137.             //Check The Program
  138.             glGetProgramiv(ProgramID,  GL_LINK_STATUS, &Result);
  139.             glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
  140.             vector<char> ProgramErrorMessage( max(InfoLogLength, int(1)) );
  141.             fprintf(stdout,  "%s\n", &ProgramErrorMessage[0]);
  142.            
  143.             //Delete Shader
  144.             glDeleteShader(VertexShaderID);
  145.             glDeleteShader(FragmentShaderID);
  146.  
  147.            
  148.            
  149.             glUseProgram(ProgramID);
  150.  
  151.  
  152.             //Return ProgramID
  153.              return ProgramID;
  154.    
  155.                  
  156.             }
  157.      
  158.                   //Draw Function for arrays
  159.                   void draw (void)
  160.                   {
  161.                     //Drawing ToolBar
  162.                     glDrawArrays(GL_QUADS, 0, 4);
  163.  
  164.    
  165.                     //Drawing MainToolBox
  166.                     glDrawArrays(GL_QUADS, 4, 4);
  167.  
  168.                   }
  169.  
  170.         //Main Entry Point
  171.         int main(int argc , char *argv[])
  172.         {
  173.           /////////////////////////////////////////////////////////////////////////////////////////////////
  174.  
  175.           //////////////////
  176.           //SDL SETUP
  177.           /////////////////
  178.  
  179.           //ENABLE SDL
  180.           SDL_Init(SDL_INIT_EVERYTHING);
  181.        
  182.           //Screen Position
  183.           SDL_putenv("SDL_VIDEO_CENTERED=center");
  184.  
  185.        
  186.  
  187.           //Screen Setup
  188.           Screen = SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,BPP,SDL_OPENGL|SDL_DOUBLEBUF);
  189.        
  190.           //////////////////////////////////////////////////////////////////////////////////////////
  191.  
  192.             //////////////////
  193.            //GLEW SETUP
  194.           /////////////////
  195.          
  196.           //Glew setup
  197.           GLenum err = glewInit();
  198.            glGetError();
  199.  
  200.           //Glew Error Checking
  201.           if (GLEW_OK != err)
  202.             {
  203.               /* Problem: GlewInit failed, something is seriously wrong. */
  204.                fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
  205.  
  206.             }
  207.                fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
  208.             /////////////////////////////////////////////////////////////////////////////////////    
  209.            
  210.             ///////////////////////
  211.             //ON AND OFF SWITCHES
  212.             //////////////////////
  213.              
  214.             //ON and OFF Switch for Application
  215.             bool done = false;
  216.  
  217.             bool MenuContextToggle = false;
  218.  
  219.             /////////////////////////////////////////
  220.            
  221.             /////////////////
  222.             //EVENT CREATION
  223.             ////////////////
  224.  
  225.             //SDL Event
  226.             SDL_Event event;
  227.  
  228.             ////////////////////////////////////////////
  229.  
  230.               //////////////////////
  231.              //Global Variables
  232.             //////////////////////
  233.  
  234.             //Container for Virtual Array Object
  235.             GLuint vao;
  236.          
  237.             //Containers for Virtual Buffer Object
  238.             GLuint vbo;
  239.             GLuint vbo2;
  240.  
  241.             //Texture Sampler
  242.             GLint myTextureSampler;
  243.            
  244.             //////////////////////////////////////////////////////////////////////////////
  245.  
  246.  
  247.             ////////////////////////////////////////////////////////////////////////////
  248.  
  249.              //////////////////
  250.             //IMAGE LOADING
  251.            //////////////////
  252.  
  253.             //Top File Menu <Top ToolBar>
  254.            SDL_Surface *TopFileMenuSurf = NULL;
  255.  
  256.            SDL_Surface *MainToolBoxSurf = NULL;
  257.  
  258.  
  259.            MainToolBoxSurf = IMG_Load("GUI/MainToolBox.tga");
  260.  
  261.            TopFileMenuSurf = IMG_Load("GUI/FileMenu.tga");
  262.  
  263.            ///////////////////////////////////////////////////////////////////////
  264.    
  265.                 ///////////////////
  266.                //Vertex Cordinates
  267.               ///////////////////        
  268.  
  269.                  //GUI Cordinates x y z w - NEEDS TEX CORDS
  270.                 static const GLfloat GUIVertices[] = {
  271.                        
  272.                              ///////////////////////////////////////////////////////////////////////////
  273.                            
  274.                              //ToolBar
  275.                              1.0f,  1.0f,  0.0f, 1.0f, 1.0f, 0.0f,
  276.                              -1.0f,  1.0f, 0.0f, 1.0f, 0.0f, 0.0f,
  277.                              -1.0f,  0.94f, 0.0f, 1.0f, 0.0f, 1.0f,
  278.                              1.0f,   0.94f, 0.0f, 1.0f, 1.0f, 1.0f,  
  279.  
  280.                              //////////////////////////////////////////////////////////////////////////
  281.                              
  282.                                          //Main ToolBox
  283.                              // x     y       z   w       X    Y
  284.                              1.0f, -1.0f,   0.0f, 1.0f, 1.0f, 0.0f,
  285.                              -1.0f,-1.0f,   0.0f, 1.0f, 0.0f, 0.0f,
  286.                              -1.0f,-0.94f,  0.0f,1.0f, 0.0f, 1.0f,
  287.                              1.0f, -0.94f,  0.0f,1.0f, 1.0f, 1.0,
  288.  
  289.  
  290.                 };
  291.                
  292.  
  293.                   MenuContextToggle = true;
  294.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  295.                    
  296.                     /////////////////////////////
  297.                    // OpenGL - Viewport Setup
  298.                   /////////////////////////////
  299.  
  300.  
  301.                   //Clear Color
  302.                   glClearColor(0.0,0.0,0.0,0.0);
  303.      
  304.                   //View Port Setup
  305.                   glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
  306.  
  307.  
  308.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  309.                  
  310.  
  311.                     ////////////////
  312.                    //Load Shaders
  313.                   /////////////////
  314.  
  315.                  
  316.                    //Load Shader Program
  317.                    LoadProgram("graphicaluserinterface.v", "graphicaluserinterface.f");
  318.  
  319.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  320.  
  321.                     ///////////////////////////////////
  322.                    // Vertex Array Object <SETUP>
  323.                   //////////////////////////////////
  324.  
  325.                   //Generate Vertex Array Object
  326.                   glGenVertexArrays(1, &vao);
  327.  
  328.                  
  329.                   //Bind Vertex Array Object as the current used object
  330.                   glBindVertexArray(vao);
  331.  
  332.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  333.  
  334.                     ///////////////////////////////////
  335.                    // Vertex Buffer Object <SETUP>
  336.                   //////////////////////////////////
  337.  
  338.                   //Generate Vertex Buffer Object
  339.                   glGenBuffers(1, &vbo);
  340.                  
  341.  
  342.                   //Bind array buffer to Vertex Buffer Object
  343.                   glBindBuffer(GL_ARRAY_BUFFER, vbo);
  344.                  
  345.                   //Give data to Vertex Buffer Object
  346.                   glBufferData(GL_ARRAY_BUFFER, sizeof(GUIVertices), GUIVertices, GL_DYNAMIC_DRAW);
  347.                
  348.                   //////////////////////////////////////////////////////////////////////////////////////////////////
  349.  
  350.                     ///////////////////////////////////
  351.                    // Attributes <SETUP>
  352.                   //////////////////////////////////
  353.                  
  354.                   //<INDEX GOES UP FOR EACH ATTRIBUTE THATS ONE MORE INDEX TO ADD TO CURRENT INDEX COUNT >//
  355.  
  356.                   //Set up Attribute for "index 0"  ToolBar?
  357.                   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float)*6, 0);
  358.                  
  359.                   //Texture Cordinates for ToolBar
  360.                   glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 6 * sizeof(float),reinterpret_cast<const GLvoid *>(4 * sizeof(float)));
  361.  
  362.                  
  363.  
  364.                   //Enable Attribute for "index 0"
  365.                   glEnableVertexAttribArray(0);
  366.  
  367.                   //Enable Attribute for "index 1"
  368.                   glEnableVertexAttribArray(1);
  369.  
  370.                    
  371.                   ////////////////////////////////////////////////////////////////////////////////////////////////////
  372.                  
  373.                     ///////////////////////////////////
  374.                    // Textures <SETUP>
  375.                   //////////////////////////////////
  376.                  
  377.                   ////////////////////////////////////////
  378.                   //Top File Menu Bar Texture Loading
  379.                   ///////////////////////////////////////
  380.  
  381.                   // Create one OpenGL texture
  382.                   GLuint textureID;
  383.                   glGenTextures(1, &textureID);
  384.  
  385.                   // "Bind" the newly created texture : all future texture functions will modify this texture
  386.                   glBindTexture(GL_TEXTURE_2D, textureID);
  387.  
  388.                   // Give the image to OpenGL
  389.                   glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, TopFileMenuSurf->w,TopFileMenuSurf->h, 0, GL_BGR, GL_UNSIGNED_BYTE, TopFileMenuSurf->pixels);
  390.  
  391.                   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  392.                   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  393.  
  394.                   // Create one OpenGL texture
  395.                   GLuint textureID2;
  396.                   glGenTextures(1, &textureID2);
  397.  
  398.                   // "Bind" the newly created texture : all future texture functions will modify this texture
  399.                   glBindTexture(GL_TEXTURE_2D, textureID2);
  400.  
  401.                   // Give the image to OpenGL
  402.                   glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, MainToolBoxSurf->w,MainToolBoxSurf->h, 0, GL_BGR, GL_UNSIGNED_BYTE, MainToolBoxSurf->pixels);
  403.  
  404.                   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  405.                   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  406.  
  407.                   glActiveTexture(GL_TEXTURE1);
  408.          
  409.          
  410.            
  411.                 /////////////////////////////////////////////////////////////////////////////////////////////////////
  412.  
  413.  
  414.           //Main While Loop
  415.           while(!done)
  416.           {
  417.                  
  418.            
  419.  
  420.              //Clear
  421.              glClear(GL_COLOR_BUFFER_BIT);
  422.          
  423.        
  424.              //Logic
  425.              
  426.  
  427.  
  428.             //draw
  429.             draw();
  430.          
  431.  
  432.           //SDL EVENT QUEUE
  433.           while(SDL_PollEvent(&event))
  434.             {
  435.             switch(event.type)
  436.                {
  437.                
  438.                  case SDL_QUIT:
  439.                    return 0;
  440.                    break;          
  441.                   }
  442.              
  443.                    
  444.                 }
  445.      
  446.  
  447.                      //Update
  448.                      SDL_GL_SwapBuffers();  
  449.  
  450.  
  451.           }
  452.                    
  453.  
  454. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  455.        
  456.                
  457.         }
Add Comment
Please, Sign In to add comment