Guest User

Untitled

a guest
Apr 25th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.56 KB | None | 0 0
  1. #include "OpenGL.h"
  2.  
  3. #ifdef EX5_20
  4.  
  5. GLuint program;
  6. GLuint buffer;
  7.  
  8. int getWindowWidth()
  9. {
  10. return 800;
  11. }
  12.  
  13. int getWindowHeight()
  14. {
  15. return 600;
  16. }
  17.  
  18. void onAwake()
  19. {
  20. static const char * vs_source[] =
  21. {
  22. "#version 430 core \n"
  23. " \n"
  24. "layout (binding = 0) uniform area_block \n"
  25. "{ \n"
  26. " uint counter_value; \n"
  27. "}; \n"
  28. " \n"
  29. "out vec4 color; \n"
  30. " \n"
  31. "uniform float max_area; \n"
  32. " \n"
  33. "void main(void) \n"
  34. "{ \n"
  35. " float brightness = clamp(float(counter_value) / max_area, \n"
  36. " 0.0, 1.0); \n"
  37. " color = vec4(brightness, brightness, brightness, 1.0); \n"
  38. "} \n"
  39. };
  40.  
  41. static const char * fs_source[] =
  42. {
  43. "#version 430 core \n"
  44. " \n"
  45. "layout (binding = 0, offset = 0) uniform atomic_uint area; \n"
  46. " \n"
  47. "void main(void) \n"
  48. "{ \n"
  49. " atomicCounterIncrement(area); \n"
  50. "} \n"
  51. };
  52.  
  53. program = glCreateProgram();
  54. GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
  55. glShaderSource(fs, 1, fs_source, NULL);
  56. glCompileShader(fs);
  57.  
  58. GLuint vs = glCreateShader(GL_VERTEX_SHADER);
  59. glShaderSource(vs, 1, vs_source, NULL);
  60. glCompileShader(vs);
  61.  
  62. CheckShaderCompileError(fs);
  63. CheckShaderCompileError(vs);
  64.  
  65. glAttachShader(program, vs);
  66. glAttachShader(program, fs);
  67.  
  68. glLinkProgram(program);
  69.  
  70. glGenBuffers(1, &buffer);
  71.  
  72. glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
  73. glBufferData(GL_ATOMIC_COUNTER_BUFFER, 16 * sizeof(GLuint), NULL, GL_DYNAMIC_COPY);
  74.  
  75. glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, 3, buffer);
  76.  
  77. const GLuint zero = 0;
  78. glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
  79.  
  80. // ��� 1 - glBufferSubData�� ����Ͽ� ����� ī���͸� �����Ѵ�.
  81. glBufferSubData(GL_ATOMIC_COUNTER_BUFFER, 2 * sizeof(GLuint), sizeof(GLuint), &zero);
  82.  
  83. // ��� 2 - ���۸� �����Ͽ� ���� ���� ����
  84. //GLuint *data = (GLuint *)glMapBufferRange(GL_ATOMIC_COUNTER_BUFFER, 0, 16 * sizeof(GLuint), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT);
  85. //data[2] = 0;
  86. //glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER);
  87.  
  88. //// ��� 3 - glCelarBufferSubData�� ����Ѵ�.
  89. //glClearBufferSubData(GL_ATOMIC_COUNTER_BUFFER,
  90. // GL_R32UI,
  91. // 2 * sizeof(GLuint),
  92. // sizeof(GLuint),
  93. // GL_RED_INTEGER, GL_UNSIGNED_INT, &zero);
  94. }
  95.  
  96.  
  97.  
  98. void onUpdate(double current_time)
  99. {
  100. }
  101.  
  102. void onShutdown()
  103. {
  104. glDeleteProgram(program);
  105. glDeleteBuffers(1, &buffer);
  106. }
  107.  
  108. #endif
Add Comment
Please, Sign In to add comment