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.

116 lines
3.9 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. #include "FullScreenQuad.h"
  2. void FullScreenQuad::Init()
  3. {
  4. glGenBuffers(1, &mVBO);
  5. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  6. glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 20, nullptr, GL_STATIC_DRAW);
  7. glBindBuffer(GL_ARRAY_BUFFER, 0);
  8. }
  9. void FullScreenQuad::Draw(GLint posLoc, GLint texcoordLoc)
  10. {
  11. //draw fullscreen
  12. float vertices[] = {
  13. -0.5f,-0.5f,-1.0f,0.0f,0.0f,
  14. 0.5f,-0.5f,-1.0f,1.0f,0.0f,
  15. 0.5f,0.5f,-1.0f,1.0f,1.0f,
  16. -0.5f,0.5f,-1.0f,0.0f,1.0f
  17. };
  18. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  19. glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 20, vertices, GL_STATIC_DRAW);
  20. glBindBuffer(GL_ARRAY_BUFFER, 0);
  21. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  22. glEnableVertexAttribArray(posLoc);
  23. glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0);
  24. glEnableVertexAttribArray(texcoordLoc);
  25. glVertexAttribPointer(texcoordLoc, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)(sizeof(float) * 3));
  26. glDrawArrays(GL_QUADS, 0, 4);
  27. glBindBuffer(GL_ARRAY_BUFFER, 0);
  28. }
  29. void FullScreenQuad::DrawToLeftTop(GLint posLoc, GLint texcoordLoc)
  30. {
  31. //draw to left top qualter of screen
  32. float vertices[] = {
  33. -0.5f,0.0f,-1.0f,0.0f,0.0f,
  34. 0.0f,0.0f,-1.0f,1.0f,0.0f,
  35. 0.0f,0.5f,-1.0f,1.0f,1.0f,
  36. -0.5f,0.5f,-1.0f,0.0f,1.0f
  37. };
  38. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  39. glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 20, vertices, GL_STATIC_DRAW);
  40. glBindBuffer(GL_ARRAY_BUFFER, 0);
  41. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  42. glEnableVertexAttribArray(posLoc);
  43. glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0);
  44. glEnableVertexAttribArray(texcoordLoc);
  45. glVertexAttribPointer(texcoordLoc, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)(sizeof(float) * 3));
  46. glDrawArrays(GL_QUADS, 0, 4);
  47. glBindBuffer(GL_ARRAY_BUFFER, 0);
  48. }
  49. void FullScreenQuad::DrawToLeftBottom(GLint posLoc, GLint texcoordLoc)
  50. {
  51. float vertices[] = {
  52. -0.5f,-0.5f,-1.0f,0.0f,0.0f,
  53. 0.0f,-0.5f,-1.0f,1.0f,0.0f,
  54. 0.0f,0.0f,-1.0f,1.0f,1.0f,
  55. -0.5f,0.0f,-1.0f,0.0f,1.0f
  56. };
  57. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  58. glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 20, vertices, GL_STATIC_DRAW);
  59. glBindBuffer(GL_ARRAY_BUFFER, 0);
  60. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  61. glEnableVertexAttribArray(posLoc);
  62. glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0);
  63. glEnableVertexAttribArray(texcoordLoc);
  64. glVertexAttribPointer(texcoordLoc, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)(sizeof(float) * 3));
  65. glDrawArrays(GL_QUADS, 0, 4);
  66. glBindBuffer(GL_ARRAY_BUFFER, 0);
  67. }
  68. void FullScreenQuad::DrawToRightTop(GLint posLoc, GLint texcoordLoc)
  69. {
  70. float vertices[] = {
  71. 0.0f,-0.0f,-1.0f,0.0f,0.0f,
  72. 0.5f,-0.0f,-1.0f,1.0f,0.0f,
  73. 0.5f,0.5f,-1.0f,1.0f,1.0f,
  74. 0.0f,0.5f,-1.0f,0.0f,1.0f
  75. };
  76. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  77. glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 20, vertices, GL_STATIC_DRAW);
  78. glBindBuffer(GL_ARRAY_BUFFER, 0);
  79. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  80. glEnableVertexAttribArray(posLoc);
  81. glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0);
  82. glEnableVertexAttribArray(texcoordLoc);
  83. glVertexAttribPointer(texcoordLoc, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)(sizeof(float) * 3));
  84. glDrawArrays(GL_QUADS, 0, 4);
  85. glBindBuffer(GL_ARRAY_BUFFER, 0);
  86. }
  87. void FullScreenQuad::DrawToRightBottom(GLint posLoc, GLint texcoordLoc)
  88. {
  89. float vertices[] = {
  90. 0.0f,-0.5f,-1.0f,0.0f,0.0f,
  91. 0.5f,-0.5f,-1.0f,1.0f,0.0f,
  92. 0.5f,0.0f,-1.0f,1.0f,1.0f,
  93. 0.0f,0.0f,-1.0f,0.0f,1.0f
  94. };
  95. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  96. glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 20, vertices, GL_STATIC_DRAW);
  97. glBindBuffer(GL_ARRAY_BUFFER, 0);
  98. glBindBuffer(GL_ARRAY_BUFFER, mVBO);
  99. glEnableVertexAttribArray(posLoc);
  100. glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0);
  101. glEnableVertexAttribArray(texcoordLoc);
  102. glVertexAttribPointer(texcoordLoc, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)(sizeof(float) * 3));
  103. glDrawArrays(GL_QUADS, 0, 4);
  104. glBindBuffer(GL_ARRAY_BUFFER, 0);
  105. }