RenderModeAttrib::M_filled_flat

This commit is contained in:
David Rose 2008-08-05 17:49:35 +00:00
parent bdde0c3185
commit 6073c8dee9
8 changed files with 45 additions and 9 deletions

View File

@ -2002,6 +2002,7 @@ do_issue_render_mode() {
switch (mode) {
case RenderModeAttrib::M_unchanged:
case RenderModeAttrib::M_filled:
case RenderModeAttrib::M_filled_flat:
_d3d_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
break;

View File

@ -3257,6 +3257,7 @@ do_issue_render_mode() {
switch (mode) {
case RenderModeAttrib::M_unchanged:
case RenderModeAttrib::M_filled:
case RenderModeAttrib::M_filled_flat:
set_render_state(D3DRS_FILLMODE, D3DFILL_SOLID);
break;

View File

@ -3782,6 +3782,7 @@ do_issue_render_mode() {
switch (_render_mode) {
case RenderModeAttrib::M_unchanged:
case RenderModeAttrib::M_filled:
case RenderModeAttrib::M_filled_flat:
GLP(PolygonMode)(GL_FRONT_AND_BACK, GL_FILL);
break;

View File

@ -258,10 +258,10 @@ munge_points_to_quads(const CullTraverser *traverser, bool force) {
point_size = render_mode->get_thickness();
perspective = render_mode->get_perspective();
if (render_mode->get_mode() != RenderModeAttrib::M_filled) {
// Be sure to turn on polygon render mode, since we're actually
// rendering polygons, not points any more.
_state = _state->add_attrib(RenderModeAttrib::make(RenderModeAttrib::M_filled));
if (render_mode->get_mode() != RenderModeAttrib::M_filled_flat) {
// Render the new polygons with M_filled_flat, for a slight
// performance advantage when software rendering.
_state = _state->add_attrib(RenderModeAttrib::make(RenderModeAttrib::M_filled_flat));
}
}

View File

@ -61,11 +61,11 @@ output(ostream &out) const {
out << get_type() << ":";
switch (get_mode()) {
case M_unchanged:
out << "unchanged(" << get_thickness() << ")";
out << "unchanged";
break;
case M_filled:
out << "filled(" << get_thickness() << ")";
out << "filled";
break;
case M_wireframe:
@ -75,6 +75,10 @@ output(ostream &out) const {
case M_point:
out << "point(" << get_thickness() << ")";
break;
case M_filled_flat:
out << "filled_flat";
break;
}
if (get_perspective()) {

View File

@ -30,9 +30,21 @@ class EXPCL_PANDA_PGRAPH RenderModeAttrib : public RenderAttrib {
PUBLISHED:
enum Mode {
M_unchanged,
// Normal, filled polygons.
M_filled,
// Wireframe polygons, possibly with thickness.
M_wireframe,
M_point
// Points at vertices only, possibly with thickness and/or
// perspective sizing.
M_point,
// Filled polygons, without any particular emphasis on perspective
// correctness (a particularly useful designation for software
// rendering sprites).
M_filled_flat
};
private:

View File

@ -103,6 +103,12 @@ reset() {
_alpha_scale_via_texture = false;
_runtime_color_scale = true;
_color_material_flags = 0;
_texturing_state = 0;
_texfilter_state = 0;
_texture_replace = false;
_filled_flat = false;
// Now that the GSG has been initialized, make it available for
// optimizations.
add_gsg(this);
@ -800,9 +806,11 @@ begin_draw_primitives(const GeomPipelineReader *geom_reader,
int texfilter_state = 0; // tnearest
if (texturing_state > 0) {
texfilter_state = _texfilter_state;
if (_c->matrix_model_projection_no_w_transform) {
if (_c->matrix_model_projection_no_w_transform ||
_filled_flat) {
// Don't bother with the perspective-correct algorithm if we're
// under an orthonormal lens, e.g. render2d.
// under an orthonormal lens, e.g. render2d; or if
// RenderMode::M_filled_flat is in effect.
texturing_state = 1; // textured (not perspective correct)
}
@ -1602,6 +1610,8 @@ void TinyGraphicsStateGuardian::
do_issue_render_mode() {
const RenderModeAttrib *attrib = _target._render_mode;
_filled_flat = false;
switch (attrib->get_mode()) {
case RenderModeAttrib::M_unchanged:
case RenderModeAttrib::M_filled:
@ -1609,6 +1619,12 @@ do_issue_render_mode() {
_c->draw_triangle_back = gl_draw_triangle_fill;
break;
case RenderModeAttrib::M_filled_flat:
_c->draw_triangle_front = gl_draw_triangle_fill;
_c->draw_triangle_back = gl_draw_triangle_fill;
_filled_flat = true;
break;
case RenderModeAttrib::M_wireframe:
_c->draw_triangle_front = gl_draw_triangle_line;
_c->draw_triangle_back = gl_draw_triangle_line;

View File

@ -139,6 +139,7 @@ private:
int _texturing_state;
int _texfilter_state;
bool _texture_replace;
bool _filled_flat;
SimpleLru _textures_lru;