mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
lines can have texcoords and normals too
This commit is contained in:
parent
1f9da3bf52
commit
922bbcee4b
@ -530,6 +530,8 @@ draw_line(GeomLine *geom, GeomContext *) {
|
|||||||
|
|
||||||
int nprims = geom->get_num_prims();
|
int nprims = geom->get_num_prims();
|
||||||
Geom::VertexIterator vi = geom->make_vertex_iterator();
|
Geom::VertexIterator vi = geom->make_vertex_iterator();
|
||||||
|
Geom::NormalIterator ni = geom->make_normal_iterator();
|
||||||
|
Geom::TexCoordIterator ti = geom->make_texcoord_iterator();
|
||||||
Geom::ColorIterator ci = geom->make_color_iterator();
|
Geom::ColorIterator ci = geom->make_color_iterator();
|
||||||
|
|
||||||
GeomIssuer::IssueColor *issue_color;
|
GeomIssuer::IssueColor *issue_color;
|
||||||
@ -546,7 +548,10 @@ draw_line(GeomLine *geom, GeomContext *) {
|
|||||||
issue_texcoord_gl,
|
issue_texcoord_gl,
|
||||||
issue_color);
|
issue_color);
|
||||||
|
|
||||||
if (geom->get_binding(G_COLOR) == G_PER_VERTEX) {
|
// If we have per-vertex colors or normals, we need smooth shading.
|
||||||
|
// Otherwise we want flat shading for performance reasons.
|
||||||
|
if ((geom->get_binding(G_COLOR) == G_PER_VERTEX && wants_colors()) ||
|
||||||
|
(geom->get_binding(G_NORMAL) == G_PER_VERTEX && wants_normals())) {
|
||||||
call_glShadeModel(GL_SMOOTH);
|
call_glShadeModel(GL_SMOOTH);
|
||||||
} else {
|
} else {
|
||||||
call_glShadeModel(GL_FLAT);
|
call_glShadeModel(GL_FLAT);
|
||||||
@ -554,16 +559,20 @@ draw_line(GeomLine *geom, GeomContext *) {
|
|||||||
|
|
||||||
// Draw overall
|
// Draw overall
|
||||||
issuer.issue_color(G_OVERALL, ci);
|
issuer.issue_color(G_OVERALL, ci);
|
||||||
|
issuer.issue_normal(G_OVERALL, ni);
|
||||||
|
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
|
|
||||||
for (int i = 0; i < nprims; i++) {
|
for (int i = 0; i < nprims; i++) {
|
||||||
// Draw per primitive
|
// Draw per primitive
|
||||||
issuer.issue_color(G_PER_PRIM, ci);
|
issuer.issue_color(G_PER_PRIM, ci);
|
||||||
|
issuer.issue_normal(G_PER_PRIM, ni);
|
||||||
|
|
||||||
for (int j = 0; j < 2; j++) {
|
for (int j = 0; j < 2; j++) {
|
||||||
// Draw per vertex
|
// Draw per vertex
|
||||||
issuer.issue_color(G_PER_VERTEX, ci);
|
issuer.issue_color(G_PER_VERTEX, ci);
|
||||||
|
issuer.issue_normal(G_PER_VERTEX, ni);
|
||||||
|
issuer.issue_texcoord(G_PER_VERTEX, ti);
|
||||||
issuer.issue_vertex(G_PER_VERTEX, vi);
|
issuer.issue_vertex(G_PER_VERTEX, vi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -598,6 +607,8 @@ draw_linestrip(GeomLinestrip *geom, GeomContext *) {
|
|||||||
int nprims = geom->get_num_prims();
|
int nprims = geom->get_num_prims();
|
||||||
const int *plen = geom->get_lengths();
|
const int *plen = geom->get_lengths();
|
||||||
Geom::VertexIterator vi = geom->make_vertex_iterator();
|
Geom::VertexIterator vi = geom->make_vertex_iterator();
|
||||||
|
Geom::NormalIterator ni = geom->make_normal_iterator();
|
||||||
|
Geom::TexCoordIterator ti = geom->make_texcoord_iterator();
|
||||||
Geom::ColorIterator ci = geom->make_color_iterator();
|
Geom::ColorIterator ci = geom->make_color_iterator();
|
||||||
|
|
||||||
GeomIssuer::IssueColor *issue_color;
|
GeomIssuer::IssueColor *issue_color;
|
||||||
@ -614,7 +625,10 @@ draw_linestrip(GeomLinestrip *geom, GeomContext *) {
|
|||||||
issue_texcoord_gl,
|
issue_texcoord_gl,
|
||||||
issue_color);
|
issue_color);
|
||||||
|
|
||||||
if (geom->get_binding(G_COLOR) == G_PER_VERTEX) {
|
// If we have per-vertex colors or normals, we need smooth shading.
|
||||||
|
// Otherwise we want flat shading for performance reasons.
|
||||||
|
if ((geom->get_binding(G_COLOR) == G_PER_VERTEX && wants_colors()) ||
|
||||||
|
(geom->get_binding(G_NORMAL) == G_PER_VERTEX && wants_normals())) {
|
||||||
call_glShadeModel(GL_SMOOTH);
|
call_glShadeModel(GL_SMOOTH);
|
||||||
} else {
|
} else {
|
||||||
call_glShadeModel(GL_FLAT);
|
call_glShadeModel(GL_FLAT);
|
||||||
@ -622,10 +636,12 @@ draw_linestrip(GeomLinestrip *geom, GeomContext *) {
|
|||||||
|
|
||||||
// Draw overall
|
// Draw overall
|
||||||
issuer.issue_color(G_OVERALL, ci);
|
issuer.issue_color(G_OVERALL, ci);
|
||||||
|
issuer.issue_normal(G_OVERALL, ni);
|
||||||
|
|
||||||
for (int i = 0; i < nprims; i++) {
|
for (int i = 0; i < nprims; i++) {
|
||||||
// Draw per primitive
|
// Draw per primitive
|
||||||
issuer.issue_color(G_PER_PRIM, ci);
|
issuer.issue_color(G_PER_PRIM, ci);
|
||||||
|
issuer.issue_normal(G_PER_PRIM, ni);
|
||||||
|
|
||||||
int num_verts = *(plen++);
|
int num_verts = *(plen++);
|
||||||
nassertv(num_verts >= 2);
|
nassertv(num_verts >= 2);
|
||||||
@ -634,11 +650,14 @@ draw_linestrip(GeomLinestrip *geom, GeomContext *) {
|
|||||||
|
|
||||||
// Per-component attributes for the first line segment?
|
// Per-component attributes for the first line segment?
|
||||||
issuer.issue_color(G_PER_COMPONENT, ci);
|
issuer.issue_color(G_PER_COMPONENT, ci);
|
||||||
|
issuer.issue_normal(G_PER_COMPONENT, ni);
|
||||||
|
|
||||||
// Draw the first 2 vertices
|
// Draw the first 2 vertices
|
||||||
int v;
|
int v;
|
||||||
for (v = 0; v < 2; v++) {
|
for (v = 0; v < 2; v++) {
|
||||||
issuer.issue_color(G_PER_VERTEX, ci);
|
issuer.issue_color(G_PER_VERTEX, ci);
|
||||||
|
issuer.issue_normal(G_PER_VERTEX, ni);
|
||||||
|
issuer.issue_texcoord(G_PER_VERTEX, ti);
|
||||||
issuer.issue_vertex(G_PER_VERTEX, vi);
|
issuer.issue_vertex(G_PER_VERTEX, vi);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -647,9 +666,12 @@ draw_linestrip(GeomLinestrip *geom, GeomContext *) {
|
|||||||
for (v = 2; v < num_verts; v++) {
|
for (v = 2; v < num_verts; v++) {
|
||||||
// Per-component attributes?
|
// Per-component attributes?
|
||||||
issuer.issue_color(G_PER_COMPONENT, ci);
|
issuer.issue_color(G_PER_COMPONENT, ci);
|
||||||
|
issuer.issue_normal(G_PER_COMPONENT, ni);
|
||||||
|
|
||||||
// Per-vertex attributes
|
// Per-vertex attributes
|
||||||
issuer.issue_color(G_PER_VERTEX, ci);
|
issuer.issue_color(G_PER_VERTEX, ci);
|
||||||
|
issuer.issue_normal(G_PER_VERTEX, ni);
|
||||||
|
issuer.issue_texcoord(G_PER_VERTEX, ti);
|
||||||
issuer.issue_vertex(G_PER_VERTEX, vi);
|
issuer.issue_vertex(G_PER_VERTEX, vi);
|
||||||
}
|
}
|
||||||
glEnd();
|
glEnd();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user