浏览代码

add gsg parameter to GeomIssuer

David Rose 24 年之前
父节点
当前提交
c99d77c5a3

+ 8 - 5
panda/src/glgsg/glGraphicsStateGuardian.cxx

@@ -91,21 +91,24 @@ PStatCollector GLGraphicsStateGuardian::_vertices_display_list_pcollector("Verti
 #endif
 
 static void
-issue_vertex_gl(const Geom *geom, Geom::VertexIterator &viterator) {
+issue_vertex_gl(const Geom *geom, Geom::VertexIterator &viterator, 
+                GraphicsStateGuardianBase *) {
   const Vertexf &vertex = geom->get_next_vertex(viterator);
   // glgsg_cat.debug() << "Issuing vertex " << vertex << "\n";
   glVertex3fv(vertex.get_data());
 }
 
 static void
-issue_normal_gl(const Geom *geom, Geom::NormalIterator &niterator) {
+issue_normal_gl(const Geom *geom, Geom::NormalIterator &niterator, 
+                GraphicsStateGuardianBase *) {
   const Normalf &normal = geom->get_next_normal(niterator);
   // glgsg_cat.debug() << "Issuing normal " << normal << "\n";
   glNormal3fv(normal.get_data());
 }
 
 static void
-issue_texcoord_gl(const Geom *geom, Geom::TexCoordIterator &tciterator) {
+issue_texcoord_gl(const Geom *geom, Geom::TexCoordIterator &tciterator, 
+                GraphicsStateGuardianBase *) {
   const TexCoordf &texcoord = geom->get_next_texcoord(tciterator);
   //  glgsg_cat.debug() << "Issuing texcoord " << texcoord << "\n";
   glTexCoord2fv(texcoord.get_data());
@@ -113,7 +116,7 @@ issue_texcoord_gl(const Geom *geom, Geom::TexCoordIterator &tciterator) {
 
 static void
 issue_color_gl(const Geom *geom, Geom::ColorIterator &citerator,
-               const GraphicsStateGuardianBase *) {
+               GraphicsStateGuardianBase *) {
   const Colorf &color = geom->get_next_color(citerator);
   //  glgsg_cat.debug() << "Issuing color " << color << "\n";
   glColor4fv(color.get_data());
@@ -121,7 +124,7 @@ issue_color_gl(const Geom *geom, Geom::ColorIterator &citerator,
 
 static void
 issue_transformed_color_gl(const Geom *geom, Geom::ColorIterator &citerator,
-                           const GraphicsStateGuardianBase *gsg) {
+                           GraphicsStateGuardianBase *gsg) {
   const GLGraphicsStateGuardian *glgsg = DCAST(GLGraphicsStateGuardian, gsg);
   const Colorf &color = geom->get_next_color(citerator);
   glgsg->issue_transformed_color(color);

+ 3 - 3
panda/src/gsgmisc/geomIssuer.I

@@ -27,7 +27,7 @@
 ////////////////////////////////////////////////////////////////////
 INLINE void GeomIssuer::
 issue_vertex(GeomBindType bind, Geom::VertexIterator &i) {
-  _vertex_command[bind](_geom, i);
+  _vertex_command[bind](_geom, i, _gsg);
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -40,7 +40,7 @@ issue_vertex(GeomBindType bind, Geom::VertexIterator &i) {
 ////////////////////////////////////////////////////////////////////
 INLINE void GeomIssuer::
 issue_normal(GeomBindType bind, Geom::NormalIterator &i) {
-  _normal_command[bind](_geom, i);
+  _normal_command[bind](_geom, i, _gsg);
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -53,7 +53,7 @@ issue_normal(GeomBindType bind, Geom::NormalIterator &i) {
 ////////////////////////////////////////////////////////////////////
 INLINE void GeomIssuer::
 issue_texcoord(GeomBindType bind, Geom::TexCoordIterator &i) {
-  _texcoord_command[bind](_geom, i);
+  _texcoord_command[bind](_geom, i, _gsg);
 }
 
 ////////////////////////////////////////////////////////////////////

+ 9 - 5
panda/src/gsgmisc/geomIssuer.cxx

@@ -21,19 +21,23 @@
 #include <graphicsStateGuardianBase.h>
 
 static void
-issue_vertex_noop(const Geom *, Geom::VertexIterator &) {
+issue_vertex_noop(const Geom *, Geom::VertexIterator &,
+                  GraphicsStateGuardianBase *) {
 }
 
 static void
-issue_normal_noop(const Geom *, Geom::NormalIterator &) {
+issue_normal_noop(const Geom *, Geom::NormalIterator &,
+                  GraphicsStateGuardianBase *) {
 }
 
 static void
-issue_texcoord_noop(const Geom *, Geom::TexCoordIterator &) {
+issue_texcoord_noop(const Geom *, Geom::TexCoordIterator &,
+                  GraphicsStateGuardianBase *) {
 }
 
 static void
-issue_color_noop(const Geom *, Geom::ColorIterator &, const GraphicsStateGuardianBase *) {
+issue_color_noop(const Geom *, Geom::ColorIterator &, 
+                 GraphicsStateGuardianBase *) {
 }
 
 static GeomIssuer noop_issuer;
@@ -73,7 +77,7 @@ GeomIssuer() {
 ////////////////////////////////////////////////////////////////////
 GeomIssuer::
 GeomIssuer(const Geom *geom,
-           const GraphicsStateGuardianBase *gsg,
+           GraphicsStateGuardianBase *gsg,
            IssueVertex *vertex,
            IssueNormal *normal,
            IssueTexCoord *texcoord,

+ 6 - 6
panda/src/gsgmisc/geomIssuer.h

@@ -51,14 +51,14 @@ public:
   // when given a Geom and an associated iterator, will issue the
   // vertex (or whatever) referenced by the iterator to the rendering
   // backend, and increment the iterator.
-  typedef void IssueVertex(const Geom *, Geom::VertexIterator &);
-  typedef void IssueNormal(const Geom *, Geom::NormalIterator &);
-  typedef void IssueTexCoord(const Geom *, Geom::TexCoordIterator &);
-  typedef void IssueColor(const Geom *, Geom::ColorIterator &, const GraphicsStateGuardianBase *gsg);
+  typedef void IssueVertex(const Geom *, Geom::VertexIterator &, GraphicsStateGuardianBase *gsg);
+  typedef void IssueNormal(const Geom *, Geom::NormalIterator &, GraphicsStateGuardianBase *gsg);
+  typedef void IssueTexCoord(const Geom *, Geom::TexCoordIterator &, GraphicsStateGuardianBase *gsg);
+  typedef void IssueColor(const Geom *, Geom::ColorIterator &, GraphicsStateGuardianBase *gsg);
 
   GeomIssuer();
   GeomIssuer(const Geom *geom,
-             const GraphicsStateGuardianBase *gsg,
+             GraphicsStateGuardianBase *gsg,
              IssueVertex *vertex,
              IssueNormal *normal,
              IssueTexCoord *texcoord,
@@ -75,7 +75,7 @@ public:
 
 protected:
   const Geom *_geom;
-  const GraphicsStateGuardianBase *_gsg;
+  GraphicsStateGuardianBase *_gsg;
   IssueVertex *_vertex_command[num_GeomBindTypes];
   IssueNormal *_normal_command[num_GeomBindTypes];
   IssueTexCoord *_texcoord_command[num_GeomBindTypes];