Advertisement
Guest User

Untitled

a guest
Apr 20th, 2016
709
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iterator>
  4. #include <array>
  5. #include <stdlib.h>
  6. #include <string>
  7. #include <vector>
  8. #include <sstream>
  9. #include <SDL.h>
  10. #include <gl/glew.h>
  11. #include <SDL_opengl.h>
  12.  
  13. SDL_Window *mainwindow = { 0 };
  14. SDL_GLContext maincontext = { 0 };
  15. SDL_Event mainevent;
  16.  
  17. class SDL_Engine {
  18. public:
  19. int SDL_Start() {
  20. SDL_Init(SDL_INIT_EVERYTHING);
  21. return 1;
  22. }
  23.  
  24. int Setup_GL_Window_DEFAULT(
  25. int x, int y, int w, int h, const char *title)
  26. {
  27. mainwindow = SDL_CreateWindow("C++ GL Engine", 100, 100, 640, 480,
  28. SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
  29.  
  30. maincontext = SDL_GL_CreateContext(mainwindow);
  31. SDL_GL_MakeCurrent(mainwindow, maincontext);
  32.  
  33. GLenum err = glewInit();
  34. if (GLEW_OK != err)
  35. {
  36. /* Problem: glewInit failed, something is seriously wrong. */
  37. printf("Error: %s\n", glewGetErrorString(err));
  38. }
  39.  
  40. printf("Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
  41.  
  42. return 2;
  43. }
  44. };
  45.  
  46.  
  47.  
  48. class OGL_Engine {
  49. public :
  50. GLuint LoadShader(const char *vertshaderfilename, const char *fragshaderfilename, GLuint ShaderProgram) {
  51.  
  52. //VERTEX SHADER SOURCE AND COMPILE CODE
  53. std::ifstream vertfile(vertshaderfilename);
  54.  
  55. vertfile.seekg(0, vertfile.end);
  56. int vertlength = vertfile.tellg();
  57. vertfile.seekg(0, vertfile.beg);
  58.  
  59. char *tempvertbuffer = new char[vertlength];
  60.  
  61. std::string tempvertstring;
  62.  
  63. std::cout << vertlength << std::endl;
  64.  
  65. while (vertfile.getline(tempvertbuffer, vertlength))
  66. {
  67. tempvertstring += tempvertbuffer;
  68. tempvertstring += '\n';
  69. }
  70.  
  71. vertfile.close();
  72.  
  73. GLuint vertexshader = glCreateShader(GL_VERTEX_SHADER);
  74.  
  75. const char *vertcbuffer = new char[vertlength];
  76.  
  77. vertcbuffer = tempvertstring.c_str();
  78.  
  79. std::cout << vertcbuffer << std::endl;
  80. glShaderSource(vertexshader, 1, &vertcbuffer, &vertlength);
  81.  
  82. glCompileShader(vertexshader);
  83.  
  84. GLint vertsuccess = 0;
  85. glGetShaderiv(vertexshader, GL_COMPILE_STATUS, &vertsuccess);
  86. std::cout << vertsuccess << std::endl;
  87. if(vertsuccess == GL_FALSE)
  88. {
  89.  
  90. GLint vertmaxlength = 0;
  91. glGetShaderiv(vertexshader, GL_INFO_LOG_LENGTH, &vertmaxlength);
  92.  
  93. char *vertinfolog = new char[vertmaxlength];
  94.  
  95. glGetShaderInfoLog(vertexshader, vertmaxlength, &vertmaxlength, vertinfolog);
  96.  
  97.  
  98. std::cout << vertinfolog << std::endl;
  99. }
  100.  
  101.  
  102. //FRAGMENT SHADER SOURCE AND COMPILE CODE
  103. std::ifstream fragfile(fragshaderfilename);
  104.  
  105. fragfile.seekg(0, fragfile.end);
  106. int fraglength = fragfile.tellg();
  107. fragfile.seekg(0, fragfile.beg);
  108.  
  109. char *tempfragbuffer = new char[fraglength];
  110.  
  111. std::string tempfragstring;
  112.  
  113. std::cout << fraglength << std::endl;
  114.  
  115. while (fragfile.getline(tempfragbuffer, fraglength))
  116. {
  117. tempfragstring += tempfragbuffer;
  118. tempfragstring += '\n';
  119. }
  120.  
  121. fragfile.close();
  122.  
  123. GLuint fragmentshader = glCreateShader(GL_FRAGMENT_SHADER);
  124.  
  125. const char *fragcbuffer = new char[fraglength];
  126.  
  127. fragcbuffer = tempfragstring.c_str();
  128.  
  129. std::cout << fragcbuffer << std::endl;
  130. glShaderSource(fragmentshader, 1, &fragcbuffer, &fraglength);
  131.  
  132. glCompileShader(fragmentshader);
  133.  
  134. GLint fragsuccess = 0;
  135. glGetShaderiv(fragmentshader, GL_COMPILE_STATUS, &fragsuccess);
  136. std::cout << fragsuccess << std::endl;
  137. if (fragsuccess == GL_FALSE)
  138. {
  139.  
  140. GLint fragmaxlength = 0;
  141. glGetShaderiv(fragmentshader, GL_INFO_LOG_LENGTH, &fragmaxlength);
  142.  
  143. char *fraginfolog = new char[fragmaxlength];
  144.  
  145. glGetShaderInfoLog(fragmentshader, fragmaxlength, &fragmaxlength, fraginfolog);
  146.  
  147.  
  148. std::cout << fraginfolog << std::endl;
  149. }
  150.  
  151. ShaderProgram = glCreateProgram();
  152.  
  153. glAttachShader(ShaderProgram, vertexshader);
  154. glAttachShader(ShaderProgram, fragmentshader);
  155.  
  156.  
  157. glLinkProgram(ShaderProgram);
  158. GLint shaderprogramlinking = 0;
  159. glGetProgramiv(ShaderProgram, GL_LINK_STATUS, &shaderprogramlinking);
  160.  
  161. if (shaderprogramlinking == GL_FALSE)
  162. {
  163. std::cout << "not fucking " << std::endl;
  164. }
  165. GLint shaderloglength = 0;
  166. glGetProgramiv(ShaderProgram, GL_INFO_LOG_LENGTH, &shaderloglength);
  167. char *shaderInfoLog = new char[shaderloglength];
  168. glGetProgramInfoLog(ShaderProgram, shaderloglength, &shaderloglength, shaderInfoLog);
  169.  
  170. std::cout << "cunt \n" << shaderInfoLog << std::endl;
  171.  
  172. return ShaderProgram;
  173.  
  174. }
  175.  
  176. //GLint GetUniform(GLuint program, const GLchar * name, GLint location,
  177. // GLsizei count, const GLfloat *value)
  178. //{
  179.  
  180. // location = glGetUniformLocation(program , name);
  181. // glUniformMatrix4fv(location, 1, GL_TRUE, value);
  182.  
  183. // return 1;
  184. //}
  185.  
  186.  
  187. };
  188. int main(int argc, char *argv[])
  189. {
  190. SDL_Engine SDL_engine;
  191.  
  192. SDL_engine.SDL_Start();
  193.  
  194. SDL_engine.Setup_GL_Window_DEFAULT( 100, 100, 640, 480,
  195. "C++ GL Engine");
  196.  
  197. OGL_Engine OGL_engine;
  198.  
  199.  
  200.  
  201. //potential problem drawarray uses it too
  202. GLuint vertexarray = 0;
  203.  
  204. //OGL_engine.GenerateAndBindVertexArray(0, vertexarray, 0);
  205.  
  206. GLuint vertbuffer = 0;
  207.  
  208. std::vector<GLfloat> vertbufferdata, vertbufferdata2;
  209.  
  210. GLfloat vertdata[] = {
  211. +0.0f, +0.0f, +0.0f,
  212. +0.5f, +0.5, +0.0f,
  213. -0.5f, +0.5f, +0.0f,
  214.  
  215. +0.0f, +0.0f, +0.0f,
  216. -0.5f, -0.5, +0.0f,
  217. +0.5f, -0.5f, +0.0f
  218. };
  219. //possible problem with vertdata
  220. vertbufferdata.insert(vertbufferdata.end(), &vertdata[0], &vertdata[18]);
  221. for (int i = 0; i < vertbufferdata.size(); i++)
  222. std::cout << ' ' << vertbufferdata[i] << std::endl;
  223.  
  224.  
  225.  
  226. GLenum errortag = 0;
  227.  
  228. //OGL_engine.SetBufferData(1, vertbuffer, vertbufferdata, errortag);
  229.  
  230. GLuint VAO = 0;
  231. //glGenVertexArrays(1, &VAO);
  232. std::cout << "NUM: " << VAO << std::endl;
  233. //glBindVertexArray(VAO);
  234.  
  235. GLuint ShaderPrograms = 0;
  236. ShaderPrograms = OGL_engine.LoadShader("shader/vertshader.vert", "shader/fragshader.frag", ShaderPrograms);
  237.  
  238. GLuint VBO = 0, VBO2;
  239.  
  240. glGenBuffers(1, &VBO);
  241. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  242.  
  243. glBufferData(GL_ARRAY_BUFFER, vertbufferdata.size() * sizeof(GLfloat), vertbufferdata.data(), GL_STATIC_DRAW);
  244.  
  245.  
  246. glEnableVertexAttribArray(0);
  247.  
  248. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  249.  
  250. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
  251.  
  252.  
  253. //GLint GetUniform(GLuint program, const GLchar * name, GLint location,
  254. // GLsizei count, const GLfloat *value)
  255. //{
  256.  
  257. // GLint location = glGetUniformLocation(program, name);
  258. // glUniformMatrix4fv(location, 1, GL_FALSE, value);
  259. //}
  260. GLuint univar = 0;
  261.  
  262. /*std::vector<GLfloat> modelviewmatrixvec;
  263. modelviewmatrixvec.insert(modelviewmatrixvec.end(), &modelviewmatrix[0], &modelviewmatrix[15]);
  264.  
  265. for (int i = 0; i < modelviewmatrixvec.size(); i++)
  266. std::cout << ' ' << modelviewmatrixvec[i] << std::endl;*/
  267.  
  268. //OGL_engine.GetUniform(ShaderPrograms, "modelview", univar,
  269. // 1, &modelviewmatrix[0]);
  270.  
  271.  
  272. const GLfloat modelviewmatrix[] = {
  273. 1.0f , 0.0f , 0.0f , 0.0f,
  274. 0.0f, 1.0f, 0.0f , 0.0f ,
  275. 0.0f, 0.0f, 1.0f, 0.0f,
  276. 0.0f, 0.0f, 0.0f, 1.0f
  277. };
  278.  
  279. GLint locationID = glGetUniformLocation(ShaderPrograms, "modelviewMatrix");
  280.  
  281. std::cout << "location->" <<locationID << std::endl;
  282. glUniformMatrix4fv(locationID, 1, GL_FALSE, modelviewmatrix);
  283.  
  284. GLenum error;
  285.  
  286. error = glGetError();
  287.  
  288. if (error != GL_NO_ERROR)
  289. {
  290. std::cout << "not working" << std::endl;
  291. }
  292.  
  293. if (error == GL_INVALID_OPERATION)
  294. {
  295. std::cout << "FUCKING INVALID OPERATION" << std::endl;
  296. }
  297. if (error == GL_NO_ERROR)
  298. {
  299. std::cout << "No Fucking Error! -> CODE CHECKING <-" << std::endl;
  300. }
  301.  
  302. if (error == GL_INVALID_VALUE)
  303. {
  304. std::cout << "NO FUCKING VALUE" << std::endl;
  305. }
  306.  
  307. if (error == GL_OUT_OF_MEMORY)
  308. {
  309. std::cout << "NO FUCKING MEMORY" << std::endl;
  310. }
  311.  
  312. if (error == GL_STACK_OVERFLOW)
  313. {
  314. std::cout << "NO FUCKING OVERFLOW" << std::endl;
  315. }
  316.  
  317.  
  318. if (error == GL_INVALID_FRAMEBUFFER_OPERATION)
  319. {
  320. std::cout << "invalid framebuffer <-" << std::endl;
  321. }
  322.  
  323. if (error == GL_OUT_OF_MEMORY)
  324. {
  325. std::cout << "Out of Memory" << std::endl;
  326. }
  327.  
  328.  
  329. //OGL_engine.SetVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,
  330. //3 * sizeof(GLfloat), (GLvoid*)0);
  331.  
  332. //OGL_engine.BindVertexArray(vertexarray);
  333.  
  334. glClearColor(0, 0, 0, 1.0);
  335. bool running = true;
  336. while (running == true) {
  337. while (SDL_PollEvent(&mainevent)) {
  338. switch (mainevent.type){
  339. case SDL_QUIT:
  340. SDL_GL_DeleteContext(maincontext);
  341. SDL_Quit();
  342. return 0;
  343. }
  344.  
  345. }
  346. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  347.  
  348. //OGL_engine.DrawArray(GL_TRIANGLES, vertbufferdata[0], vertbufferdata.size(), vertexarray);
  349. glUseProgram(ShaderPrograms);
  350. glDrawArrays(GL_TRIANGLES, vertbufferdata[0], vertbufferdata.size());
  351. SDL_GL_SwapWindow(mainwindow);
  352. }
  353. return 0;
  354. }
  355.  
  356. //int BindVertexArray(GLuint array)
  357. //{
  358. // glBindVertexArray(array);
  359. // return 1;
  360. //}
  361.  
  362. //int GenerateAndBindVertexArray(GLsizei num, GLuint array, int van)
  363. //{
  364. // glGenVertexArrays(num, &array);
  365. // std::cout << "num " << num << std::endl;
  366. // glBindVertexArray(array);
  367. //
  368. // return 2;
  369. //}
  370.  
  371. //int BindVertexBuffer(GLuint vbo)
  372. //{
  373. // glBindBuffer(GL_ARRAY_BUFFER, vbo);
  374. // return 3;
  375. //}
  376.  
  377. //int GenerateAndBindVertexBufferObject(GLsizei num, GLuint vbo)
  378. //{
  379. // glGenBuffers(num, &vbo);
  380. // std::cout << "BUFFERNAME -> " << vbo << std::endl;
  381. // glBindBuffer(GL_ARRAY_BUFFER, vbo);
  382.  
  383. // return 4;
  384. //}
  385.  
  386. //int SetBufferData(GLsizei num, GLuint vbo, std::vector<float> bufferdata, GLenum error)
  387. ////MEMORY STORAGE OF DATA
  388. //{
  389.  
  390. // //CHECK * sizeof(float) or size()
  391. // glBufferData(GL_ARRAY_BUFFER, bufferdata.size() * sizeof(float), bufferdata.data(), GL_STATIC_DRAW);
  392.  
  393. // glBindBuffer(GL_ARRAY_BUFFER, vbo);
  394.  
  395. // error = glGetError();
  396. // if (error == GL_NO_ERROR)
  397. // {
  398. // std::cout << "No Fucking Error! -> CODE CHECKING <-" << std::endl;
  399. // }
  400.  
  401. // if (error == GL_INVALID_VALUE)
  402. // {
  403. // std::cout << "NO FUCKING VALUE" << std::endl;
  404. // }
  405.  
  406. // if (error == GL_OUT_OF_MEMORY)
  407. // {
  408. // std::cout << "NO FUCKING MEMORY" << std::endl;
  409. // }
  410.  
  411. // if (error == GL_STACK_OVERFLOW)
  412. // {
  413. // std::cout << "NO FUCKING OVERFLOW" << std::endl;
  414. // }
  415.  
  416. // return 5;
  417. //}
  418.  
  419. //int SetVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized,
  420. // GLsizei stride, const GLvoid *pointer) {
  421. // //potential problem with pointer ->
  422. // glVertexAttribPointer(index, size, type, normalized, stride, &pointer);
  423. // glEnableVertexAttribArray(index);
  424.  
  425. // return 6;
  426. //}
  427.  
  428.  
  429. //int DrawArray(GLenum amode, GLint afirst, GLsizei acount, GLuint array)
  430. //{
  431. // glBindVertexArray(array);
  432. // glDrawArrays(amode, afirst, acount);
  433.  
  434.  
  435. // return 7;
  436. //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement