Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //usage:
- struct Vertex
- {
- float position[3];
- float normal[3];
- float colour[4];
- float texCoord[2];
- };
- struct AttrData {
- const char* name;
- int dim;
- int byteoffset;
- int stride_bytes;
- GLenum gltype;
- OpenGLShaderProgram::Attribute juce_attr;
- };
- #define ATTR( Vert, Attr, String ) \
- { \
- String, \
- std::extent<Vert::Attr>::value, \
- offsetof(V, pos), \
- sizeof(V), \
- glconst4type< std::remove_extent<V::pos>::type >::value \
- }
- AttrData data[] = {
- ATTR_DATA( Vertex, position , "position" ),
- ATTR_DATA( Vertex, normal , "normal" ),
- ATTR_DATA( Vertex, colour , "sourceColour" ),
- ATTR_DATA( Vertex, texCoord , "texureCoordIn" )
- }
- struct Attr
- {
- const OpenGLContext& m_openGLContext;
- const OpenGLShaderProgram& m_shader;
- const AttrData m_data[];
- int N;
- Attr( OpenGLContext& context, OpenGLShaderProgram& shader, AttrData data[] )
- : m_openGLContext{context}, m_shader{shader}, m_data{data}
- {
- N = std::extent<data>::value;
- }
- void create() {
- for( int i=0; i<N; i++ )
- m_data[i].juce_attr = createAttribute( m_openGLContext, m_shader, m_data[i].name );
- }
- void setup()
- { ... }
- void disable()
- { ... }
- }
- Attr attrs(openGLContext, shader, data);
- attrs.create();
- attrs.setup();
- attrs.disable();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement