Guest User

Untitled

a guest
Jun 20th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. GLuint LoadShader(const char *shaderSrc, GLenum type)
  2. {
  3. GLuint shader;
  4. GLint compiled;
  5.  
  6. // Create the shader object
  7. shader = glCreateShader(type);
  8.  
  9. if(shader == 0)
  10. return 0;
  11.  
  12. // Load the shader source
  13. glShaderSource(shader, 1, &shaderSrc, NULL);
  14.  
  15. // Compile the shader
  16. glCompileShader(shader);
  17.  
  18. // Check the compile status
  19. glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
  20.  
  21. if(!compiled)
  22. {
  23. GLint infoLen = 0;
  24.  
  25. glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
  26.  
  27. if(infoLen > 1)
  28. {
  29. char* infoLog = malloc(sizeof(char) * infoLen);
  30.  
  31. glGetShaderInfoLog(shader, infoLen, NULL, infoLog);
  32. esLogMessage("Error compiling shader:\n%s\n", infoLog);
  33. free(infoLog);
  34. }
  35.  
  36. glDeleteShader(shader);
  37. return 0;
  38. }
  39.  
  40. return shader;
  41.  
  42. }
  43.  
  44. int Init(ESContext *esContext)
  45. UserData *userData = esContext->userData;
  46. GLbyte vShaderStr[] =
  47. "attribute vec4 vPosition; \n"
  48. "void main() \n"
  49. "{ \n"
  50. " gl_Position = vPosition; \n"
  51. "} \n";
  52.  
  53. GLbyte fShaderStr[] =
  54. "precision mediump float; \n"
  55. "void main() \n"
  56. "{ \n"
  57. " gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); \n"
  58. "} \n";
  59.  
  60. GLuint vertexShader;
  61. GLuint fragmentShader;
  62. GLuint programObject;
  63. GLint linked;
  64.  
  65. // Load the vertex/fragment shaders
  66. vertexShader = LoadShader(GL_VERTEX_SHADER, vShaderStr);
  67. fragmentShader = LoadShader(GL_FRAGMENT_SHADER, fShaderStr);
  68.  
  69. // Create the program object
  70. programObject = glCreateProgram();
  71.  
  72. if(programObject == 0)
  73. return 0;
  74.  
  75. glAttachShader(programObject, vertexShader);
  76. glAttachShader(programObject, fragmentShader);
  77.  
  78. // Bind vPosition to attribute 0
  79. glBindAttribLocation(programObject, 0, "vPosition");
  80.  
  81. // Link the program
  82. glLinkProgram(programObject);
  83.  
  84. // Check the link status
  85. glGetProgramiv(programObject, GL_LINK_STATUS, &linked);
  86.  
  87. if(!linked)
  88. {
  89. GLint infoLen = 0;
  90.  
  91. glGetProgramiv(programObject, GL_INFO_LOG_LENGTH, &infoLen);
  92.  
  93. if(infoLen > 1)
  94. {
  95. char* infoLog = malloc(sizeof(char) * infoLen);
  96.  
  97. glGetProgramInfoLog(programObject, infoLen, NULL, infoLog);
  98. esLogMessage("Error linking program:\n%s\n", infoLog);
  99.  
  100. free(infoLog);
  101. }
  102.  
  103. glDeleteProgram(programObject);
  104. return FALSE;
  105. }
  106.  
  107. // Store the program object
  108. userData->programObject = programObject;
  109.  
  110. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  111. return TRUE;
  112.  
  113. glUseProgram(userData->programObject);
  114.  
  115. // Load the vertex data
  116. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
  117. glEnableVertexAttribArray(0);
  118.  
  119. glDrawArrays(GL_TRIANGLES, 0, 3);
Add Comment
Please, Sign In to add comment