*** empty log message ***

This commit is contained in:
David Rose 2000-12-20 00:35:46 +00:00
parent d976c1bfe5
commit ae73eb88a7
9 changed files with 105 additions and 47 deletions

View File

@ -7,6 +7,7 @@
#include "sourceTextureImage.h" #include "sourceTextureImage.h"
#include "texturePlacement.h" #include "texturePlacement.h"
#include "textureImage.h" #include "textureImage.h"
#include "palettizer.h"
#include <datagram.h> #include <datagram.h>
#include <datagramIterator.h> #include <datagramIterator.h>
@ -15,6 +16,7 @@
TypeHandle DestTextureImage::_type_handle; TypeHandle DestTextureImage::_type_handle;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: DestTextureImage::Default Constructor // Function: DestTextureImage::Default Constructor
// Access: Private // Access: Private
@ -38,6 +40,11 @@ DestTextureImage(TexturePlacement *placement) {
_x_size = texture->get_x_size(); _x_size = texture->get_x_size();
_y_size = texture->get_y_size(); _y_size = texture->get_y_size();
if (pal->_force_power_2) {
_x_size = to_power_2(_x_size);
_y_size = to_power_2(_y_size);
}
set_filename(placement->get_group(), texture->get_name()); set_filename(placement->get_group(), texture->get_name());
} }
@ -49,7 +56,11 @@ DestTextureImage(TexturePlacement *placement) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void DestTextureImage:: void DestTextureImage::
copy(TextureImage *texture) { copy(TextureImage *texture) {
write(texture->get_dest_image()); const PNMImage &source_image = texture->read_source_image();
PNMImage dest_image(_x_size, _y_size, texture->get_num_channels(),
source_image.get_maxval());
dest_image.quick_filter_from(source_image);
write(dest_image);
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -78,6 +89,21 @@ copy_if_stale(const DestTextureImage *other, TextureImage *texture) {
} }
} }
////////////////////////////////////////////////////////////////////
// Function: DestTextureImage::to_power_2
// Access: Private, Static
// Description: Returns the largest power of 2 less than or equal to
// value.
////////////////////////////////////////////////////////////////////
int DestTextureImage::
to_power_2(int value) {
int x = 1;
while ((x << 1) <= value) {
x = (x << 1);
}
return x;
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: DestTextureImage::register_with_read_factory // Function: DestTextureImage::register_with_read_factory
// Access: Public, Static // Access: Public, Static

View File

@ -29,6 +29,10 @@ public:
void copy(TextureImage *texture); void copy(TextureImage *texture);
void copy_if_stale(const DestTextureImage *other, TextureImage *texture); void copy_if_stale(const DestTextureImage *other, TextureImage *texture);
private:
static int to_power_2(int value);
// The TypedWriteable interface follows. // The TypedWriteable interface follows.
public: public:
static void register_with_read_factory(); static void register_with_read_factory();

View File

@ -327,6 +327,11 @@ choose_placements() {
// Now groups is the set of groups that the egg file requires, // Now groups is the set of groups that the egg file requires,
// which also happen to include the texture. It better not be // which also happen to include the texture. It better not be
// empty. // empty.
if (groups.empty()) {
cerr << "groups empty for " << get_name() << ", texture " << texture->get_name() << "\n"
<< "complete groups is " << get_complete_groups() << "\n"
<< "texture groups is " << texture->get_groups() << "\n";
}
nassertv(!groups.empty()); nassertv(!groups.empty());
// It doesn't really matter which group in the set we choose, so // It doesn't really matter which group in the set we choose, so

View File

@ -21,6 +21,17 @@
Palettizer *pal = (Palettizer *)NULL; Palettizer *pal = (Palettizer *)NULL;
// This number is written out as the first number to the pi file, to
// indicate the version of egg-palettize that wrote it out. This
// allows us to easily update egg-palettize to write out additional
// information to its pi file, without having it increment the bam
// version number for all bam and boo files anywhere in the world.
int Palettizer::_pi_version = 2;
// Updated to version 1 on 12/11/00 to add _remap_char_uv.
// Updated to version 2 on 12/19/00 to add TexturePlacement::_dest.
int Palettizer::_read_pi_version = 0;
TypeHandle Palettizer::_type_handle; TypeHandle Palettizer::_type_handle;
ostream &operator << (ostream &out, Palettizer::RemapUV remap) { ostream &operator << (ostream &out, Palettizer::RemapUV remap) {
@ -48,17 +59,6 @@ ostream &operator << (ostream &out, Palettizer::RemapUV remap) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
Palettizer:: Palettizer::
Palettizer() { Palettizer() {
// This number is written out as the first number to the pi file, to
// indicate the version of egg-palettize that wrote it out. This
// allows us to easily update egg-palettize to write out additional
// information to its pi file, without having it increment the bam
// version number for all bam and boo files anywhere in the world.
_pi_version = 1;
// Updated to version 1 on 12/11/00 to add _remap_char_uv.
_read_pi_version = _pi_version;
_map_dirname = "%g"; _map_dirname = "%g";
_shadow_dirname = "shadow"; _shadow_dirname = "shadow";
_margin = 2; _margin = 2;

View File

@ -54,8 +54,8 @@ private:
static const char *yesno(bool flag); static const char *yesno(bool flag);
public: public:
int _pi_version; static int _pi_version;
int _read_pi_version; static int _read_pi_version;
enum RemapUV { enum RemapUV {
RU_never, RU_never,

View File

@ -8,6 +8,7 @@
#include "destTextureImage.h" #include "destTextureImage.h"
#include "eggFile.h" #include "eggFile.h"
#include "paletteGroup.h" #include "paletteGroup.h"
#include "paletteImage.h"
#include "texturePlacement.h" #include "texturePlacement.h"
#include "filenameUnifier.h" #include "filenameUnifier.h"
@ -28,7 +29,6 @@ TextureImage::
TextureImage() { TextureImage() {
_preferred_source = (SourceTextureImage *)NULL; _preferred_source = (SourceTextureImage *)NULL;
_read_source_image = false; _read_source_image = false;
_got_dest_image = false;
_is_surprise = true; _is_surprise = true;
_ever_read_image = false; _ever_read_image = false;
_forced_grayscale = false; _forced_grayscale = false;
@ -411,7 +411,6 @@ get_source(const Filename &filename, const Filename &alpha_filename) {
// next time someone asks. // next time someone asks.
_preferred_source = (SourceTextureImage *)NULL; _preferred_source = (SourceTextureImage *)NULL;
_read_source_image = false; _read_source_image = false;
_got_dest_image = false;
return source; return source;
} }
@ -578,27 +577,6 @@ read_source_image() {
return _source_image; return _source_image;
} }
////////////////////////////////////////////////////////////////////
// Function: TextureImage::get_dest_image
// Access: Public
// Description: Returns the image appropriate for writing to the
// destination directory, having been resized and
// everything.
////////////////////////////////////////////////////////////////////
const PNMImage &TextureImage::
get_dest_image() {
if (!_got_dest_image) {
const PNMImage &source_image = read_source_image();
_dest_image.clear(get_x_size(), get_y_size(), get_num_channels(),
source_image.get_maxval());
_dest_image.quick_filter_from(source_image);
_got_dest_image = true;
}
return _dest_image;
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: TextureImage::write_source_pathnames // Function: TextureImage::write_source_pathnames
// Access: Public // Access: Public
@ -677,6 +655,39 @@ write_scale_info(ostream &out, int indent_level) {
out << " scale " << scale << "%"; out << " scale " << scale << "%";
} }
out << "\n"; out << "\n";
// Also cross-reference the placed and unplaced information.
Placement::iterator pi;
for (pi = _placement.begin(); pi != _placement.end(); ++pi) {
TexturePlacement *placement = (*pi).second;
if (placement->get_omit_reason() == OR_none) {
PaletteImage *image = placement->get_image();
nassertv(image != (PaletteImage *)NULL);
indent(out, indent_level + 2)
<< "placed on "
<< FilenameUnifier::make_user_filename(image->get_filename())
<< "\n";
} else {
DestTextureImage *image = placement->get_dest();
nassertv(image != (DestTextureImage *)NULL);
indent(out, indent_level + 2)
<< "copied to "
<< FilenameUnifier::make_user_filename(image->get_filename());
if (image->get_x_size() != get_x_size() ||
image->get_y_size() != get_y_size()) {
out << " at size " << image->get_x_size() << " "
<< image->get_y_size();
if (source != (SourceTextureImage *)NULL &&
source->is_size_known()) {
double scale =
100.0 * (((double)image->get_x_size() / (double)source->get_x_size()) +
((double)image->get_y_size() / (double)source->get_y_size())) / 2.0;
out << " scale " << scale << "%";
}
}
out << "\n";
}
}
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -1015,10 +1026,6 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
for (di = _dests.begin(); di != _dests.end(); ++di) { for (di = _dests.begin(); di != _dests.end(); ++di) {
writer->write_pointer(datagram, (*di).second); writer->write_pointer(datagram, (*di).second);
} }
// We don't write out _read_source_image, _source_image,
// _got_dest_image, or _dest_image; these must be reread each
// session.
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -66,7 +66,6 @@ public:
void copy_unplaced(bool redo_all); void copy_unplaced(bool redo_all);
const PNMImage &read_source_image(); const PNMImage &read_source_image();
const PNMImage &get_dest_image();
void write_source_pathnames(ostream &out, int indent_level = 0) const; void write_source_pathnames(ostream &out, int indent_level = 0) const;
void write_scale_info(ostream &out, int indent_level = 0); void write_scale_info(ostream &out, int indent_level = 0);
@ -113,8 +112,6 @@ private:
bool _read_source_image; bool _read_source_image;
PNMImage _source_image; PNMImage _source_image;
bool _got_dest_image;
PNMImage _dest_image;
// The TypedWriteable interface follows. // The TypedWriteable interface follows.

View File

@ -10,6 +10,7 @@
#include "paletteImage.h" #include "paletteImage.h"
#include "palettizer.h" #include "palettizer.h"
#include "eggFile.h" #include "eggFile.h"
#include "destTextureImage.h"
#include <indent.h> #include <indent.h>
#include <datagram.h> #include <datagram.h>
@ -898,9 +899,7 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
writer->write_pointer(datagram, _texture); writer->write_pointer(datagram, _texture);
writer->write_pointer(datagram, _group); writer->write_pointer(datagram, _group);
writer->write_pointer(datagram, _image); writer->write_pointer(datagram, _image);
writer->write_pointer(datagram, _dest);
// We don't write _dest. That can safely be redetermined each
// session.
datagram.add_bool(_has_uvs); datagram.add_bool(_has_uvs);
datagram.add_bool(_size_known); datagram.add_bool(_size_known);
@ -930,6 +929,10 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
int TexturePlacement:: int TexturePlacement::
complete_pointers(vector_typedWriteable &plist, BamReader *manager) { complete_pointers(vector_typedWriteable &plist, BamReader *manager) {
nassertr((int)plist.size() >= 3 + _num_references, 0); nassertr((int)plist.size() >= 3 + _num_references, 0);
if (Palettizer::_read_pi_version >= 2) {
nassertr((int)plist.size() >= 4 + _num_references, 0);
}
int index = 0; int index = 0;
if (plist[index] != (TypedWriteable *)NULL) { if (plist[index] != (TypedWriteable *)NULL) {
@ -947,6 +950,13 @@ complete_pointers(vector_typedWriteable &plist, BamReader *manager) {
} }
index++; index++;
if (Palettizer::_read_pi_version >= 2) {
if (plist[index] != (TypedWriteable *)NULL) {
DCAST_INTO_R(_dest, plist[index], index);
}
index++;
}
int i; int i;
for (i = 0; i < _num_references; i++) { for (i = 0; i < _num_references; i++) {
TextureReference *reference; TextureReference *reference;
@ -992,6 +1002,10 @@ fillin(DatagramIterator &scan, BamReader *manager) {
manager->read_pointer(scan, this); // _group manager->read_pointer(scan, this); // _group
manager->read_pointer(scan, this); // _image manager->read_pointer(scan, this); // _image
if (Palettizer::_read_pi_version >= 2) {
manager->read_pointer(scan, this); // _dest
}
_has_uvs = scan.get_bool(); _has_uvs = scan.get_bool();
_size_known = scan.get_bool(); _size_known = scan.get_bool();
_position.fillin(scan, manager); _position.fillin(scan, manager);

View File

@ -174,6 +174,7 @@ fully_define() {
break; break;
case EggTexture::F_luminance_alpha: case EggTexture::F_luminance_alpha:
case EggTexture::F_luminance_alphamask:
_num_channels = 2; _num_channels = 2;
break; break;
@ -207,6 +208,7 @@ fully_define() {
case 2: case 2:
switch (_format) { switch (_format) {
case EggTexture::F_luminance_alpha: case EggTexture::F_luminance_alpha:
case EggTexture::F_luminance_alphamask:
break; break;
default: default:
@ -393,6 +395,9 @@ get_format_string(EggTexture::Format format) {
case EggTexture::F_luminance_alpha: case EggTexture::F_luminance_alpha:
return "t"; // t for two-channel return "t"; // t for two-channel
case EggTexture::F_luminance_alphamask:
return "t1";
case EggTexture::F_red: case EggTexture::F_red:
return "r"; return "r";