mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 03:15:07 -04:00
*** empty log message ***
This commit is contained in:
parent
d976c1bfe5
commit
ae73eb88a7
@ -7,6 +7,7 @@
|
||||
#include "sourceTextureImage.h"
|
||||
#include "texturePlacement.h"
|
||||
#include "textureImage.h"
|
||||
#include "palettizer.h"
|
||||
|
||||
#include <datagram.h>
|
||||
#include <datagramIterator.h>
|
||||
@ -15,6 +16,7 @@
|
||||
|
||||
TypeHandle DestTextureImage::_type_handle;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: DestTextureImage::Default Constructor
|
||||
// Access: Private
|
||||
@ -38,6 +40,11 @@ DestTextureImage(TexturePlacement *placement) {
|
||||
_x_size = texture->get_x_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());
|
||||
}
|
||||
|
||||
@ -49,7 +56,11 @@ DestTextureImage(TexturePlacement *placement) {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void DestTextureImage::
|
||||
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
|
||||
// Access: Public, Static
|
||||
|
@ -29,6 +29,10 @@ public:
|
||||
void copy(TextureImage *texture);
|
||||
void copy_if_stale(const DestTextureImage *other, TextureImage *texture);
|
||||
|
||||
private:
|
||||
static int to_power_2(int value);
|
||||
|
||||
|
||||
// The TypedWriteable interface follows.
|
||||
public:
|
||||
static void register_with_read_factory();
|
||||
|
@ -327,6 +327,11 @@ choose_placements() {
|
||||
// Now groups is the set of groups that the egg file requires,
|
||||
// which also happen to include the texture. It better not be
|
||||
// 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());
|
||||
|
||||
// It doesn't really matter which group in the set we choose, so
|
||||
|
@ -21,6 +21,17 @@
|
||||
|
||||
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;
|
||||
|
||||
ostream &operator << (ostream &out, Palettizer::RemapUV remap) {
|
||||
@ -48,17 +59,6 @@ ostream &operator << (ostream &out, Palettizer::RemapUV remap) {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
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";
|
||||
_shadow_dirname = "shadow";
|
||||
_margin = 2;
|
||||
|
@ -54,8 +54,8 @@ private:
|
||||
static const char *yesno(bool flag);
|
||||
|
||||
public:
|
||||
int _pi_version;
|
||||
int _read_pi_version;
|
||||
static int _pi_version;
|
||||
static int _read_pi_version;
|
||||
|
||||
enum RemapUV {
|
||||
RU_never,
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "destTextureImage.h"
|
||||
#include "eggFile.h"
|
||||
#include "paletteGroup.h"
|
||||
#include "paletteImage.h"
|
||||
#include "texturePlacement.h"
|
||||
#include "filenameUnifier.h"
|
||||
|
||||
@ -28,7 +29,6 @@ TextureImage::
|
||||
TextureImage() {
|
||||
_preferred_source = (SourceTextureImage *)NULL;
|
||||
_read_source_image = false;
|
||||
_got_dest_image = false;
|
||||
_is_surprise = true;
|
||||
_ever_read_image = false;
|
||||
_forced_grayscale = false;
|
||||
@ -411,7 +411,6 @@ get_source(const Filename &filename, const Filename &alpha_filename) {
|
||||
// next time someone asks.
|
||||
_preferred_source = (SourceTextureImage *)NULL;
|
||||
_read_source_image = false;
|
||||
_got_dest_image = false;
|
||||
|
||||
return source;
|
||||
}
|
||||
@ -578,27 +577,6 @@ read_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
|
||||
// Access: Public
|
||||
@ -677,6 +655,39 @@ write_scale_info(ostream &out, int indent_level) {
|
||||
out << " scale " << scale << "%";
|
||||
}
|
||||
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) {
|
||||
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.
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
@ -66,7 +66,6 @@ public:
|
||||
void copy_unplaced(bool redo_all);
|
||||
|
||||
const PNMImage &read_source_image();
|
||||
const PNMImage &get_dest_image();
|
||||
|
||||
void write_source_pathnames(ostream &out, int indent_level = 0) const;
|
||||
void write_scale_info(ostream &out, int indent_level = 0);
|
||||
@ -113,8 +112,6 @@ private:
|
||||
|
||||
bool _read_source_image;
|
||||
PNMImage _source_image;
|
||||
bool _got_dest_image;
|
||||
PNMImage _dest_image;
|
||||
|
||||
|
||||
// The TypedWriteable interface follows.
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "paletteImage.h"
|
||||
#include "palettizer.h"
|
||||
#include "eggFile.h"
|
||||
#include "destTextureImage.h"
|
||||
|
||||
#include <indent.h>
|
||||
#include <datagram.h>
|
||||
@ -898,9 +899,7 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
|
||||
writer->write_pointer(datagram, _texture);
|
||||
writer->write_pointer(datagram, _group);
|
||||
writer->write_pointer(datagram, _image);
|
||||
|
||||
// We don't write _dest. That can safely be redetermined each
|
||||
// session.
|
||||
writer->write_pointer(datagram, _dest);
|
||||
|
||||
datagram.add_bool(_has_uvs);
|
||||
datagram.add_bool(_size_known);
|
||||
@ -930,6 +929,10 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
|
||||
int TexturePlacement::
|
||||
complete_pointers(vector_typedWriteable &plist, BamReader *manager) {
|
||||
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;
|
||||
|
||||
if (plist[index] != (TypedWriteable *)NULL) {
|
||||
@ -947,6 +950,13 @@ complete_pointers(vector_typedWriteable &plist, BamReader *manager) {
|
||||
}
|
||||
index++;
|
||||
|
||||
if (Palettizer::_read_pi_version >= 2) {
|
||||
if (plist[index] != (TypedWriteable *)NULL) {
|
||||
DCAST_INTO_R(_dest, plist[index], index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
int i;
|
||||
for (i = 0; i < _num_references; i++) {
|
||||
TextureReference *reference;
|
||||
@ -992,6 +1002,10 @@ fillin(DatagramIterator &scan, BamReader *manager) {
|
||||
manager->read_pointer(scan, this); // _group
|
||||
manager->read_pointer(scan, this); // _image
|
||||
|
||||
if (Palettizer::_read_pi_version >= 2) {
|
||||
manager->read_pointer(scan, this); // _dest
|
||||
}
|
||||
|
||||
_has_uvs = scan.get_bool();
|
||||
_size_known = scan.get_bool();
|
||||
_position.fillin(scan, manager);
|
||||
|
@ -174,6 +174,7 @@ fully_define() {
|
||||
break;
|
||||
|
||||
case EggTexture::F_luminance_alpha:
|
||||
case EggTexture::F_luminance_alphamask:
|
||||
_num_channels = 2;
|
||||
break;
|
||||
|
||||
@ -207,6 +208,7 @@ fully_define() {
|
||||
case 2:
|
||||
switch (_format) {
|
||||
case EggTexture::F_luminance_alpha:
|
||||
case EggTexture::F_luminance_alphamask:
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -393,6 +395,9 @@ get_format_string(EggTexture::Format format) {
|
||||
case EggTexture::F_luminance_alpha:
|
||||
return "t"; // t for two-channel
|
||||
|
||||
case EggTexture::F_luminance_alphamask:
|
||||
return "t1";
|
||||
|
||||
case EggTexture::F_red:
|
||||
return "r";
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user