Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.62 KB | None | 0 0
  1. #include <iostream>
  2. //#include <GLES3/gl3.h>
  3. #include <GLES2/gl2.h>
  4. #include <GLES2/gl2ext.h>
  5. #include <SDL/SDL.h>
  6. #include <ctime>
  7. #include <unistd.h>
  8.  
  9. #ifdef EMSCRIPTEN
  10. #include <emscripten.h>
  11. #endif
  12.  
  13. #include "shaders.h"
  14.  
  15. using namespace std;
  16.  
  17. GLuint programObject;
  18. SDL_Surface* screen;
  19.  
  20. GLfloat vVertices[] = {
  21.     0.0f, 0.5f, 0.0f,
  22.     -0.5f, -0.5f, 0.0f,
  23.     0.5f, -0.5f, 0.0f
  24. };
  25. GLint uniformOriginX, uniformOriginY, uniformZoom;
  26.  
  27.  
  28. int initGL(int width, int height)
  29. {
  30.     //initialise SDL
  31.     if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) == 0)
  32.     {
  33.         screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL);
  34.         if (screen == NULL)
  35.         {
  36.             cerr << "Could not set video mode: " << SDL_GetError() << endl;
  37.             return 0;
  38.         }
  39.     }
  40.     else
  41.     {
  42.         cerr << "Could not initialize SDL: " << SDL_GetError() << endl;
  43.         return 0;
  44.     }
  45.  
  46.     //SDL initialised successfully, now load shaders and geometry
  47.  
  48.     const char vertexShaderSource[] =
  49.         "attribute vec4 vPosition;                           \n"
  50.         "uniform float originX, originY;                     \n"
  51.         "uniform float zoom;                                 \n"
  52.         "varying vec3 color;                                 \n"
  53.         "void main()                                         \n"
  54.         "{                                                   \n"
  55.         "   gl_Position = vPosition;                         \n"
  56.         "   gl_Position.x = (originX + gl_Position.x) * zoom;\n"
  57.         "   gl_Position.y = (originY + gl_Position.y) * zoom;\n"
  58.         "   color = gl_Position.xyz + vec3(0.5);             \n"
  59.         "}                                                   \n";
  60.  
  61.     const char fragmentShaderSource[] =
  62.         "precision mediump float;                     \n"
  63.         "varying vec3 color;                          \n"
  64.         "void main()                                  \n"
  65.         "{                                            \n"
  66.         "  gl_FragColor = vec4 ( color, 1.0 );        \n"
  67.         "}                                            \n";
  68.  
  69.     //load vertex and fragment shaders
  70.     GLuint vertexShader = loadShader(GL_VERTEX_SHADER, vertexShaderSource);
  71.     GLuint fragmentShader = loadShader(GL_FRAGMENT_SHADER, fragmentShaderSource);
  72.     programObject = buildProgram(vertexShader, fragmentShader, "vPosition");
  73.  
  74.     //save location of uniform variables
  75.     uniformOriginX = glGetUniformLocation(programObject, "originX");
  76.     uniformOriginY = glGetUniformLocation(programObject, "originY");
  77.     uniformZoom = glGetUniformLocation(programObject, "zoom");
  78.  
  79.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  80.     //glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
  81.     glViewport(0, 0, width, height);
  82.     return 1;
  83. }
  84. float getrandom(){
  85.     return -1 + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(1-(-1))));
  86. }
  87. float* getrandom3(){
  88.     return new float[3]{getrandom(),getrandom(),getrandom()};
  89. }
  90. void drawTriangle(float *translation)
  91. {
  92.     //fill the screen with the clear color
  93.     //glClear(GL_COLOR_BUFFER_BIT);
  94.  
  95.     //enable our shader program
  96.     glUseProgram(programObject);
  97.     //set up the translation
  98.     glUniform1f(uniformOriginX, translation[0]);
  99.     glUniform1f(uniformOriginY, translation[1]);
  100.     glUniform1f(uniformZoom, translation[2]);
  101.     //set up the vertices array
  102.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
  103.     glEnableVertexAttribArray(0);
  104.     //draw the triangle
  105.     glDrawArrays(GL_TRIANGLES, 0, 3);
  106.  
  107.     //swap buffer to make whatever we've drawn to backbuffer appear on the screen
  108.     SDL_GL_SwapBuffers();
  109. }
  110.  
  111. int main(){
  112.  
  113.     initGL(400,400);
  114.     //while(true){
  115.    
  116.     drawTriangle(getrandom3());
  117.     usleep(1000000);
  118.     drawTriangle(getrandom3());
  119.     usleep(1000000);
  120.     drawTriangle(getrandom3());
  121.     usleep(1000000);
  122.     //}
  123.  
  124.  
  125.     return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement