mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 11:28:17 -04:00
*** empty log message ***
This commit is contained in:
parent
d976c1bfe5
commit
ae73eb88a7
@ -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
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -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.
|
||||||
|
@ -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);
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user