mirror of
https://github.com/drewcassidy/quicktex.git
synced 2024-09-13 06:37:34 +00:00
Move tables to their own file to stop lagging clion to hell
This commit is contained in:
parent
085ed385df
commit
8171e0f45a
@ -1,13 +1,16 @@
|
|||||||
cmake_minimum_required(VERSION 3.17)
|
cmake_minimum_required(VERSION 3.17)
|
||||||
project(python_rgbcx)
|
project(python_rgbcx)
|
||||||
|
|
||||||
# Setup pybind
|
|
||||||
add_subdirectory(extern/pybind11)
|
|
||||||
|
|
||||||
# Make the python_rgbcx module
|
# Make the python_rgbcx module
|
||||||
add_library(python_rgbcx MODULE src/main.cpp src/rgbcx.cpp)
|
set(C_FILES
|
||||||
|
src/main.cpp
|
||||||
|
src/rgbcx.cpp
|
||||||
|
src/tables.cpp
|
||||||
|
)
|
||||||
|
add_library(python_rgbcx MODULE ${C_FILES})
|
||||||
|
|
||||||
# Link to Pybind
|
# Link to Pybind
|
||||||
|
add_subdirectory(extern/pybind11)
|
||||||
target_link_libraries(python_rgbcx PRIVATE pybind11::module pybind11::lto)
|
target_link_libraries(python_rgbcx PRIVATE pybind11::module pybind11::lto)
|
||||||
|
|
||||||
pybind11_extension(python_rgbcx)
|
pybind11_extension(python_rgbcx)
|
||||||
|
1265
src/rgbcx.cpp
1265
src/rgbcx.cpp
File diff suppressed because it is too large
Load Diff
26
src/rgbcx.h
26
src/rgbcx.h
@ -47,18 +47,19 @@
|
|||||||
//
|
//
|
||||||
// - chan0 and chan1 are the source channels. Typically they will be 0 and 1.
|
// - chan0 and chan1 are the source channels. Typically they will be 0 and 1.
|
||||||
//
|
//
|
||||||
// All encoding and decoding functions are threade-safe.
|
// All encoding and decoding functions are thread-safe.
|
||||||
//
|
//
|
||||||
// To reduce the compiled size of the encoder, set #define RGBCX_USE_SMALLER_TABLES to 1 before including this header.
|
// To reduce the compiled size of the encoder, set #define RGBCX_USE_SMALLER_TABLES to 1 before including this header.
|
||||||
//
|
//
|
||||||
#ifndef RGBCX_INCLUDE_H
|
#pragma once
|
||||||
#define RGBCX_INCLUDE_H
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <assert.h>
|
#include <cassert>
|
||||||
#include <limits.h>
|
#include <climits>
|
||||||
#include <stdint.h>
|
#include <cstdint>
|
||||||
#include <stdlib.h>
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include "tables.h"
|
||||||
|
|
||||||
// By default, the table used to accelerate cluster fit on 4 color blocks uses a 969x128 entry table.
|
// By default, the table used to accelerate cluster fit on 4 color blocks uses a 969x128 entry table.
|
||||||
// To reduce the executable size, set RGBCX_USE_SMALLER_TABLES to 1, which selects the smaller 969x32 entry table.
|
// To reduce the executable size, set RGBCX_USE_SMALLER_TABLES to 1, which selects the smaller 969x32 entry table.
|
||||||
@ -151,14 +152,6 @@ enum {
|
|||||||
cEncodeBC1EndpointSearchRoundsMask = 1023U << cEncodeBC1EndpointSearchRoundsShift,
|
cEncodeBC1EndpointSearchRoundsMask = 1023U << cEncodeBC1EndpointSearchRoundsShift,
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint32_t MIN_TOTAL_ORDERINGS = 1;
|
|
||||||
const uint32_t MAX_TOTAL_ORDERINGS3 = 32;
|
|
||||||
|
|
||||||
#if RGBCX_USE_SMALLER_TABLES
|
|
||||||
const uint32_t MAX_TOTAL_ORDERINGS4 = 32;
|
|
||||||
#else
|
|
||||||
const uint32_t MAX_TOTAL_ORDERINGS4 = 128;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// DEFAULT_TOTAL_ORDERINGS_TO_TRY is around 3x faster than libsquish at slightly higher average quality. 10-16 is a good range to start to compete against
|
// DEFAULT_TOTAL_ORDERINGS_TO_TRY is around 3x faster than libsquish at slightly higher average quality. 10-16 is a good range to start to compete against
|
||||||
// libsquish.
|
// libsquish.
|
||||||
@ -171,7 +164,7 @@ const uint32_t DEFAULT_TOTAL_ORDERINGS_TO_TRY3 = 1;
|
|||||||
// The pixels are in RGBA format, where R is first in memory. The BC1 encoder completely ignores the alpha channel (i.e. there is no punchthrough alpha
|
// The pixels are in RGBA format, where R is first in memory. The BC1 encoder completely ignores the alpha channel (i.e. there is no punchthrough alpha
|
||||||
// support). This is the recommended function to use for BC1 encoding, becuase it configures the encoder for you in the best possible way (on average). Note
|
// support). This is the recommended function to use for BC1 encoding, becuase it configures the encoder for you in the best possible way (on average). Note
|
||||||
// that the 3 color modes won't be used at all until level 5 or higher. No transparency supported, however if you set use_transparent_texels_for_black to true
|
// that the 3 color modes won't be used at all until level 5 or higher. No transparency supported, however if you set use_transparent_texels_for_black to true
|
||||||
// the encocer will use transparent selectors on very dark/black texels to reduce MSE.
|
// the encoder will use transparent selectors on very dark/black texels to reduce MSE.
|
||||||
const uint32_t MIN_LEVEL = 0, MAX_LEVEL = 18;
|
const uint32_t MIN_LEVEL = 0, MAX_LEVEL = 18;
|
||||||
void encode_bc1(uint32_t level, void *pDst, const uint8_t *pPixels, bool allow_3color, bool use_transparent_texels_for_black);
|
void encode_bc1(uint32_t level, void *pDst, const uint8_t *pPixels, bool allow_3color, bool use_transparent_texels_for_black);
|
||||||
|
|
||||||
@ -210,7 +203,6 @@ bool unpack_bc3(const void *pBlock_bits, void *pPixels, bc1_approx_mode mode = b
|
|||||||
|
|
||||||
void unpack_bc5(const void *pBlock_bits, void *pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4);
|
void unpack_bc5(const void *pBlock_bits, void *pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4);
|
||||||
} // namespace rgbcx
|
} // namespace rgbcx
|
||||||
#endif // #ifndef RGBCX_INCLUDE_H
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
1308
src/tables.cpp
Normal file
1308
src/tables.cpp
Normal file
File diff suppressed because it is too large
Load Diff
66
src/tables.h
Normal file
66
src/tables.h
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// rgbcx.h v1.12
|
||||||
|
// High-performance scalar BC1-5 encoders. Public Domain or MIT license (you choose - see below), written by Richard Geldreich 2020 <richgel99@gmail.com>.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
const uint32_t MIN_TOTAL_ORDERINGS = 1;
|
||||||
|
const uint32_t MAX_TOTAL_ORDERINGS3 = 32;
|
||||||
|
|
||||||
|
#if RGBCX_USE_SMALLER_TABLES
|
||||||
|
const uint32_t MAX_TOTAL_ORDERINGS4 = 32;
|
||||||
|
#else
|
||||||
|
const uint32_t MAX_TOTAL_ORDERINGS4 = 128;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const uint32_t NUM_UNIQUE_TOTAL_ORDERINGS4 = 969;
|
||||||
|
extern const uint8_t g_unique_total_orders4[NUM_UNIQUE_TOTAL_ORDERINGS4][4];
|
||||||
|
|
||||||
|
const uint32_t NUM_UNIQUE_TOTAL_ORDERINGS3 = 153;
|
||||||
|
extern const uint8_t g_unique_total_orders3[NUM_UNIQUE_TOTAL_ORDERINGS3][3];
|
||||||
|
|
||||||
|
extern const uint16_t g_best_total_orderings4[NUM_UNIQUE_TOTAL_ORDERINGS4][MAX_TOTAL_ORDERINGS4];
|
||||||
|
|
||||||
|
extern const uint8_t g_best_total_orderings3[NUM_UNIQUE_TOTAL_ORDERINGS3][32];
|
||||||
|
|
||||||
|
/*
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
This software is available under 2 licenses -- choose whichever you prefer.
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
ALTERNATIVE A - MIT License
|
||||||
|
Copyright(c) 2020 Richard Geldreich, Jr.
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files(the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions :
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
ALTERNATIVE B - Public Domain(www.unlicense.org)
|
||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||||
|
software, either in source code form or as a compiled binary, for any purpose,
|
||||||
|
commercial or non - commercial, and by any means.
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||||
|
software dedicate any and all copyright interest in the software to the public
|
||||||
|
domain.We make this dedication for the benefit of the public at large and to
|
||||||
|
the detriment of our heirs and successors.We intend this dedication to be an
|
||||||
|
overt act of relinquishment in perpetuity of all present and future rights to
|
||||||
|
this software under copyright law.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||||
|
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*/
|
Loading…
Reference in New Issue
Block a user