Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

video.cpp 3.2 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. #include <lol/engine-internal.h>
  11. #if defined _XBOX
  12. # include <xtl.h>
  13. # undef near /* Fuck Microsoft */
  14. # undef far /* Fuck Microsoft again */
  15. #elif defined _WIN32
  16. # if defined USE_D3D9
  17. # include <d3d9.h>
  18. # endif
  19. # define WIN32_LEAN_AND_MEAN
  20. # include <windows.h>
  21. # undef near /* Fuck Microsoft */
  22. # undef far /* Fuck Microsoft again */
  23. #endif
  24. #include "lolgl.h"
  25. namespace lol
  26. {
  27. class VideoData
  28. {
  29. friend class Video;
  30. private:
  31. static DebugRenderMode render_mode;
  32. };
  33. DebugRenderMode VideoData::render_mode = DebugRenderMode::Default;
  34. /*
  35. * Public Video class
  36. */
  37. void Video::Setup(ivec2 size)
  38. {
  39. //g_renderer = new Renderer(size);
  40. Renderer::AddNew(size);
  41. Scene::AddNew(size);
  42. /* Initialise reasonable scene default properties */
  43. SetDebugRenderMode(DebugRenderMode::Default);
  44. }
  45. void Video::SetDebugRenderMode(DebugRenderMode d)
  46. {
  47. switch(d)
  48. {
  49. //All these modes are handled in the shaders.
  50. case DebugRenderMode::Default:
  51. case DebugRenderMode::Flat:
  52. case DebugRenderMode::Lighting:
  53. case DebugRenderMode::Normal:
  54. case DebugRenderMode::UV:
  55. {
  56. #if defined USE_D3D9 || defined _XBOX
  57. #elif defined HAVE_GLES_2X
  58. #elif defined USE_GLEW || defined HAVE_GL_2X
  59. glEnable(GL_CULL_FACE);
  60. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  61. #endif
  62. break;
  63. }
  64. case DebugRenderMode::Wireframe:
  65. {
  66. #if defined USE_D3D9 || defined _XBOX
  67. #elif defined HAVE_GLES_2X
  68. #elif defined USE_GLEW || defined HAVE_GL_2X
  69. glDisable(GL_CULL_FACE);
  70. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  71. #endif
  72. break;
  73. }
  74. default:
  75. return; /* Unknown render mode */
  76. }
  77. VideoData::render_mode = d;
  78. }
  79. DebugRenderMode Video::GetDebugRenderMode()
  80. {
  81. return VideoData::render_mode;
  82. }
  83. void Video::Destroy()
  84. {
  85. Scene::DestroyAll();
  86. Renderer::DestroyAll();
  87. //delete g_renderer;
  88. //g_renderer = nullptr;
  89. }
  90. void Video::Capture(uint32_t *buffer)
  91. {
  92. #if defined USE_D3D9 || defined _XBOX
  93. /* TODO */
  94. #elif defined USE_GLEW || defined HAVE_GL_2X || defined HAVE_GLEX_2X
  95. GLint v[4];
  96. glGetIntegerv(GL_VIEWPORT, v);
  97. int width = v[2], height = v[3];
  98. # if defined HAVE_GL_2X
  99. glPixelStorei(GL_PACK_ROW_LENGTH, 0);
  100. # endif
  101. glPixelStorei(GL_PACK_ALIGNMENT, 1);
  102. # if defined GL_BGRA
  103. glReadPixels(0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, buffer);
  104. # else
  105. glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
  106. # endif
  107. for (int j = 0; j < height / 2; j++)
  108. for (int i = 0; i < width; i++)
  109. {
  110. uint32_t tmp = buffer[j * width + i];
  111. buffer[j * width + i] = buffer[(height - j - 1) * width + i];
  112. buffer[(height - j - 1) * width + i] = tmp;
  113. }
  114. #endif
  115. }
  116. ivec2 Video::GetSize()
  117. {
  118. return Renderer::Get()->GetViewport().extent();
  119. }
  120. } /* namespace lol */