Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring cpp-libawd #9

Open
80prozent opened this issue Jan 5, 2015 · 2 comments
Open

Refactoring cpp-libawd #9

80prozent opened this issue Jan 5, 2015 · 2 comments

Comments

@80prozent
Copy link
Member

Refactor cpp-libawd

The original cpp-libawd was created by other developers, that are no longer active on this project.
I have given my best to expand the cpp-libawd to include more awd features, but I never gotten comfortable with some of the coding-style used, so i am going to make a big refactor, to be able to comfortable be working on this.

Here is a overview over features and coding-style i like to introduce for next version cpp-libawd 3.0.

For the AwayExtensionsFlashPro, I already have a modified version of the cpp-libawd.

cpp-libawd in AwayExtensionsFlashPro

A big reason for the refactor of libawd is to get back to one version that can be used both for AwayExtensionsFlashPro3dsmax and AwayExtensionsFlashPro.

List of features that the new cpp-libawd should support:

  • cross platform compatible
  • support export and import all AWD3.0 features.
  • support export and import of AWDProjects (AWD-files that share assets)
  • helper functions:
    • create texture-atlas
    • convert color-materials to texture-materials (printing colors into texture-atlas)
    • merge meshes (incl create texture-atlas and maintain animations)
    • reduce joint-per-vert for skinning data
    • remove unneeded bones from skeleton
    • better helpers for file-handling and path-manipulation
    • better geometry-utility, that allow to easily create AWDSubgeometries with custom streams
  • well documented code (documentation created with doxygen).

Coding style / Design-Descisions:

  • General: Keep in mind that the cpp-awdlib should be easily portable to python.
  • Strings: At the moment the cpp-libawd handles all strings as char-pointers. I do not like char-pointers, when there is something available like std::string. Most occurrences of char-pointer will be replaced with std::string.
  • Namespace: To provide name-clashes with other libraries, the complete code will be placed into the namespace “AWD”. [edit:]Besides the AWD namespace, functions, types and classes will be grouped by "sub-namespaces" that are all inside the AWD-namespace.
  • Lists: The cpp-libawd makes no use of std::vector. Instead c-style lists are used. Many c-style lists will be replaced with std::vector.
  • GeometryUtil: in the new version, the user will no longer need to access the geometyUtil directly. We will now feed the AWDGeometry with the data, and than call AWDGeometry.process().
  • Sources: Code will be distribute over more files, because this will make working on the cpp-awdlib easier.
  • Type-casting: The cpp-libawd often needs to cast a AWDBlock into a class derived from AWDBlock. At the moment it uses c-style casting for this. This will be replaced with cpp-style casting (dynamic_cast<>)

Comments on this decisions are highly appreciated.

@plepers
Copy link
Contributor

plepers commented Jan 10, 2015

Hi,
+1 for cross platform and custom streams.

It could be nice to also have utility to convert coordinate system, since each formats/authoring have different one (right/left handed, Y/Z up ...)

Let me know if you need help on specific features.

PS : Is there any draft of 3.0 spec somewhere?

@80prozent
Copy link
Member Author

Hey again
Ye. cross platform is one of my main concerns. Right now, i can only test on windows, but i am thinking about buying some mac-stuff. The AwayExtensionFlashPro already is working cross-platform (using a modified version of libAWD), so i think (better: hope) that the changes i am making right now will work cross platform.

+1 for the utility for converting coordinate systems, but for now i will not have time to include this extra feature. Its definitive something i want to see in future, and i will keep it in mind.

For help on specific features:
I would be glad for help, but i think it will need to wait until i got the base-structure for the libawd all setup. I am doing a lot of comments with more or less detailed todo-instructions right now, so maybe once i pushed the update, you can have a look at the source and maybe you find something where you think you will be able to jump in.

I only have one draft AWD3 -specs. This draft is specific for the new features that are added for flash-pro export.
The draft is not 100% up to date. The final specification for AWD3 will be included in the doxygen-generated documentation.
AWD3 Specs
best copy-paste the content of AWD.md in any markdown editor/reader.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants