14 #ifndef OSG_TERMPLATEPRIMITIVEFUNCTOR
15 #define OSG_TERMPLATEPRIMITIVEFUNCTOR 1
17 #include <osg/PrimitiveSet>
60 notify(
WARN)<<
"Triangle Functor does not support Vec2* vertex arrays"<<std::endl;
71 notify(
WARN)<<
"Triangle Functor does not support Vec4* vertex arrays"<<std::endl;
76 notify(
WARN)<<
"Triangle Functor does not support Vec2d* vertex arrays"<<std::endl;
81 notify(
WARN)<<
"Triangle Functor does not support Vec3d* vertex arrays"<<std::endl;
86 notify(
WARN)<<
"Triangle Functor does not support Vec4d* vertex arrays"<<std::endl;
90 virtual void drawArrays(GLenum mode,GLint first,GLsizei count)
102 case(GL_TRIANGLE_STRIP): {
104 for(GLsizei i=2;i<count;++i,++vptr)
113 for(GLsizei i=3;i<count;i+=4,vptr+=4)
119 case(GL_QUAD_STRIP): {
121 for(GLsizei i=3;i<count;i+=2,vptr+=2)
128 case(GL_TRIANGLE_FAN): {
130 const Vec3* vptr = vfirst+1;
131 for(GLsizei i=2;i<count;++i,++vptr)
149 case(GL_LINE_STRIP): {
155 case(GL_LINE_LOOP): {
167 template<
class IndexType>
170 if (indices==0 || count==0)
return;
172 typedef const IndexType* IndexPointer;
176 case(GL_TRIANGLES): {
177 IndexPointer ilast = &indices[count];
178 for(IndexPointer iptr=indices;iptr<ilast;iptr+=3)
182 case(GL_TRIANGLE_STRIP): {
183 IndexPointer iptr = indices;
184 for(GLsizei i=2;i<count;++i,++iptr)
194 IndexPointer iptr = indices;
195 for(GLsizei i=3;i<count;i+=4,iptr+=4)
203 case(GL_QUAD_STRIP): {
204 IndexPointer iptr = indices;
205 for(GLsizei i=3;i<count;i+=2,iptr+=2)
214 case(GL_TRIANGLE_FAN): {
215 IndexPointer iptr = indices;
218 for(GLsizei i=2;i<count;++i,++iptr)
226 IndexPointer ilast = &indices[count];
227 for(IndexPointer iptr=indices;iptr<ilast;iptr+=1)
232 IndexPointer ilast = &indices[count-1];
233 for(IndexPointer iptr=indices;iptr<ilast;iptr+=2)
238 case(GL_LINE_STRIP): {
239 IndexPointer ilast = &indices[count-1];
240 for(IndexPointer iptr=indices;iptr<ilast;iptr+=1)
245 case(GL_LINE_LOOP): {
246 IndexPointer ilast = &indices[count-1];
247 for(IndexPointer iptr=indices;iptr<ilast;iptr+=1)
260 virtual void drawElements(GLenum mode,GLsizei count,
const GLubyte* indices)
265 virtual void drawElements(GLenum mode,GLsizei count,
const GLushort* indices)
270 virtual void drawElements(GLenum mode,GLsizei count,
const GLuint* indices)
bool _treatVertexDataAsTemporary
void drawElementsTemplate(GLenum mode, GLsizei count, const IndexType *indices)
const Vec3 * _vertexArrayPtr
std::vector< Vec3 > _vertexCache
virtual void drawArrays(GLenum mode, GLint first, GLsizei count)
Mimics the OpenGL glDrawArrays() function.
bool getTreatVertexDataAsTemporary() const
virtual void end()
Mimics the OpenGL glEnd() function.
virtual void setVertexArray(unsigned int, const Vec4d *)
unsigned int _vertexArraySize
virtual void setVertexArray(unsigned int, const Vec4 *)
virtual void vertex(float x, float y)
Mimics the OpenGL glVertex() "family of functions".
virtual void begin(GLenum mode)
virtual void setVertexArray(unsigned int, const Vec2d *)
virtual void setVertexArray(unsigned int count, const Vec3 *vertices)
virtual void drawElements(GLenum mode, GLsizei count, const GLuint *indices)
Mimics the OpenGL glDrawElements() function.
virtual void vertex(float x, float y, float z, float w)
Mimics the OpenGL glVertex() "family of functions".
void setTreatVertexDataAsTemporary(bool treatVertexDataAsTemporary)
virtual void drawElements(GLenum mode, GLsizei count, const GLubyte *indices)
Mimics the OpenGL glDrawElements() function.
virtual void vertex(const Vec4 &vert)
Mimics the OpenGL glVertex() "family of functions".
virtual void drawElements(GLenum mode, GLsizei count, const GLushort *indices)
Mimics the OpenGL glDrawElements() function.
OSG_EXPORT std::ostream & notify(const NotifySeverity severity)
virtual void vertex(const Vec2 &vert)
Mimics the OpenGL glVertex() "family of functions".
TemplatePrimitiveFunctor()
virtual ~TemplatePrimitiveFunctor()
virtual void vertex(float x, float y, float z)
Mimics the OpenGL glVertex() "family of functions".
virtual void setVertexArray(unsigned int, const Vec3d *)
virtual void vertex(const Vec3 &vert)
Mimics the OpenGL glVertex() "family of functions".
virtual void setVertexArray(unsigned int, const Vec2 *)