You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

134 rivejä
3.0 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright © 2010—2016 Sam Hocevar <sam@hocevar.net>
  5. //
  6. // Lol Engine is free software. It comes without any warranty, to
  7. // the extent permitted by applicable law. You can redistribute it
  8. // and/or modify it under the terms of the Do What the Fuck You Want
  9. // to Public License, Version 2, as published by the WTFPL Task Force.
  10. // See http://www.wtfpl.net/ for more details.
  11. //
  12. #include <lol/engine-internal.h>
  13. #if defined _WIN32
  14. # define WIN32_LEAN_AND_MEAN
  15. # include <windows.h>
  16. # undef WIN32_LEAN_AND_MEAN
  17. # undef near /* Fuck Microsoft */
  18. # undef far /* Fuck Microsoft again */
  19. #endif
  20. #include "lolgl.h"
  21. namespace lol
  22. {
  23. class VideoData
  24. {
  25. friend class Video;
  26. private:
  27. static DebugRenderMode render_mode;
  28. };
  29. DebugRenderMode VideoData::render_mode = DebugRenderMode::Default;
  30. /*
  31. * Public Video class
  32. */
  33. void Video::Setup(ivec2 size)
  34. {
  35. //g_renderer = new Renderer(size);
  36. Renderer::AddNew(size);
  37. Scene::AddNew(size);
  38. /* Initialise reasonable scene default properties */
  39. SetDebugRenderMode(DebugRenderMode::Default);
  40. }
  41. void Video::SetDebugRenderMode(DebugRenderMode d)
  42. {
  43. switch(d)
  44. {
  45. //All these modes are handled in the shaders.
  46. case DebugRenderMode::Default:
  47. case DebugRenderMode::Flat:
  48. case DebugRenderMode::Lighting:
  49. case DebugRenderMode::Normal:
  50. case DebugRenderMode::UV:
  51. {
  52. #if defined HAVE_GLES_2X
  53. #elif defined LOL_USE_GLEW || defined HAVE_GL_2X
  54. glEnable(GL_CULL_FACE);
  55. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  56. #endif
  57. break;
  58. }
  59. case DebugRenderMode::Wireframe:
  60. {
  61. #if defined HAVE_GLES_2X
  62. #elif defined LOL_USE_GLEW || defined HAVE_GL_2X
  63. glDisable(GL_CULL_FACE);
  64. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  65. #endif
  66. break;
  67. }
  68. default:
  69. return; /* Unknown render mode */
  70. }
  71. VideoData::render_mode = d;
  72. }
  73. DebugRenderMode Video::GetDebugRenderMode()
  74. {
  75. return VideoData::render_mode;
  76. }
  77. void Video::Destroy()
  78. {
  79. Scene::DestroyAll();
  80. Renderer::DestroyAll();
  81. //delete g_renderer;
  82. //g_renderer = nullptr;
  83. }
  84. void Video::Capture(uint32_t *buffer)
  85. {
  86. #if defined LOL_USE_GLEW || defined HAVE_GL_2X || defined HAVE_GLEX_2X
  87. GLint v[4];
  88. glGetIntegerv(GL_VIEWPORT, v);
  89. int width = v[2], height = v[3];
  90. # if defined HAVE_GL_2X
  91. glPixelStorei(GL_PACK_ROW_LENGTH, 0);
  92. # endif
  93. glPixelStorei(GL_PACK_ALIGNMENT, 1);
  94. # if defined GL_BGRA
  95. glReadPixels(0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, buffer);
  96. # else
  97. glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
  98. # endif
  99. for (int j = 0; j < height / 2; j++)
  100. for (int i = 0; i < width; i++)
  101. {
  102. uint32_t tmp = buffer[j * width + i];
  103. buffer[j * width + i] = buffer[(height - j - 1) * width + i];
  104. buffer[(height - j - 1) * width + i] = tmp;
  105. }
  106. #endif
  107. }
  108. ivec2 Video::GetSize()
  109. {
  110. return Renderer::Get()->GetViewport().extent();
  111. }
  112. } /* namespace lol */