X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fvertexarray.cpp;h=c0ca8dca80f22b96f1efdfe8f9de6ccd9dc04ffd;hb=6a135773515b020ea3f163a11d06150ae5c0e69f;hp=6da0f9c0d44812ad6294d769200af558d5532bf0;hpb=a4ec5410595ddf37bfbc0e85ad87d31a9cbf94f1;p=libs%2Fgl.git diff --git a/source/vertexarray.cpp b/source/vertexarray.cpp index 6da0f9c0..c0ca8dca 100644 --- a/source/vertexarray.cpp +++ b/source/vertexarray.cpp @@ -48,6 +48,11 @@ void VertexArray::use_vertex_buffer(VertexBuffer *b) update_data(); } +void VertexArray::reserve(unsigned n) +{ + data.reserve(n*stride); +} + void VertexArray::clear() { data.clear(); @@ -64,7 +69,7 @@ void VertexArray::reset(VertexFormat f) RefPtr VertexArray::modify() { - return new VertexArrayBuilder(*this, data); + return new VertexArrayBuilder(*this); } void VertexArray::apply() const @@ -78,29 +83,30 @@ void VertexArray::apply() const const float *base=vbuf?0:&data[0]; uint offset=0; uint found=0; + uint bpv=stride*sizeof(float); for(uint fmt=format; fmt; fmt>>=4) { - uint size=(fmt&3)+1; + uint sz=(fmt&3)+1; switch(fmt&12) { case 0: - glVertexPointer(size, GL_FLOAT, stride, base+offset); + glVertexPointer(sz, GL_FLOAT, bpv, base+offset); break; case 4: - glNormalPointer(GL_FLOAT, stride, base+offset); + glNormalPointer(GL_FLOAT, bpv, base+offset); break; case 8: - glTexCoordPointer(size, GL_FLOAT, stride, base+offset); + glTexCoordPointer(sz, GL_FLOAT, bpv, base+offset); break; case 12: - if(size==1) - glColorPointer(4, GL_UNSIGNED_BYTE, stride, base+offset); + if(sz==1) + glColorPointer(4, GL_UNSIGNED_BYTE, bpv, base+offset); else - glColorPointer(size, GL_FLOAT, stride, base+offset); + glColorPointer(sz, GL_FLOAT, bpv, base+offset); break; } found|=1<<((fmt&12)>>2); - offset+=size; + offset+=sz; } set_array(GL_VERTEX_ARRAY, found&1, 1); @@ -138,7 +144,7 @@ unsigned VertexArray::enabled_arrays=0; VertexArray::Loader::Loader(VertexArray &a): - VertexArrayBuilder(a, a.data) + VertexArrayBuilder(a) { add("vertex2", static_cast(&Loader::vertex)); add("vertex3", static_cast(&Loader::vertex));