Advertisement
Guest User

Untitled

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