14 #ifndef OSG_TRIANGLEFUNCTOR
15 #define OSG_TRIANGLEFUNCTOR 1
17 #include <osg/PrimitiveSet>
57 notify(
WARN)<<
"Triangle Functor does not support Vec2* vertex arrays"<<std::endl;
68 notify(
WARN)<<
"Triangle Functor does not support Vec4* vertex arrays"<<std::endl;
73 notify(
WARN)<<
"Triangle Functor does not support Vec2d* vertex arrays"<<std::endl;
78 notify(
WARN)<<
"Triangle Functor does not support Vec3d* vertex arrays"<<std::endl;
83 notify(
WARN)<<
"Triangle Functor does not support Vec4d* vertex arrays"<<std::endl;
86 virtual void drawArrays(GLenum mode,GLint first,GLsizei count)
99 case(GL_TRIANGLE_STRIP):
102 for(GLsizei i=2;i<count;++i,++vptr)
112 for(GLsizei i=3;i<count;i+=4,vptr+=4)
122 for(GLsizei i=3;i<count;i+=2,vptr+=2)
130 case(GL_TRIANGLE_FAN):
133 const Vec3* vptr = vfirst+1;
134 for(GLsizei i=2;i<count;++i,++vptr)
150 virtual void drawElements(GLenum mode,GLsizei count,
const GLubyte* indices)
152 if (indices==0 || count==0)
return;
154 typedef const GLubyte* IndexPointer;
160 IndexPointer ilast = &indices[count];
161 for(IndexPointer iptr=indices;iptr<ilast;iptr+=3)
165 case(GL_TRIANGLE_STRIP):
167 IndexPointer iptr = indices;
168 for(GLsizei i=2;i<count;++i,++iptr)
177 IndexPointer iptr = indices;
178 for(GLsizei i=3;i<count;i+=4,iptr+=4)
187 IndexPointer iptr = indices;
188 for(GLsizei i=3;i<count;i+=2,iptr+=2)
196 case(GL_TRIANGLE_FAN):
198 IndexPointer iptr = indices;
201 for(GLsizei i=2;i<count;++i,++iptr)
217 virtual void drawElements(GLenum mode,GLsizei count,
const GLushort* indices)
219 if (indices==0 || count==0)
return;
221 typedef const GLushort* IndexPointer;
227 IndexPointer ilast = &indices[count];
228 for(IndexPointer iptr=indices;iptr<ilast;iptr+=3)
234 case(GL_TRIANGLE_STRIP):
236 IndexPointer iptr = indices;
237 for(GLsizei i=2;i<count;++i,++iptr)
246 IndexPointer iptr = indices;
247 for(GLsizei i=3;i<count;i+=4,iptr+=4)
256 IndexPointer iptr = indices;
257 for(GLsizei i=3;i<count;i+=2,iptr+=2)
265 case(GL_TRIANGLE_FAN):
267 IndexPointer iptr = indices;
270 for(GLsizei i=2;i<count;++i,++iptr)
286 virtual void drawElements(GLenum mode,GLsizei count,
const GLuint* indices)
288 if (indices==0 || count==0)
return;
290 typedef const GLuint* IndexPointer;
296 IndexPointer ilast = &indices[count];
297 for(IndexPointer iptr=indices;iptr<ilast;iptr+=3)
301 case(GL_TRIANGLE_STRIP):
303 IndexPointer iptr = indices;
304 for(GLsizei i=2;i<count;++i,++iptr)
313 IndexPointer iptr = indices;
314 for(GLsizei i=3;i<count;i+=4,iptr+=4)
323 IndexPointer iptr = indices;
324 for(GLsizei i=3;i<count;i+=2,iptr+=2)
332 case(GL_TRIANGLE_FAN):
334 IndexPointer iptr = indices;
337 for(GLsizei i=2;i<count;++i,++iptr)
bool _treatVertexDataAsTemporary
virtual void drawElements(GLenum mode, GLsizei count, const GLuint *indices)
Mimics the OpenGL glDrawElements() function.
virtual void drawArrays(GLenum mode, GLint first, GLsizei count)
Mimics the OpenGL glDrawArrays() function.
std::vector< Vec3 > _vertexCache
virtual ~TriangleFunctor()
virtual void vertex(const Vec4 &vert)
Mimics the OpenGL glVertex() "family of functions".
const Vec3 * _vertexArrayPtr
unsigned int _vertexArraySize
virtual void vertex(float x, float y)
Mimics the OpenGL glVertex() "family of functions".
void setTreatVertexDataAsTemporary(bool treatVertexDataAsTemporary)
virtual void begin(GLenum mode)
virtual void vertex(float x, float y, float z)
Mimics the OpenGL glVertex() "family of functions".
virtual void vertex(const Vec2 &vert)
Mimics the OpenGL glVertex() "family of functions".
bool getTreatVertexDataAsTemporary() const
virtual void vertex(float x, float y, float z, float w)
Mimics the OpenGL glVertex() "family of functions".
virtual void vertex(const Vec3 &vert)
Mimics the OpenGL glVertex() "family of functions".
virtual void end()
Mimics the OpenGL glEnd() function.
virtual void setVertexArray(unsigned int, const Vec2 *)
virtual void drawElements(GLenum mode, GLsizei count, const GLubyte *indices)
Mimics the OpenGL glDrawElements() function.
virtual void setVertexArray(unsigned int, const Vec4 *)
virtual void setVertexArray(unsigned int, const Vec3d *)
virtual void setVertexArray(unsigned int count, const Vec3 *vertices)
virtual void setVertexArray(unsigned int, const Vec2d *)
virtual void setVertexArray(unsigned int, const Vec4d *)
OSG_EXPORT std::ostream & notify(const NotifySeverity severity)
virtual void drawElements(GLenum mode, GLsizei count, const GLushort *indices)
Mimics the OpenGL glDrawElements() function.