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) { switch (mode) {
case RenderModeAttrib::M_unchanged: case RenderModeAttrib::M_unchanged:
case RenderModeAttrib::M_filled: case RenderModeAttrib::M_filled:
case RenderModeAttrib::M_filled_flat:
_d3d_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); _d3d_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
break; break;

View File

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

View File

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

View File

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

View File

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

View File

@ -30,9 +30,21 @@ class EXPCL_PANDA_PGRAPH RenderModeAttrib : public RenderAttrib {
PUBLISHED: PUBLISHED:
enum Mode { enum Mode {
M_unchanged, M_unchanged,
// Normal, filled polygons.
M_filled, M_filled,
// Wireframe polygons, possibly with thickness.
M_wireframe, 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: private:

View File

@ -103,6 +103,12 @@ reset() {
_alpha_scale_via_texture = false; _alpha_scale_via_texture = false;
_runtime_color_scale = true; _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 // Now that the GSG has been initialized, make it available for
// optimizations. // optimizations.
add_gsg(this); add_gsg(this);
@ -800,9 +806,11 @@ begin_draw_primitives(const GeomPipelineReader *geom_reader,
int texfilter_state = 0; // tnearest int texfilter_state = 0; // tnearest
if (texturing_state > 0) { if (texturing_state > 0) {
texfilter_state = _texfilter_state; 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 // 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) texturing_state = 1; // textured (not perspective correct)
} }
@ -1602,6 +1610,8 @@ void TinyGraphicsStateGuardian::
do_issue_render_mode() { do_issue_render_mode() {
const RenderModeAttrib *attrib = _target._render_mode; const RenderModeAttrib *attrib = _target._render_mode;
_filled_flat = false;
switch (attrib->get_mode()) { switch (attrib->get_mode()) {
case RenderModeAttrib::M_unchanged: case RenderModeAttrib::M_unchanged:
case RenderModeAttrib::M_filled: case RenderModeAttrib::M_filled:
@ -1609,6 +1619,12 @@ do_issue_render_mode() {
_c->draw_triangle_back = gl_draw_triangle_fill; _c->draw_triangle_back = gl_draw_triangle_fill;
break; 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: case RenderModeAttrib::M_wireframe:
_c->draw_triangle_front = gl_draw_triangle_line; _c->draw_triangle_front = gl_draw_triangle_line;
_c->draw_triangle_back = gl_draw_triangle_line; _c->draw_triangle_back = gl_draw_triangle_line;

View File

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