Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. //
  2. // Lol Engine
  3. //
  4. // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the Do What The Fuck You Want To
  7. // Public License, Version 2, as published by Sam Hocevar. See
  8. // http://www.wtfpl.net/ for more details.
  9. //
  10. #if defined HAVE_CONFIG_H
  11. # include "config.h"
  12. #endif
  13. #if defined _XBOX
  14. # include <xtl.h>
  15. # undef near /* Fuck Microsoft */
  16. # undef far /* Fuck Microsoft again */
  17. #elif defined _WIN32
  18. # if defined USE_D3D9
  19. # include <d3d9.h>
  20. # endif
  21. # define WIN32_LEAN_AND_MEAN
  22. # include <windows.h>
  23. # undef near /* Fuck Microsoft */
  24. # undef far /* Fuck Microsoft again */
  25. #endif
  26. #include "core.h"
  27. #include "lolgl.h"
  28. using namespace std;
  29. namespace lol
  30. {
  31. class VideoData
  32. {
  33. friend class Video;
  34. private:
  35. static DebugRenderMode render_mode;
  36. };
  37. DebugRenderMode VideoData::render_mode = DebugRenderMode::Default;
  38. /*
  39. * Public Video class
  40. */
  41. void Video::Setup(ivec2 size)
  42. {
  43. g_renderer = new Renderer(size);
  44. g_scene = new Scene(size);
  45. /* Initialise reasonable scene default properties */
  46. SetDebugRenderMode(DebugRenderMode::Default);
  47. }
  48. void Video::SetDebugRenderMode(DebugRenderMode d)
  49. {
  50. switch(d)
  51. {
  52. //All these modes are handled in the shaders.
  53. case DebugRenderMode::Default:
  54. case DebugRenderMode::Lighting:
  55. case DebugRenderMode::Normal:
  56. case DebugRenderMode::UV:
  57. {
  58. #if defined USE_D3D9 || defined _XBOX
  59. #elif defined HAVE_GLES_2X
  60. // glEnable(GL_CULL_FACE);
  61. #else
  62. // if (VideoData::render_mode == d && glIsEnabled(GL_CULL_FACE) == GL_TRUE)
  63. // SetFaceCulling(false);
  64. // else
  65. // SetFaceCulling(true);
  66. // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  67. #endif
  68. break;
  69. }
  70. case DebugRenderMode::Wireframe:
  71. {
  72. if (VideoData::render_mode == d)
  73. {
  74. #if defined USE_D3D9 || defined _XBOX
  75. #else
  76. // SetFaceCulling(!VideoData::face_culling);
  77. #endif
  78. }
  79. else
  80. {
  81. #if defined USE_D3D9 || defined _XBOX
  82. #else
  83. // SetFaceCulling(false);
  84. #endif
  85. }
  86. #if defined USE_D3D9 || defined _XBOX
  87. #elif defined HAVE_GLES_2X
  88. #else
  89. // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  90. #endif
  91. break;
  92. }
  93. default:
  94. return; /* Unknown render mode */
  95. }
  96. VideoData::render_mode = d;
  97. }
  98. DebugRenderMode Video::GetDebugRenderMode()
  99. {
  100. return VideoData::render_mode;
  101. }
  102. void Video::Destroy()
  103. {
  104. delete g_scene;
  105. g_scene = nullptr;
  106. delete g_renderer;
  107. g_renderer = nullptr;
  108. }
  109. void Video::Capture(uint32_t *buffer)
  110. {
  111. #if defined USE_D3D9 || defined _XBOX
  112. /* TODO */
  113. #else
  114. GLint v[4];
  115. # if defined __CELLOS_LV2__
  116. // FIXME: use psglCreateDeviceAuto && psglGetDeviceDimensions
  117. v[2] = 1920;
  118. v[3] = 1080;
  119. # else
  120. glGetIntegerv(GL_VIEWPORT, v);
  121. # endif
  122. int width = v[2], height = v[3];
  123. # if defined HAVE_GL_2X
  124. glPixelStorei(GL_PACK_ROW_LENGTH, 0);
  125. # endif
  126. glPixelStorei(GL_PACK_ALIGNMENT, 1);
  127. # if defined GL_BGRA
  128. glReadPixels(0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, buffer);
  129. # else
  130. glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
  131. # endif
  132. for (int j = 0; j < height / 2; j++)
  133. for (int i = 0; i < width; i++)
  134. {
  135. uint32_t tmp = buffer[j * width + i];
  136. buffer[j * width + i] = buffer[(height - j - 1) * width + i];
  137. buffer[(height - j - 1) * width + i] = tmp;
  138. }
  139. #endif
  140. }
  141. ivec2 Video::GetSize()
  142. {
  143. ibox2 viewport = g_renderer->GetViewport();
  144. return viewport.B - viewport.A;
  145. }
  146. } /* namespace lol */