Merge pull request #99 from mtavenrath/usability

Improve usability
This commit is contained in:
asuessenbach 2016-04-12 13:43:17 +02:00
commit 29e7f3ae6b
4 changed files with 3353 additions and 3330 deletions

View File

@ -28,6 +28,14 @@ cmake_minimum_required(VERSION 3.2)
project(VkCppGenerator) project(VkCppGenerator)
file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Docs/src/spec/vk.xml vk_spec)
string(REPLACE "\\" "\\\\" vk_spec ${vk_spec})
add_definitions(-DVK_SPEC="${vk_spec}")
file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vulkan/vk_cpp.hpp vk_cpp)
string(REPLACE "\\" "\\\\" vk_cpp ${vk_cpp})
add_definitions(-DVK_CPP="${vk_cpp}")
set(HEADERS set(HEADERS
) )

View File

@ -136,7 +136,7 @@ device.createImage(&ci, allocator, &image);
# Enhancements beyond native Vulkan # Enhancements beyond native Vulkan
To provide a more object oriented feeling we're providing classes for each handle which include all Vulkan functions where the first To provide a more object oriented feeling we're providing classes for each handle which include all Vulkan functions where the first
parameter matches the handle. In addition to this we made a few changes to the signatures of the member functions parameter matches the handle. In addition to this we made a few changes to the signatures of the member functions
* To enable the enhanced mode put ```#define VKCPP_ENHANCED_MODE``` before including ```vk_cpp.h``` * To disable the enhanced mode put ```#define VKCPP_DISABLE_ENHANCED_MODE``` before including ```vk_cpp.h```
* ```(count, T*)``` has been replaced by ```std::vector<T>``` * ```(count, T*)``` has been replaced by ```std::vector<T>```
* ```const char *``` has been replaced by ```std::string ``` * ```const char *``` has been replaced by ```std::string ```
* ```T const*``` has been replaced by ```T const &``` to allow temporary objects. This is useful to pass small structures like ```vk::ClearColorValue``` or ```vk::Extent*``` * ```T const*``` has been replaced by ```T const &``` to allow temporary objects. This is useful to pass small structures like ```vk::ClearColorValue``` or ```vk::Extent*```

View File

@ -35,6 +35,7 @@
#include <sstream> #include <sstream>
#include <string> #include <string>
#include <vector> #include <vector>
#include <exception>
#include <tinyxml2.h> #include <tinyxml2.h>
@ -2095,7 +2096,7 @@ void writeStructConstructor( std::ofstream & ofs, std::string const& name, std::
if (!noDefault) if (!noDefault)
{ {
// if there's a default for all memeber, provide a default constructor // if there's a default for all member, provide a default constructor
ofs << " " << name << "()" << std::endl ofs << " " << name << "()" << std::endl
<< " : " << name << "( "; << " : " << name << "( ";
bool listedArgument = false; bool listedArgument = false;
@ -2311,9 +2312,9 @@ void writeTypeCommand( std::ofstream & ofs, DependencyData const& dependencyData
writeTypeCommandStandard(ofs, " ", dependencyData.name, dependencyData, commandData, vkTypes); writeTypeCommandStandard(ofs, " ", dependencyData.name, dependencyData, commandData, vkTypes);
ofs << std::endl ofs << std::endl
<< "#ifdef VKCPP_ENHANCED_MODE" << std::endl; << "#ifndef VKCPP_DISABLE_ENHANCED_MODE" << std::endl;
writeTypeCommandEnhanced(ofs, " ", "", dependencyData.name, dependencyData, commandData, vkTypes); writeTypeCommandEnhanced(ofs, " ", "", dependencyData.name, dependencyData, commandData, vkTypes);
ofs << "#endif /*VKCPP_ENHANCED_MODE*/" << std::endl ofs << "#endif /*VKCPP_DISABLE_ENHANCED_MODE*/" << std::endl
<< std::endl; << std::endl;
} }
} }
@ -2563,18 +2564,18 @@ void writeTypeHandle(std::ofstream & ofs, VkData const& vkData, DependencyData c
bool hasPointers = hasPointerArguments(cit->second); bool hasPointers = hasPointerArguments(cit->second);
if (!hasPointers) if (!hasPointers)
{ {
ofs << "#ifndef VKCPP_ENHANCED_MODE" << std::endl; ofs << "#ifdef VKCPP_DISABLE_ENHANCED_MODE" << std::endl;
} }
writeTypeCommandStandard(ofs, " ", functionName, *dep, cit->second, vkData.vkTypes); writeTypeCommandStandard(ofs, " ", functionName, *dep, cit->second, vkData.vkTypes);
if (!hasPointers) if (!hasPointers)
{ {
ofs << "#endif /*!VKCPP_ENHANCED_MODE*/" << std::endl; ofs << "#endif /*!VKCPP_DISABLE_ENHANCED_MODE*/" << std::endl;
} }
ofs << std::endl ofs << std::endl
<< "#ifdef VKCPP_ENHANCED_MODE" << std::endl; << "#ifndef VKCPP_DISABLE_ENHANCED_MODE" << std::endl;
writeTypeCommandEnhanced(ofs, " ", className, functionName, *dep, cit->second, vkData.vkTypes); writeTypeCommandEnhanced(ofs, " ", className, functionName, *dep, cit->second, vkData.vkTypes);
ofs << "#endif /*VKCPP_ENHANCED_MODE*/" << std::endl; ofs << "#endif /*VKCPP_DISABLE_ENHANCED_MODE*/" << std::endl;
if (i < handle.commands.size() - 1) if (i < handle.commands.size() - 1)
{ {
@ -2798,9 +2799,14 @@ void writeTypesafeCheck(std::ofstream & ofs, std::string const& typesafeCheck)
int main( int argc, char **argv ) int main( int argc, char **argv )
{ {
try {
tinyxml2::XMLDocument doc; tinyxml2::XMLDocument doc;
tinyxml2::XMLError error = doc.LoadFile( argv[1] ); std::string filename = (argc == 1) ? VK_SPEC : argv[1];
std::cout << "Loading vk.xml from " << filename << std::endl;
std::cout << "Writing vk_cpp.hpp to " << VK_CPP << std::endl;
tinyxml2::XMLError error = doc.LoadFile(filename.c_str());
if (error != tinyxml2::XML_SUCCESS) if (error != tinyxml2::XML_SUCCESS)
{ {
std::cout << "VkGenerate: failed to load file " << argv[1] << " . Error code: " << error << std::endl; std::cout << "VkGenerate: failed to load file " << argv[1] << " . Error code: " << error << std::endl;
@ -2853,7 +2859,7 @@ int main( int argc, char **argv )
std::map<std::string, std::string> defaultValues; std::map<std::string, std::string> defaultValues;
createDefaults(vkData, defaultValues); createDefaults(vkData, defaultValues);
std::ofstream ofs( "vk_cpp.h" ); std::ofstream ofs(VK_CPP);
ofs << nvidiaLicenseHeader << std::endl ofs << nvidiaLicenseHeader << std::endl
<< vkData.vulkanLicenseHeader << std::endl << vkData.vulkanLicenseHeader << std::endl
<< std::endl << std::endl
@ -2868,9 +2874,9 @@ int main( int argc, char **argv )
<< "#include <string>" << std::endl << "#include <string>" << std::endl
<< "#include <system_error>" << std::endl << "#include <system_error>" << std::endl
<< "#include <vulkan/vulkan.h>" << std::endl << "#include <vulkan/vulkan.h>" << std::endl
<< "#ifdef VKCPP_ENHANCED_MODE" << std::endl << "#ifndef VKCPP_DISABLE_ENHANCED_MODE" << std::endl
<< "# include <vector>" << std::endl << "# include <vector>" << std::endl
<< "#endif /*VKCPP_ENHANCED_MODE*/" << std::endl << "#endif /*VKCPP_DISABLE_ENHANCED_MODE*/" << std::endl
<< std::endl; << std::endl;
writeVersionCheck(ofs, vkData.version); writeVersionCheck(ofs, vkData.version);
@ -2907,3 +2913,12 @@ int main( int argc, char **argv )
<< std::endl << std::endl
<< "#endif" << std::endl; << "#endif" << std::endl;
} }
catch (std::exception e)
{
std::cout << "caught exception: " << e.what() << std::endl;
}
catch (...)
{
std::cout << "caught unknown exception" << std::endl;
}
}

File diff suppressed because it is too large Load Diff