Fix:Use correct encoding

This commit is contained in:
Kim Kulling 2023-03-01 21:40:45 +01:00
parent a1aace74e5
commit 1092f0d94e
12 changed files with 49 additions and 205 deletions

View File

@ -43,6 +43,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef AI_BASE64_HPP_INC
#define AI_BASE64_HPP_INC
#include <assimp/defs.h>
#include <stdint.h>
#include <vector>
#include <string>
@ -54,35 +56,35 @@ namespace Base64 {
/// @param in The UTF-64 buffer.
/// @param inLength The size of the buffer
/// @param out The encoded ASCII string.
void Encode(const uint8_t *in, size_t inLength, std::string &out);
ASSIMP_API void Encode(const uint8_t *in, size_t inLength, std::string &out);
/// @brief Will encode the given character buffer from UTF64 to ASCII.
/// @param in A vector, which contains the buffer for encoding.
/// @param out The encoded ASCII string.
void Encode(const std::vector<uint8_t>& in, std::string &out);
ASSIMP_API void Encode(const std::vector<uint8_t> &in, std::string &out);
/// @brief Will encode the given character buffer from UTF64 to ASCII.
/// @param in A vector, which contains the buffer for encoding.
/// @return The encoded ASCII string.
std::string Encode(const std::vector<uint8_t>& in);
ASSIMP_API std::string Encode(const std::vector<uint8_t> &in);
/// @brief Will decode the given character buffer from ASCII to UTF64.
/// @param in The ASCII buffer to decode.
/// @param inLength The size of the buffer.
/// @param out The decoded buffer.
/// @return The new buffer size.
size_t Decode(const char *in, size_t inLength, uint8_t *&out);
ASSIMP_API size_t Decode(const char *in, size_t inLength, uint8_t *&out);
/// @brief Will decode the given character buffer from ASCII to UTF64.
/// @param in The ASCII buffer to decode as a std::string.
/// @param out The decoded buffer.
/// @return The new buffer size.
size_t Decode(const std::string& in, std::vector<uint8_t>& out);
ASSIMP_API size_t Decode(const std::string &in, std::vector<uint8_t> &out);
/// @brief Will decode the given character buffer from ASCII to UTF64.
/// @param in The ASCII string.
/// @return The decoded buffer in a vector.
std::vector<uint8_t> Decode(const std::string& in);
ASSIMP_API std::vector<uint8_t> Decode(const std::string &in);
} // namespace Base64
} // namespace Assimp

View File

@ -1,52 +0,0 @@
/*
---------------------------------------------------------------------------
Open Asset Import Library (assimp)
---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the following
conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------
*/
#include "UTFConverter.h"
namespace AssimpSamples {
namespace SharedCode {
//typename UTFConverter::UTFConverterImpl UTFConverter::impl_;
}
}

View File

@ -1,103 +0,0 @@
/*
---------------------------------------------------------------------------
Open Asset Import Library (assimp)
---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the following
conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------
*/
#ifndef ASSIMP_SAMPLES_SHARED_CODE_UTFCONVERTER_H
#define ASSIMP_SAMPLES_SHARED_CODE_UTFCONVERTER_H
#include <string>
#include <vector>
#ifdef ASSIMP_USE_HUNTER
#include <utf8.h>
#else
#include "../contrib/utf8cpp/source/utf8.h"
#endif
namespace AssimpSamples {
namespace SharedCode {
// Used to convert between multibyte and unicode strings.
class UTFConverter {
public:
//utf8::utf16to8(start, end, back_inserter(str));
UTFConverter(const char* s) : s_(s), ws_() {
std::vector<unsigned char> str;
utf8::utf8to16(s, s + std::strlen(s) + 1, back_inserter(str));
}
UTFConverter(const wchar_t* s) : s_(),ws_(s) {
std::vector<wchar_t> str;
utf8::utf16to8(s, s + ws_.size() + 1, back_inserter(str));
}
UTFConverter(const std::string& s) : s_(s), ws_() {
std::vector<unsigned char> str;
utf8::utf8to16(s.c_str(), s.c_str() + s.size() + 1, back_inserter(str));
}
UTFConverter(const std::wstring& s) : s_(), ws_(s) {
std::vector<wchar_t> str;
utf8::utf16to8(s.c_str(), s.c_str() + ws_.size() + 1, back_inserter(str));
}
inline const char* c_str() const {
return s_.c_str();
}
inline const std::string& str() const {
return s_;
}
inline const wchar_t* c_wstr() const {
return ws_.c_str();
}
private:
std::string s_;
std::wstring ws_;
};
}
}
#endif // ASSIMP_SAMPLES_SHARED_CODE_UTFCONVERTER_H

View File

@ -33,8 +33,6 @@ ADD_EXECUTABLE( assimp_simpletextureddirectx11 WIN32
#SimpleTexturedDirectx11/VertexShader.hlsl
SimpleTexturedDirectx11/main.cpp
SimpleTexturedDirectx11/SafeRelease.hpp
${SAMPLES_SHARED_CODE_DIR}/UTFConverter.cpp
${SAMPLES_SHARED_CODE_DIR}/UTFConverter.h
)
TARGET_USE_COMMON_OUTPUT_DIRECTORY(assimp_simpletextureddirectx11)

View File

@ -21,8 +21,12 @@
#include <dxgi1_2.h>
#include <DirectXMath.h>
#include <d3dcompiler.h>
#ifdef ASSIMP_USE_HUNTER
#include <utf8.h>
#else
#include "../contrib/utf8cpp/source/utf8.h"
#endif
#include "ModelLoader.h"
#include "UTFConverter.h"
#include "SafeRelease.hpp"
#ifdef _MSC_VER
@ -33,7 +37,6 @@
#endif // _MSC_VER
using namespace DirectX;
using namespace AssimpSamples::SharedCode;
#define VERTEX_SHADER_FILE L"VertexShader.hlsl"
#define PIXEL_SHADER_FILE L"PixelShader.hlsl"
@ -154,8 +157,14 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/,
}
// Retrieve the model file path.
g_ModelPath = UTFConverter(argv[1]).str();
std::wstring filename(argv[1]);
char *targetStart = new char[filename.size()+1];
memset(targetStart, '\0', filename.size() + 1);
utf8::utf16to8(filename.c_str(), filename.c_str() + filename.size(), targetStart);
g_ModelPath = targetStart;
delete[] targetStart;
free_command_line_allocated_memory();
WNDCLASSEX wc;
@ -511,9 +520,9 @@ void InitPipeline()
{
ID3DBlob *VS, *PS;
if(FAILED(CompileShaderFromFile(SHADER_PATH VERTEX_SHADER_FILE, 0, "main", "vs_4_0", &VS)))
Throwanerror(UTFConverter(L"Failed to compile shader from file " VERTEX_SHADER_FILE).c_str());
Throwanerror("Failed to compile shader from file");
if(FAILED(CompileShaderFromFile(SHADER_PATH PIXEL_SHADER_FILE, 0, "main", "ps_4_0", &PS)))
Throwanerror(UTFConverter(L"Failed to compile shader from file " PIXEL_SHADER_FILE).c_str());
Throwanerror("Failed to compile shader from file ");
dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), nullptr, &pVS);
dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), nullptr, &pPS);

View File

@ -30,8 +30,6 @@ LINK_DIRECTORIES(
ADD_EXECUTABLE( assimp_simpletexturedogl WIN32
SimpleTexturedOpenGL/src/model_loading.cpp
${SAMPLES_SHARED_CODE_DIR}/UTFConverter.cpp
${SAMPLES_SHARED_CODE_DIR}/UTFConverter.h
)
TARGET_USE_COMMON_OUTPUT_DIRECTORY(assimp_simpletexturedogl)

View File

@ -55,12 +55,6 @@ AnimEvaluator::AnimEvaluator(const aiAnimation *pAnim) :
mLastPositions.resize(pAnim->mNumChannels, std::make_tuple(0, 0, 0));
}
// ------------------------------------------------------------------------------------------------
// Destructor.
AnimEvaluator::~AnimEvaluator() {
// empty
}
// ------------------------------------------------------------------------------------------------
// Evaluates the animation tracks for a given time stamp.
void AnimEvaluator::Evaluate(double pTime) {

View File

@ -66,7 +66,7 @@ public:
AnimEvaluator(const aiAnimation *pAnim);
/// @brief The class destructor.
~AnimEvaluator();
~AnimEvaluator() = default;
/// @brief Evaluates the animation tracks for a given time stamp.
/// The calculated pose can be retrieved as an array of transformation

View File

@ -77,6 +77,13 @@ public:
pcScene = NULL;
}
// set the normal set to be used
void SetNormalSet(unsigned int iSet);
// flip all normal vectors
void FlipNormals();
void FlipNormalsInt();
//---------------------------------------------------------------
// default vertex data structure
// (even if tangents, bitangents or normals aren't
@ -221,16 +228,8 @@ public:
// Specifies the normal set to be used
unsigned int iNormalSet;
// ------------------------------------------------------------------
// set the normal set to be used
void SetNormalSet(unsigned int iSet);
// ------------------------------------------------------------------
// flip all normal vectors
void FlipNormals();
void FlipNormalsInt();
};
} // namespace AssimpView
#endif // !! IG

View File

@ -175,33 +175,29 @@ VOID WINAPI FillFunc(D3DXVECTOR4* pOut,
pOut->x = pOut->y = 1.0f;
pOut->z = 0.0f;
}
return;
}
//-------------------------------------------------------------------------------
int CMaterialManager::UpdateSpecularMaterials()
{
if (g_pcAsset && g_pcAsset->pcScene)
{
for (unsigned int i = 0; i < g_pcAsset->pcScene->mNumMeshes;++i)
{
if (aiShadingMode_Phong == g_pcAsset->apcMeshes[i]->eShadingMode)
{
int CMaterialManager::UpdateSpecularMaterials() {
if (g_pcAsset && g_pcAsset->pcScene) {
for (unsigned int i = 0; i < g_pcAsset->pcScene->mNumMeshes;++i) {
if (aiShadingMode_Phong == g_pcAsset->apcMeshes[i]->eShadingMode) {
this->DeleteMaterial(g_pcAsset->apcMeshes[i]);
this->CreateMaterial(g_pcAsset->apcMeshes[i],g_pcAsset->pcScene->mMeshes[i]);
}
}
}
return 1;
}
return 1;
}
//-------------------------------------------------------------------------------
int CMaterialManager::SetDefaultTexture(IDirect3DTexture9** p_ppiOut)
{
int CMaterialManager::SetDefaultTexture(IDirect3DTexture9** p_ppiOut) {
if (sDefaultTexture) {
sDefaultTexture->AddRef();
*p_ppiOut = sDefaultTexture;
return 1;
}
if(FAILED(g_piDevice->CreateTexture(
256,
256,

View File

@ -145,9 +145,7 @@ float g_fLoadTime = 0.0f;
// The loader thread loads the asset while the progress dialog displays the
// smart progress bar
//-------------------------------------------------------------------------------
DWORD WINAPI LoadThreadProc(LPVOID lpParameter) {
UNREFERENCED_PARAMETER(lpParameter);
DWORD WINAPI LoadThreadProc(LPVOID) {
// get current time
double fCur = (double)timeGetTime();
@ -367,7 +365,7 @@ int CalculateBounds(aiNode *piNode, aiVector3D *p_avOut, const aiMatrix4x4 &piMa
// The function calculates the boundaries of the mesh and modifies the
// global world transformation matrix according to the aset AABB
//-------------------------------------------------------------------------------
int ScaleAsset(void) {
int ScaleAsset() {
aiVector3D aiVecs[2] = { aiVector3D(1e10f, 1e10f, 1e10f),
aiVector3D(-1e10f, -1e10f, -1e10f) };
@ -521,8 +519,7 @@ int CreateAssetData() {
}
} else {
// create 16 bit index buffer
if (FAILED(g_piDevice->CreateIndexBuffer(2 *
numIndices,
if (FAILED(g_piDevice->CreateIndexBuffer(2 * numIndices,
D3DUSAGE_WRITEONLY | dwUsage,
D3DFMT_INDEX16,
D3DPOOL_DEFAULT,

View File

@ -98,6 +98,12 @@ namespace AssimpView {
//-------------------------------------------------------------------------------
// Function prototypes
//-------------------------------------------------------------------------------
class AssimpVew {
public:
AssimpVew();
~AssimpVew();
};
int InitD3D(void);
int ShutdownD3D(void);
int CreateDevice(bool p_bMultiSample, bool p_bSuperSample, bool bHW = true);