Added command-line utility to cmake project

This commit is contained in:
Chuck Walbourn 2019-07-12 00:57:13 -07:00
Родитель 98684ac2fa
Коммит 3d9065ff83
10 изменённых файлов: 87 добавлений и 83 удалений

2
.gitignore поставляемый
Просмотреть файл

@ -26,4 +26,4 @@ Release
x64 x64
/Tests /Tests
/wiki /wiki
/DirectXMesh/out /out

69
CMakeLists.txt Normal file
Просмотреть файл

@ -0,0 +1,69 @@
# DirectXMesh geometry Library
#
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
#
# http://go.microsoft.com/fwlink/?LinkID=324981
cmake_minimum_required (VERSION 3.8)
project (DirectXMesh_CMake LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/CMake")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/CMake")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/CMake")
set(WarningsLib "-Wall" "-Wpedantic" "-Wextra")
set(WarningsEXE ${WarningsLib} "-Wno-c++98-compat" "-Wno-c++98-compat-pedantic" "-Wno-double-promotion" "-Wno-exit-time-destructors" "-Wno-missing-prototypes")
add_library (directxmesh STATIC
DirectXMesh/DirectXMesh.h
DirectXMesh/DirectXMeshP.h
DirectXMesh/scoped.h
DirectXMesh/DirectXMeshAdjacency.cpp
DirectXMesh/DirectXMeshClean.cpp
DirectXMesh/DirectXMeshGSAdjacency.cpp
DirectXMesh/DirectXMeshNormals.cpp
DirectXMesh/DirectXMeshOptimize.cpp
DirectXMesh/DirectXMeshOptimizeLRU.cpp
DirectXMesh/DirectXMeshOptimizeTVC.cpp
DirectXMesh/DirectXMeshRemap.cpp
DirectXMesh/DirectXMeshTangentFrame.cpp
DirectXMesh/DirectXMeshUtil.cpp
DirectXMesh/DirectXMeshValidate.cpp
DirectXMesh/DirectXMeshVBReader.cpp
DirectXMesh/DirectXMeshVBWriter.cpp
DirectXMesh/DirectXMeshWeldVertices.cpp
)
target_include_directories( directxmesh PUBLIC DirectXMesh )
target_compile_options( directxmesh PRIVATE /fp:fast )
add_executable(meshconvert
meshconvert/meshconvert.cpp
meshconvert/MeshOBJ.cpp
meshconvert/Mesh.h
meshconvert/Mesh.cpp
meshconvert/SDKMesh.h)
target_include_directories(meshconvert PUBLIC MeshConvert Utilities)
target_link_libraries(meshconvert directxmesh)
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
target_compile_options( directxmesh PRIVATE ${WarningsLib} )
target_compile_options( meshconvert PRIVATE ${WarningsEXE} )
if (${CMAKE_SIZEOF_VOID_P} EQUAL "4")
target_compile_options( directxmesh PRIVATE /arch:SSE2 )
target_compile_options( meshconvert PRIVATE /arch:SSE2 )
endif()
endif()
if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
target_compile_options( directxmesh PRIVATE /Wall /permissive- /Zc:__cplusplus )
target_compile_options( meshconvert PRIVATE /Wall /permissive- /Zc:__cplusplus )
endif()
# Windows 10 is used here to build the DirectX 12 code paths as well as 11
add_compile_definitions(_UNICODE UNICODE _WIN32_WINNT=0x0A00)

Просмотреть файл

Просмотреть файл

@ -1,52 +0,0 @@
# DirectXMesh geometry Library
#
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
#
# http://go.microsoft.com/fwlink/?LinkID=324981
cmake_minimum_required (VERSION 3.8)
project (DirectXMesh_CMake LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/CMake")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/CMake")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/CMake")
add_library (directxmesh STATIC
DirectXMesh.h
DirectXMeshP.h
scoped.h
DirectXMeshAdjacency.cpp
DirectXMeshClean.cpp
DirectXMeshGSAdjacency.cpp
DirectXMeshNormals.cpp
DirectXMeshOptimize.cpp
DirectXMeshOptimizeLRU.cpp
DirectXMeshOptimizeTVC.cpp
DirectXMeshRemap.cpp
DirectXMeshTangentFrame.cpp
DirectXMeshUtil.cpp
DirectXMeshValidate.cpp
DirectXMeshVBReader.cpp
DirectXMeshVBWriter.cpp
DirectXMeshWeldVertices.cpp
)
target_compile_options( directxmesh PRIVATE /fp:fast )
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
target_compile_options( directxmesh PRIVATE -Wall -Wpedantic -Wextra )
if (${CMAKE_SIZEOF_VOID_P} EQUAL "4")
target_compile_options( directxmesh PRIVATE /arch:SSE2 )
endif()
endif()
if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
target_compile_options( directxmesh PRIVATE /Wall /permissive- /Zc:__cplusplus )
endif()
# Windows 10 is used here to build the DirectX 12 code paths as well as 11
add_compile_definitions(_UNICODE UNICODE _WIN32_WINNT=0x0A00)

Просмотреть файл

@ -96,7 +96,7 @@
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include "directxmesh.h" #include "DirectXMesh.h"
#include "scoped.h" #include "scoped.h"

Просмотреть файл

@ -15,7 +15,6 @@
#define NOMINMAX #define NOMINMAX
#define NODRAWTEXT #define NODRAWTEXT
#define NOGDI #define NOGDI
#define NOBITMAP
#define NOMCX #define NOMCX
#define NOSERVICE #define NOSERVICE
#define NOHELP #define NOHELP

Просмотреть файл

@ -9,7 +9,7 @@
// http://go.microsoft.com/fwlink/?LinkID=324981 // http://go.microsoft.com/fwlink/?LinkID=324981
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
#include <windows.h> #include <Windows.h>
#include <memory> #include <memory>
#include <string> #include <string>
@ -23,9 +23,9 @@
#include <d3d11_1.h> #include <d3d11_1.h>
#endif #endif
#include <directxmath.h> #include <DirectXMath.h>
#include "directxmesh.h" #include "DirectXMesh.h"
class Mesh class Mesh
{ {

Просмотреть файл

@ -15,7 +15,6 @@
#define NOMINMAX #define NOMINMAX
#define NODRAWTEXT #define NODRAWTEXT
#define NOGDI #define NOGDI
#define NOBITMAP
#define NOMCX #define NOMCX
#define NOSERVICE #define NOSERVICE
#define NOHELP #define NOHELP

Просмотреть файл

@ -15,7 +15,6 @@
#define NOMINMAX #define NOMINMAX
#define NODRAWTEXT #define NODRAWTEXT
#define NOGDI #define NOGDI
#define NOBITMAP
#define NOMCX #define NOMCX
#define NOSERVICE #define NOSERVICE
#define NOHELP #define NOHELP
@ -124,7 +123,9 @@ namespace
typedef std::unique_ptr<void, find_closer> ScopedFindHandle; typedef std::unique_ptr<void, find_closer> ScopedFindHandle;
#ifdef __PREFAST__
#pragma prefast(disable : 26018, "Only used with static internal arrays") #pragma prefast(disable : 26018, "Only used with static internal arrays")
#endif
DWORD LookupByName(const wchar_t *pName, const SValue *pArray) DWORD LookupByName(const wchar_t *pName, const SValue *pArray)
{ {
@ -140,20 +141,6 @@ namespace
} }
const wchar_t* LookupByValue(DWORD pValue, const SValue *pArray)
{
while (pArray->pName)
{
if (pValue == pArray->dwValue)
return pArray->pName;
pArray++;
}
return L"";
}
void SearchForFiles(const wchar_t* path, std::list<SConversion>& files, bool recursive) void SearchForFiles(const wchar_t* path, std::list<SConversion>& files, bool recursive)
{ {
// Process files // Process files
@ -280,7 +267,9 @@ extern HRESULT LoadFromOBJ(const wchar_t* szFilename, std::unique_ptr<Mesh>& inM
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Entry-point // Entry-point
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
#ifdef __PREFAST__
#pragma prefast(disable : 28198, "Command-line tool, frees all memory on exit") #pragma prefast(disable : 28198, "Command-line tool, frees all memory on exit")
#endif
int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
{ {
@ -547,8 +536,8 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
return 1; return 1;
} }
assert(inMesh->GetPositionBuffer() != 0); assert(inMesh->GetPositionBuffer() != nullptr);
assert(inMesh->GetIndexBuffer() != 0); assert(inMesh->GetIndexBuffer() != nullptr);
wprintf(L"\n%zu vertices, %zu faces", nVerts, nFaces); wprintf(L"\n%zu vertices, %zu faces", nVerts, nFaces);
@ -680,7 +669,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
// Perform attribute and vertex-cache optimization // Perform attribute and vertex-cache optimization
if (dwOptions & (1 << OPT_OPTIMIZE)) if (dwOptions & (1 << OPT_OPTIMIZE))
{ {
assert(inMesh->GetAdjacencyBuffer() != 0); assert(inMesh->GetAdjacencyBuffer() != nullptr);
float acmr, atvr; float acmr, atvr;
ComputeVertexCacheMissRate(inMesh->GetIndexBuffer(), nFaces, nVerts, OPTFACES_V_DEFAULT, acmr, atvr); ComputeVertexCacheMissRate(inMesh->GetIndexBuffer(), nFaces, nVerts, OPTFACES_V_DEFAULT, acmr, atvr);

Просмотреть файл

@ -24,7 +24,7 @@
#define NOHELP #define NOHELP
#pragma warning(pop) #pragma warning(pop)
#include <windows.h> #include <Windows.h>
#include <algorithm> #include <algorithm>
#include <fstream> #include <fstream>
@ -34,8 +34,8 @@
#include <stdint.h> #include <stdint.h>
#include <directxmath.h> #include <DirectXMath.h>
#include <directxcollision.h> #include <DirectXCollision.h>
template<class index_t> template<class index_t>
class WaveFrontReader class WaveFrontReader
@ -160,7 +160,7 @@ public:
else if (iPosition < 0) else if (iPosition < 0)
{ {
// Negative values are relative indices // Negative values are relative indices
vertexIndex = uint32_t(positions.size() + iPosition); vertexIndex = uint32_t(ptrdiff_t(positions.size()) + iPosition);
} }
else else
{ {
@ -191,7 +191,7 @@ public:
else if (iTexCoord < 0) else if (iTexCoord < 0)
{ {
// Negative values are relative indices // Negative values are relative indices
coordIndex = uint32_t(texCoords.size() + iTexCoord); coordIndex = uint32_t(ptrdiff_t(texCoords.size()) + iTexCoord);
} }
else else
{ {
@ -221,7 +221,7 @@ public:
else if (iNormal < 0) else if (iNormal < 0)
{ {
// Negative values are relative indices // Negative values are relative indices
normIndex = uint32_t(normals.size() + iNormal); normIndex = uint32_t(ptrdiff_t(normals.size()) + iNormal);
} }
else else
{ {