Pavel Krajcevski
088481afe4
Meant resize instead of reserve.
2013-09-25 16:37:17 -04:00
Pavel Krajcevski
a587899048
Fix some compiler errors with MSVC (and honestly, other compilers should catch them, too.)
2013-09-25 15:06:45 -04:00
Pavel Krajcevski
ed12d53cd4
Merge in a few changes from master
2013-09-25 15:05:56 -04:00
Pavel Krajcevski
f19b324d28
Make sure to use the proper directory when running RUN_TESTS from MSVC. Note, this doesn't work in Release.
2013-09-25 14:42:35 -04:00
Pavel Krajcevski
79d2ad79ac
Fix some snafus on windows
2013-09-25 14:30:48 -04:00
Pavel Krajcevski
c6d7bdc670
Very preliminary compressor
2013-09-24 20:35:36 -04:00
Pavel Krajcevski
8f4dcca4d7
Add some utility functions for manipulating the block data, including packing colors back into the 64-bit word.
2013-09-24 20:33:48 -04:00
Pavel Krajcevski
3de9abc908
Make PVRTC block size a constant accessible from the global header
2013-09-24 19:30:31 -04:00
Pavel Krajcevski
340f4f3141
Add pixel packing routines
2013-09-24 19:29:03 -04:00
Pavel Krajcevski
75e570ed16
Fix some compiler snafus
2013-09-24 17:46:09 -04:00
Pavel Krajcevski
1636232717
Make sure that when changing from higher to lower bit depth (i.e. perform a division) that we round to the nearest value
2013-09-24 17:45:19 -04:00
Pavel Krajcevski
ea68f3a138
PVRTC image quality of life improvements.
2013-09-24 14:00:14 -04:00
Pavel Krajcevski
e9a9988a56
Fix small bug in downsampling that causes artifacts
2013-09-20 12:48:56 -04:00
Pavel Krajcevski
1093447055
Plug in the infrastructure to start passing images to be compressed.
2013-09-20 12:43:59 -04:00
Pavel Krajcevski
995c237e5e
Add downscale test and fix a few bugs and formatting.
2013-09-19 17:47:36 -04:00
Pavel Krajcevski
1d58ea2385
Add RGBA pixel constructor
2013-09-19 15:11:27 -04:00
Pavel Krajcevski
9f4fa671d9
Add a first pass at content aware downscaling.
2013-09-18 18:03:44 -04:00
Pavel Krajcevski
e609075d04
Split apart the index calculation and pixel lookup functions
2013-09-18 18:03:08 -04:00
Pavel Krajcevski
16cc7f4a93
Use GetHeight/GetWidth() where appropriate instead of m_Width/m_Height
2013-09-18 18:02:35 -04:00
Pavel Krajcevski
4135e38f22
Set the default wrap behavior to wrap for image upscale, too
2013-09-18 18:00:59 -04:00
Pavel Krajcevski
d4ca50f8ed
Fix the directories in the PVRTC compressor
2013-09-17 18:35:56 -04:00
Pavel Krajcevski
29bd1368e6
Fix a few compiler warnings and add the BPTCEncoder license.
2013-09-15 14:56:09 -04:00
Pavel Krajcevski
28cf254fe5
Initial decoupling of base library from core library. Includes a few formatting changes as well.
2013-09-13 19:36:37 -04:00
Pavel Krajcevski
093576c9e7
Add initial code for our compressor.
2013-09-13 13:10:22 -04:00
Pavel Krajcevski
0afa1281a8
Change default wrap mode to wrap
2013-09-13 13:10:07 -04:00
Pavel Krajcevski
571bf1ebd0
Remove dead code
2013-09-12 15:01:30 -04:00
Pavel Krajcevski
f7404c44b9
Refactor debug output for modulation info.
2013-09-12 15:01:19 -04:00
Pavel Krajcevski
1b073eb4b7
Add 2BPP decompression
2013-09-12 14:45:56 -04:00
Pavel Krajcevski
b3de3f2c01
If our compile flag is set to output debug images with tests, then actually do it.
2013-09-12 14:45:42 -04:00
Pavel Krajcevski
b3f8fcd454
Decouple upscale directions so that we can non-uniformly scale images.
2013-09-12 14:44:54 -04:00
Pavel Krajcevski
7184d49ccd
Add unpack RGBA for our pixels
2013-09-12 14:41:00 -04:00
Pavel Krajcevski
9f6e6e7233
Fix bug with debug images
2013-09-12 14:32:33 -04:00
Pavel Krajcevski
1115c2f9e4
Add 2BPP helper functions for our blocks.
...
Namely, there are two things that we need to do:
1. Figure out the sub-mode based on the mode bit and the structure of the modulation data. The comments in Block.h describe how we do this.
2. For a given texel index, return 2BPP texel modulation bits.
2013-09-12 14:30:08 -04:00
Pavel Krajcevski
08cad3ba86
Add 2BPP tests
2013-09-12 14:04:20 -04:00
Pavel Krajcevski
0172df4e60
Add final opaque to transparent gradient test.
2013-09-10 13:34:13 -04:00
Pavel Krajcevski
dd625fca71
When going from 344(3/4) pixels to 4555, the alpha channel only has a zero appended to it. Hence we must clear that bit for each pixel that was transparent during decoding.
2013-09-10 13:22:53 -04:00
Pavel Krajcevski
f5e0aa4f9f
Make sure to clear the MSBs of channels that have zero depth that get converted to higher depth values
2013-09-10 13:21:48 -04:00
Pavel Krajcevski
77bb7488cc
Fix typo
2013-09-10 11:58:53 -04:00
Pavel Krajcevski
eb312ccb0a
Small refactor
2013-09-09 14:16:45 -04:00
Pavel Krajcevski
5020f81f00
Add a transparent pvr image test
2013-09-09 10:33:04 -05:00
Pavel Krajcevski
6c8eea5520
Add superfluous code from when I was trying to match the decoder to PVR library.
2013-09-09 10:31:53 -05:00
Pavel Krajcevski
09b5680245
Some small code style fixes
2013-09-06 13:37:50 -04:00
Pavel Krajcevski
5ac6872dc7
Add a test to make sure that after a bilerp the pixels that should remain unaffected do in fact remain unaffected.
2013-09-06 02:02:34 -04:00
Pavel Krajcevski
3806efe6fc
Add some more hacky includes to be able to output debug images from our tests.
2013-09-06 02:02:02 -04:00
Pavel Krajcevski
91c79cd717
Fix Bilinear upscale
...
There were a couple of fixes.
1. Add another set of pixels to an image that represent the fractional bits that get populated as a result of doing a bilerp.
2. Do not consider individual axes when doing the bilerp. Instead, assign a weight to each of the different texels that we will use for the bilerp. Then, combine them and save the fractional bits.
2013-09-06 01:58:53 -04:00
Pavel Krajcevski
92827c23fc
Add a debug function to our intermediate PVRTC images
2013-09-06 01:57:06 -04:00
Pavel Krajcevski
0d0c65f536
Actually index into our pixels properly...
2013-09-06 01:55:25 -04:00
Pavel Krajcevski
2263080faa
Fix the interleaving by doing it when we're actually reading in the blocks
2013-09-06 01:55:06 -04:00
Pavel Krajcevski
db914018f1
Two enhancements:
...
1. Make sure to use the same lerping code for both modulation modes when decompressing.
2. Accept a flag during decompression that outputs the debug images that were computed during decompression.
2013-09-06 01:53:10 -04:00
Pavel Krajcevski
7403e77d4d
Add some hacky includes and libraries to support writing out debug images
2013-09-06 01:50:46 -04:00
Pavel Krajcevski
a6e6138084
Change the lerp function to be more explicit.
2013-09-05 14:49:56 -04:00
Pavel Krajcevski
b8e155e11c
Switch red and blue channels in our decompressor test.
2013-09-05 14:49:08 -04:00
Pavel Krajcevski
7b72a84d87
Add a working directory for PVR lib tests
...
Unfortunately, the WORKING_DIRECTORY directive for ADD_TEST seems to be broken as of CMake 2.8.10, fortunately there was a mail thread about this issue in 2.6 so I was able to implement the workaround.
2013-09-04 20:43:49 -04:00
Pavel Krajcevski
6149c0af3a
Add PVR tests
...
If cmake was able to find Imagination's PVR library, then it'd be nice to make sure that our decompressor matches theirs. We incur a bit of overhead by adding .pvr files into git, but hopefully this cost will be beneficial to actually figuring out how things are working...
2013-09-04 20:21:56 -04:00
Pavel Krajcevski
052157ea49
Rename our tests to start with the prefix 'Test'
2013-09-04 20:21:28 -04:00
Pavel Krajcevski
abd4ba8b54
Abstract away some utilities that we can use across all of our tests, and add a test for a gray image. The test currently seems to be failing, which is likely due to a bug in our bit depth manipulation code.
2013-09-04 20:20:37 -04:00
Pavel Krajcevski
669b2c0934
Reverse the order for modulating our bits... I'm not convinced that this is right
2013-09-04 20:18:43 -04:00
Pavel Krajcevski
34ab853a62
Make sure to take into account the interleaved nature of the blocks when decompressing
2013-09-04 20:18:03 -04:00
Pavel Krajcevski
bb525ae9dc
If all of the PVR blocks are the same then we don't need so much code.
2013-09-04 15:28:51 -04:00
Pavel Krajcevski
9273625eeb
Add initial decompressor test
2013-09-02 19:14:50 -04:00
Pavel Krajcevski
4bbd80aab2
Make sure to preserve bit depth when bilinearly upscaling
2013-09-02 19:14:31 -04:00
Pavel Krajcevski
3f4ffa61b5
Reverse byte order (and interpret the data as a 64 bit word) for PVRTC blocks
2013-09-02 19:13:53 -04:00
Pavel Krajcevski
df81c73456
Default wrap mode to clamp
2013-09-02 19:12:43 -04:00
Pavel Krajcevski
5cde88d3b7
Add Image tests
2013-08-31 18:31:38 -04:00
Pavel Krajcevski
1d25e31d2a
Bilinear upscale bug fixes.
2013-08-31 18:30:47 -04:00
Pavel Krajcevski
40b479487c
Add accessors for image dimensions
2013-08-31 17:05:26 -04:00
Pavel Krajcevski
36641c2268
Don't set all of the memory to zero when we specify an image without any pixels
2013-08-31 16:43:32 -04:00
Pavel Krajcevski
992c72e4b5
Fix asserts
2013-08-31 16:40:49 -04:00
Pavel Krajcevski
fa37aba768
Add comparison operator for pixels
2013-08-31 16:37:58 -04:00
Pavel Krajcevski
8bf682f04e
Add comment for RGBA packing
2013-08-31 16:37:40 -04:00
Pavel Krajcevski
b3a07e21f7
Add assignment operator
2013-08-31 16:37:07 -04:00
Pavel Krajcevski
26005bfd27
Disambiguate the Image.h from PVRTCEncoder and Core
2013-08-31 16:36:10 -04:00
Pavel Krajcevski
21199bc264
Add Pixel tests
2013-08-31 16:06:00 -04:00
Pavel Krajcevski
8c2127c08a
When packing ARGB pixels make sure to convert them to 8-bit depth first
2013-08-31 16:05:50 -04:00
Pavel Krajcevski
1ffbdea2b8
Make sure to handle 0 bit depth a bit more gracefully
2013-08-31 16:05:28 -04:00
Pavel Krajcevski
9a0fbebac3
Fix bug when going from smaller to higher bit depth
2013-08-31 16:04:58 -04:00
Pavel Krajcevski
ad17404bf7
Begin counting the bits from the beginning of the byte stream. The way I was doing it before was silly...
2013-08-31 14:33:44 -04:00
Pavel Krajcevski
f280c2bb33
Fix some compiler warnings.
2013-08-31 13:30:12 -04:00
Pavel Krajcevski
53a8c8e3cd
Fix bug where the defaulted value caused a crash (wtf?)
2013-08-30 19:08:53 -04:00
Pavel Krajcevski
012d9e3ce0
Add preliminary tests for PVRTC pixels
2013-08-30 19:08:20 -04:00
Pavel Krajcevski
ab0dbbfa6e
Bugfix
...
The bug was that bitIdx was not being taken into account when we realized that there was enough pixel depth to stay within the current byte when reading pixel values.
2013-08-30 18:45:14 -04:00
Pavel Krajcevski
1cc8f57538
Add block tests
2013-08-30 18:44:50 -04:00
Pavel Krajcevski
90662a56cd
First pass at PVRTC Decompressor
2013-08-29 18:35:15 -04:00
Pavel Krajcevski
c59deae728
Add accessors for the color channels and a method for packing the information into a 32 bit RGBA int
2013-08-29 18:34:53 -04:00
Pavel Krajcevski
f822c15868
Pixel depth defaults to 8
2013-08-29 18:34:25 -04:00
Pavel Krajcevski
73f4992081
If we want a color channel with zero depth then it should default to full intensity, but we will remember that there is zero depth there.
2013-08-29 18:33:56 -04:00
Pavel Krajcevski
b3d7cd7877
Constify a few things
2013-08-29 18:32:48 -04:00
Pavel Krajcevski
40743d612b
Add a logical definition of an image for PVRTC
2013-08-29 18:31:42 -04:00
Pavel Krajcevski
d3daed8969
Add block definitions for PVRTC
2013-08-29 12:08:32 -04:00
Pavel Krajcevski
55a61b5d8d
constify some method declarations
2013-08-29 11:57:46 -04:00
Pavel Krajcevski
c5fb5ba0b1
Reorder color channels to match PVRTC spec
2013-08-29 11:57:18 -04:00
Pavel Krajcevski
53e7879742
Add PVRTC Pixel class
...
This class accepts a pixels with up to 8-bit components. With the way PVRTC is laid out, there are many different bit modes that we could run into. This lets us change between any that we'd like to deal with.
2013-08-28 17:52:45 -04:00
Pavel Krajcevski
5c80b4f373
Initial files for PVRTC encoder. Starting with a decompressor.
2013-08-27 18:25:15 -04:00