Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. //usage:
  2. struct Vertex
  3. {
  4. float position[3];
  5. float normal[3];
  6. float colour[4];
  7. float texCoord[2];
  8. };
  9.  
  10. struct AttrData {
  11. const char* name;
  12. int dim;
  13. int byteoffset;
  14. int stride_bytes;
  15. GLenum gltype;
  16. OpenGLShaderProgram::Attribute juce_attr;
  17. };
  18.  
  19. #define ATTR( Vert, Attr, String ) \
  20. { \
  21. String, \
  22. std::extent<Vert::Attr>::value, \
  23. offsetof(V, pos), \
  24. sizeof(V), \
  25. glconst4type< std::remove_extent<V::pos>::type >::value \
  26. }
  27.  
  28. AttrData data[] = {
  29. ATTR_DATA( Vertex, position , "position" ),
  30. ATTR_DATA( Vertex, normal , "normal" ),
  31. ATTR_DATA( Vertex, colour , "sourceColour" ),
  32. ATTR_DATA( Vertex, texCoord , "texureCoordIn" )
  33. }
  34.  
  35. struct Attr
  36. {
  37. const OpenGLContext& m_openGLContext;
  38. const OpenGLShaderProgram& m_shader;
  39. const AttrData m_data[];
  40. int N;
  41.  
  42. Attr( OpenGLContext& context, OpenGLShaderProgram& shader, AttrData data[] )
  43. : m_openGLContext{context}, m_shader{shader}, m_data{data}
  44. {
  45. N = std::extent<data>::value;
  46. }
  47.  
  48. void create() {
  49. for( int i=0; i<N; i++ )
  50. m_data[i].juce_attr = createAttribute( m_openGLContext, m_shader, m_data[i].name );
  51. }
  52.  
  53. void setup()
  54. { ... }
  55.  
  56. void disable()
  57. { ... }
  58. }
  59.  
  60. Attr attrs(openGLContext, shader, data);
  61.  
  62. attrs.create();
  63. attrs.setup();
  64. attrs.disable();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement