mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
*** empty log message ***
This commit is contained in:
parent
6e16fab296
commit
df27e383f1
@ -31,6 +31,10 @@ bool gl_cull_traversal = config_glgsg.GetBool("gl-cull-traversal", true);
|
||||
// renderer.
|
||||
bool gl_ignore_mipmaps = config_glgsg.GetBool("gl-ignore-mipmaps", false);
|
||||
|
||||
// Configure this true to cause mipmaps to be rendered with phony
|
||||
// colors, using mipmap_level_*.rgb if they are available.
|
||||
bool gl_show_mipmaps = config_glgsg.GetBool("gl-show-mipmaps", false);
|
||||
|
||||
GLDecalType gl_decal_type = GDT_offset;
|
||||
|
||||
static GLDecalType
|
||||
|
@ -15,6 +15,7 @@ extern bool gl_show_transforms;
|
||||
extern bool gl_cheap_textures;
|
||||
extern bool gl_cull_traversal;
|
||||
extern bool gl_ignore_mipmaps;
|
||||
extern bool gl_show_mipmaps;
|
||||
|
||||
// Ways to implement decals.
|
||||
enum GLDecalType {
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "glTextureContext.h"
|
||||
#include "config_glgsg.h"
|
||||
|
||||
#include <config_util.h>
|
||||
#include <directRenderTraverser.h>
|
||||
#include <cullTraverser.h>
|
||||
#include <displayRegion.h>
|
||||
@ -3425,6 +3426,12 @@ apply_texture_immediate(Texture *tex) {
|
||||
break;
|
||||
}
|
||||
if (use_mipmaps) {
|
||||
#ifndef NDEBUG
|
||||
if (gl_show_mipmaps) {
|
||||
build_phony_mipmaps(tex);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
gluBuild2DMipmaps(GL_TEXTURE_2D, internal_format,
|
||||
pb->get_xsize(), pb->get_ysize(),
|
||||
external_format, type, pb->_image);
|
||||
@ -3437,7 +3444,6 @@ apply_texture_immediate(Texture *tex) {
|
||||
external_format, type, pb->_image );
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: GLGraphicsStateGuardian::get_texture_wrap_mode
|
||||
// Access: Protected
|
||||
@ -3868,6 +3874,121 @@ restore_frame_buffer(SavedFrameBuffer *frame_buffer) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: GLGraphicsStateGuardian::build_phony_mipmaps
|
||||
// Access: Protected
|
||||
// Description: Generates a series of colored mipmap levels to aid in
|
||||
// visualizing the mipmap levels as the hardware applies
|
||||
// them.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void GLGraphicsStateGuardian::
|
||||
build_phony_mipmaps(Texture *tex) {
|
||||
PixelBuffer *pb = tex->_pbuffer;
|
||||
int xsize = pb->get_xsize();
|
||||
int ysize = pb->get_ysize();
|
||||
|
||||
glgsg_cat.info()
|
||||
<< "Building phony mipmap levels for " << tex->get_name() << "\n";
|
||||
int level = 0;
|
||||
while (xsize > 0 && ysize > 0) {
|
||||
glgsg_cat.info(false)
|
||||
<< " level " << level << " is " << xsize << " by " << ysize << "\n";
|
||||
build_phony_mipmap_level(level, xsize, ysize);
|
||||
|
||||
xsize >>= 1;
|
||||
ysize >>= 1;
|
||||
level++;
|
||||
}
|
||||
|
||||
while (xsize > 0) {
|
||||
glgsg_cat.info(false)
|
||||
<< " level " << level << " is " << xsize << " by 1\n";
|
||||
build_phony_mipmap_level(level, xsize, 1);
|
||||
|
||||
xsize >>= 1;
|
||||
level++;
|
||||
}
|
||||
|
||||
while (ysize > 0) {
|
||||
glgsg_cat.info(false)
|
||||
<< " level " << level << " is 1 by " << ysize << "\n";
|
||||
build_phony_mipmap_level(level, 1, ysize);
|
||||
|
||||
ysize >>= 1;
|
||||
level++;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: GLGraphicsStateGuardian::build_phony_mipmap_level
|
||||
// Access: Protected
|
||||
// Description: Generates a single colored mipmap level.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void GLGraphicsStateGuardian::
|
||||
build_phony_mipmap_level(int level, int xsize, int ysize) {
|
||||
static const int num_levels = 10;
|
||||
static const char *level_filenames[num_levels] = {
|
||||
"mipmap_level_0.rgb",
|
||||
"mipmap_level_1.rgb",
|
||||
"mipmap_level_2.rgb",
|
||||
"mipmap_level_3.rgb",
|
||||
"mipmap_level_4.rgb",
|
||||
"mipmap_level_5.rgb",
|
||||
"mipmap_level_6.rgb",
|
||||
"mipmap_level_7.rgb",
|
||||
"mipmap_level_8.rgb",
|
||||
"mipmap_level_9.rgb"
|
||||
};
|
||||
static const RGBColorf level_colors[num_levels] = {
|
||||
RGBColorf(1.0, 1.0, 1.0),
|
||||
RGBColorf(1.0, 0.0, 0.0),
|
||||
RGBColorf(0.0, 1.0, 0.0),
|
||||
RGBColorf(0.0, 0.0, 1.0),
|
||||
RGBColorf(1.0, 1.0, 0.0),
|
||||
RGBColorf(0.0, 1.0, 1.0),
|
||||
RGBColorf(1.0, 0.0, 1.0),
|
||||
RGBColorf(1.0, 0.5, 0.0),
|
||||
RGBColorf(0.0, 1.0, 0.5),
|
||||
RGBColorf(0.83, 0.71, 1.0)
|
||||
};
|
||||
|
||||
level = level % num_levels;
|
||||
Filename filename(level_filenames[level]);
|
||||
|
||||
PNMImage image_sized(xsize, ysize);
|
||||
PNMImage image_source;
|
||||
if (filename.resolve_filename(get_texture_path()) ||
|
||||
filename.resolve_filename(get_model_path())) {
|
||||
image_source.read(filename);
|
||||
}
|
||||
|
||||
if (image_source.is_valid()) {
|
||||
image_sized.quick_filter_from(image_source);
|
||||
|
||||
} else {
|
||||
glgsg_cat.info(false)
|
||||
<< " " << filename << " cannot be read, making solid color mipmap.\n";
|
||||
image_sized.fill(level_colors[level][0],
|
||||
level_colors[level][1],
|
||||
level_colors[level][2]);
|
||||
}
|
||||
|
||||
PixelBuffer *pb = new PixelBuffer;
|
||||
pb->load(image_sized);
|
||||
|
||||
GLenum internal_format = get_internal_image_format(pb->get_format());
|
||||
GLenum external_format = get_external_image_format(pb->get_format());
|
||||
GLenum type = get_image_type(pb->get_image_type());
|
||||
|
||||
glTexImage2D(GL_TEXTURE_2D, level, internal_format,
|
||||
pb->get_xsize(), pb->get_ysize(), pb->get_border(),
|
||||
external_format, type, pb->_image );
|
||||
|
||||
delete pb;
|
||||
}
|
||||
#endif
|
||||
|
||||
// factory and type stuff
|
||||
|
||||
GraphicsStateGuardian *GLGraphicsStateGuardian::
|
||||
|
@ -247,6 +247,11 @@ protected:
|
||||
GLenum get_stencil_action_type(StencilProperty::Action a) const;
|
||||
GLenum get_fog_mode_type(Fog::Mode m) const;
|
||||
|
||||
#ifndef NDEBUG
|
||||
void build_phony_mipmaps(Texture *tex);
|
||||
void build_phony_mipmap_level(int level, int xsize, int ysize);
|
||||
#endif
|
||||
|
||||
GLclampf _clear_color_red, _clear_color_green, _clear_color_blue,
|
||||
_clear_color_alpha;
|
||||
GLclampd _clear_depth;
|
||||
|
Loading…
x
Reference in New Issue
Block a user