v1.03 prerelease - Full Linux port of crnlib/crunch, in progress - still more testing to do, and some cmd line options (such as -timestamp) don't work under linux yet, but the core stuff (compression/decompression/transcoding) should work fine and performance under Linux is comparable to Windows. The 3 examples haven't been ported yet.

This commit is contained in:
richgel99@gmail.com
2012-04-26 07:14:21 +00:00
parent fffd983ffa
commit f63e26aee6
89 changed files with 3547 additions and 3829 deletions
+32 -70
View File
@@ -1,4 +1,4 @@
// File: crnlib.cpp
// File: crnlib.cpp
// See Copyright Notice and license at the end of inc/crnlib.h
#include "crn_core.h"
#include "../inc/crnlib.h"
@@ -8,8 +8,6 @@
#include "crn_buffer_stream.h"
#include "crn_ryg_dxt.hpp"
#include "crn_winhdr.h"
#define CRND_HEADER_FILE_ONLY
#include "../inc/crn_decomp.h"
@@ -32,15 +30,10 @@ namespace crnlib
public:
crnlib_global_initializer()
{
crn_threading_init();
ryg_dxt::sInitDXT();
#ifdef CRNLIB_PLATFORM_PC
SYSTEM_INFO g_system_info;
GetSystemInfo(&g_system_info);
g_number_of_processors = math::maximum<uint>(1U, g_system_info.dwNumberOfProcessors);
#endif
crnlib_enable_fail_exceptions(true);
// Redirect crn_decomp.h's memory allocations into crnlib, which may be further redirected by the outside caller.
@@ -49,16 +42,11 @@ namespace crnlib
};
crnlib_global_initializer g_crnlib_initializer;
}
} // namespace crnlib
using namespace crnlib;
const char* crn_get_format_stringa(crn_format fmt)
{
return pixel_format_helpers::get_crn_format_stringa(fmt);
}
const wchar_t* crn_get_format_string(crn_format fmt)
const char* crn_get_format_string(crn_format fmt)
{
return pixel_format_helpers::get_crn_format_string(fmt);
}
@@ -83,18 +71,7 @@ crn_format crn_get_fundamental_dxt_format(crn_format fmt)
return crnd::crnd_get_fundamental_dxt_format(fmt);
}
const wchar_t* crn_get_file_type_ext(crn_file_type file_type)
{
switch (file_type)
{
case cCRNFileTypeDDS: return L"dds";
case cCRNFileTypeCRN: return L"crn";
default: break;
}
return L"?";
}
const char* crn_get_file_type_exta(crn_file_type file_type)
const char* crn_get_file_type_ext(crn_file_type file_type)
{
switch (file_type)
{
@@ -105,30 +82,30 @@ const char* crn_get_file_type_exta(crn_file_type file_type)
return "?";
}
const wchar_t* crn_get_mip_mode_desc(crn_mip_mode m)
const char* crn_get_mip_mode_desc(crn_mip_mode m)
{
switch (m)
{
case cCRNMipModeUseSourceOrGenerateMips: return L"Use source/generate if none";
case cCRNMipModeUseSourceMips: return L"Only use source MIP maps (if any)";
case cCRNMipModeGenerateMips: return L"Always generate new MIP maps";
case cCRNMipModeNoMips: return L"No MIP maps";
case cCRNMipModeUseSourceOrGenerateMips: return "Use source/generate if none";
case cCRNMipModeUseSourceMips: return "Only use source MIP maps (if any)";
case cCRNMipModeGenerateMips: return "Always generate new MIP maps";
case cCRNMipModeNoMips: return "No MIP maps";
default: break;
}
return L"?";
return "?";
}
const wchar_t* crn_get_mip_mode_name(crn_mip_mode m)
const char* crn_get_mip_mode_name(crn_mip_mode m)
{
switch (m)
{
case cCRNMipModeUseSourceOrGenerateMips: return L"UseSourceOrGenerate";
case cCRNMipModeUseSourceMips: return L"UseSource";
case cCRNMipModeGenerateMips: return L"Generate";
case cCRNMipModeNoMips: return L"None";
case cCRNMipModeUseSourceOrGenerateMips: return "UseSourceOrGenerate";
case cCRNMipModeUseSourceMips: return "UseSource";
case cCRNMipModeGenerateMips: return "Generate";
case cCRNMipModeNoMips: return "None";
default: break;
}
return L"?";
return "?";
}
const char* crn_get_mip_filter_name(crn_mip_filter f)
@@ -145,37 +122,22 @@ const char* crn_get_mip_filter_name(crn_mip_filter f)
return "?";
}
const wchar_t* crn_get_scale_mode_desc(crn_scale_mode sm)
const char* crn_get_scale_mode_desc(crn_scale_mode sm)
{
switch (sm)
{
case cCRNSMDisabled: return L"disabled";
case cCRNSMAbsolute: return L"absolute";
case cCRNSMRelative: return L"relative";
case cCRNSMLowerPow2: return L"lowerpow2";
case cCRNSMNearestPow2: return L"nearestpow2";
case cCRNSMNextPow2: return L"nextpow2";
case cCRNSMDisabled: return "disabled";
case cCRNSMAbsolute: return "absolute";
case cCRNSMRelative: return "relative";
case cCRNSMLowerPow2: return "lowerpow2";
case cCRNSMNearestPow2: return "nearestpow2";
case cCRNSMNextPow2: return "nextpow2";
default: break;
}
return L"?";
return "?";
}
const wchar_t* crn_get_dxt_quality_string(crn_dxt_quality q)
{
switch (q)
{
case cCRNDXTQualitySuperFast: return L"SuperFast";
case cCRNDXTQualityFast: return L"Fast";
case cCRNDXTQualityNormal: return L"Normal";
case cCRNDXTQualityBetter: return L"Better";
case cCRNDXTQualityUber: return L"Uber";
default: break;
}
CRNLIB_ASSERT(false);
return L"?";
}
const char* crn_get_dxt_quality_stringa(crn_dxt_quality q)
const char* crn_get_dxt_quality_string(crn_dxt_quality q)
{
switch (q)
{
@@ -233,7 +195,7 @@ void *crn_compress(const crn_comp_params &comp_params, const crn_mipmap_params &
void *crn_decompress_crn_to_dds(const void *pCRN_file_data, crn_uint32 &file_size)
{
dds_texture tex;
if (!tex.load_crn_from_memory(L"from_memory.crn", pCRN_file_data, file_size))
if (!tex.load_crn_from_memory("from_memory.crn", pCRN_file_data, file_size))
{
file_size = 0;
return NULL;
@@ -277,9 +239,9 @@ bool crn_decompress_dds_to_images(const void *pDDS_file_data, crn_uint32 dds_fil
tex_desc.m_levels = tex.get_num_levels();
tex_desc.m_fmt_fourcc = (crn_uint32)tex.get_format();
for (uint f = 0; f < tex.get_num_faces(); f++)
for (uint32 f = 0; f < tex.get_num_faces(); f++)
{
for (uint l = 0; l < tex.get_num_levels(); l++)
for (uint32 l = 0; l < tex.get_num_levels(); l++)
{
mip_level *pLevel = tex.get_level(f, l);
image_u8 *pImg = pLevel->get_image();
@@ -292,8 +254,8 @@ bool crn_decompress_dds_to_images(const void *pDDS_file_data, crn_uint32 dds_fil
void crn_free_all_images(crn_uint32 **ppImages, const crn_texture_desc &desc)
{
for (uint f = 0; f < desc.m_faces; f++)
for (uint l = 0; l < desc.m_levels; l++)
for (uint32 f = 0; f < desc.m_faces; f++)
for (uint32 l = 0; l < desc.m_levels; l++)
crn_free_block(ppImages[l + desc.m_levels * f]);
}