niftools / nifskope Goto Github PK
View Code? Open in Web Editor NEWA git repository for nifskope.
Home Page: http://www.niftools.org
License: Other
A git repository for nifskope.
Home Page: http://www.niftools.org
License: Other
As a user I expect to see all the blocks available in the nif file.
Default behaviour is to hide the header/footer blocks.
A user has to use the Reset Details button before they are presented in the UI.
Info: http://niftools.sourceforge.net/forum/viewtopic.php?f=4&t=3363&start=0#p23326
For discussion and tracking of refactor issues.
#28 Qt 5 Port READY
#36 FSEngine Refactor READY
#31 Project Restructure READY
#27 NifSkope.pro file cleanup READY
#24 Separate UI display from logic
#13 Settings Restructure
#11 Revert change which undid separate registry settings per version
#40 Installer make target (NSIS, or alternative)
#41 Post-Qt4 Port: Code Review, Refactor
QT_NO_DEBUG
) and instead leaving qDebug() where ever we please and opting to define QT_NO_DEBUG_OUTPUT
or QT_NO_WARNING_OUTPUT
for release builds in NifSkope.pro, which compiles away the debug statements.Large tooltips like enum type descriptions can take a long time to load, and they are computed continuously as you hover. Take for example the Havok collision layers or materials. In the Type column, hover over the enum type and it will take a long time to load, and it never loads the same way twice. It's pretty much impossible to read and if it loads well, it might still disappear before you can even read it. I've already refactored the method some to deal with it, but it's not helping, as the sluggishness seems to stem from the UI having to parse such a large HTML table. The method is QString NifValue::typeDescription( const QString & typId )
in nifvalue.cpp
I propose a few options:
We could then keep the problematic descriptions from popping up in a tooltip and to view the descriptions you need to use another method.
Enum type descriptions are unordered too, because they are stored in a QHash.
[WIP]
[WIP]
[WIP]
The Skyrim Material on bhkMoppBvTreeShape
is not being populated correctly on load. It has a value of 0. When selecting a new value, the enum mapping remains (it says SKY_HAV_...) and persists even after things like Reset Block Details.
Additionally, the Skyrim Material on the sub-block bhkCompressedMeshShape
does not show the enum mapping, but the integer. When double-clicking to activate the edit box and clicking away, it resets this value to 0.
Also, when double clicking, the box is completely blank (why it likely resets to 0), until you click on the dropdown arrow to the right. If an Enum value is correctly displayed in the field, double clicking to edit will show the right index in the drop down (the current enum).
Examples:
~\meshes\architecture\orclonghouse\orcawning01.nif
~\meshes\architecture\farmhouse\farmhouse01.nif
bhkMoppBvTreeShape
blanking to 0 on NIF load.INVALID
bhkCompressedMeshShape
.INVALID
CONFIRMED
Many more render settings can be exposed to the user. Just off the top of my head:
I have already done two of these in misc. builds. I also just discovered that FPS is strangely set to 25, which must be due to European developers. This FPS limit should either be configurable or dependent on refresh rate.
Also, not just limited to Render > Settings, there are many other things that can be toggled by the user to ease NIF editing:
[1]: In addition to or in lieu of setting in Render > Settings
[2]: For visualizing diffuse maps and vertex colors more clearly
[3]: For visualizing mesh interiors and collision coverage
[4]: For visualizing blocks hidden by others. Note: This currently requires at least one mesh to be visible or the view stops rendering. This can be fixed.
[5]: Since the shader pipeline appears broken to me (it's always fixed function) at least temporarily allow user to view normal maps, etc. in place of diffuse map.
Like BSBound
(glnode.cpp#L1667) we should think about displaying these bounding boxes. Currently BSBound is linked with Havok, though I don't know if that makes the most sense.
Instead a separate "Draw Bounds" option could be created, because many many meshes have a MultiBoundOBB which encompass the entire mesh, and linking this to "Draw Havok" would be a nuisance.
This would help visualize and give the ability to create or improve on bounds.
drawHavok
[WIP]
nifskope
+---build
| *.bat
| *.in
| *.sh
+---dep
| *.dll
+---docsys @ cf44594
+---include [Optional?]
+---install
| +---linux-install
| +---win-install
+---lib
| +---fsengine
| +---NvTriStrip
| +---qhull @ 60d5581
+---res
| +---icon [Move current resources to icon subdir?]
| +---lang
| | *.ts
| +---shaders
| | *.frag
| | *.prog
| | *.vert
| +---ui
| | *.ui
| *.ico
| *.png
| *.qrc
| *.qss
| *.rc
+---src
| +---gl
| +---importex
| +---spells
| +---ui
| +---widgets
| *.cpp
+---test
| .gitattributes
| .gitignore
| .gitmodules
| CHANGELOG.TXT [Change to GitHub Readme format?]
| LICENSE.TXT [Change to GitHub Readme format?]
| TODO.TXT [Legacy?]
| VERSION [Put in \build instead?]
I put some comments in brackets. To elaborate:
resources
should possibly be moved to their own subdir res\icons
lib
a public interface.build
? Depends on if the .PRO should go in build
or the root.Changes will need to be reflected in:
Refactor Progress #32
There's no way of knowing offhand what messages are meant for the end-user and which are truly for debugging. Many errors are a mix of qDebug(), qWarning(), qCritical(), qFatal() and actual QMessageBox classes.
Should probably explicitly call QMessageBox for messages intended for the user, and define QT_NO_DEBUG_OUTPUT
and QT_NO_WARNING_OUTPUT
for release builds so that those calls are optimized away during compilation.
Also, see: Debugging Techniques
It suggests defining I misread it as being a define, when it is in fact an environment variable.QT_MESSAGE_PATTERN
to make debug messages more useful.
NO_MESSAGEHANDLER
. (See also: #27)QT_NO_DEBUG_OUTPUT
(and possibly QT_NO_WARNING_OUTPUT
) for release builds.QT_MESSAGE_PATTERN
for more informative debug output.We should possibly revert 2862caa which got rid of a separate registry group for each version. Or more simply restore / improve on the behavior.
I ran into an issue where my installed version and dev version somehow corrupted the render view settings, so I think it may be best to sort out some of the settings into a per-version registry entry again.
Some should be just shared across all versions, such as Texture Paths.
Currently, going from 1.2.0a1.dev19
to 1.2.0a1.dev20
will cause the UI to reset. This is annoying for testers.
Upon looking into this further, the only reason the settings are cleared is not for differing NifSkope versions, but differing Qt versions.
Going forward, the Qt version should be stored in the settings alongside the NifSkope version. Unfortunately, since the settings have been reduced to one setting group across NifSkope versions, there is no way to allow later versions of NifSkope to operate alongside 1.1.3 without each other clearing the settings. Thus reverting back to settings groups for each version is necessary, or at the very least create a new settings group going forward, and abandon the old registry values and leave those for legacy versions.
Settings that aren't binary (and thus Qt-version dependent) can still be migrated from pre-1.2.0 installations to a new registry location.
So, for new installations of NifSkope, all registry values will be in the new locations. For existing installations of NifSkope, the first time NifSkope is run, any settings that can be migrated will. That way NifSkope 1.2.0+ will no longer see the pre-1.2.0 settings.
Refactor Progress #32
Continuation of what is seen here: amorilia/nifskope#22
Enhancing and extending the UI will be easier if the current UI can be edited in Qt Designer/Creator.
There are customs when it comes to signals/slots for ease of UI separation that will need to be adhered to. Qt code expects that a slot shall be named on_<actionName>_<signalName>
, so there would also need to be changes to the signal/slot code.
Refactor Progress #32
A BSLODTriShape
loses the:
Texture
Mesh
Flags
Transform (sub-options)
...options in the Right-Click context menu.
Most critically (IMO) is the fact that Update All Tangent Spaces, et al., do not apply to BSLODTriShape
. One may think that the tangent spaces get updated on all TriShapes, but they do not.
The only workaround to use UV Edit, Update Tangent Space, etc. is to temporarily rename the block to NiTriShape
.
BSFurnitureMarker
has a new format as of 20.2.0.7. It uses a bitflag to store multiple entry points per position, versus just one.
Unfortunately the origin for the markers has also changed. Instead of being at the standing position it is at the sitting/sleeping position. I've already created new vertex arrays for this, but the exact Z-pos (height) is unknown since Bethesda appears to have placed the ass/back of the character at the origin. Previously the markers just had the feet standing on the origin.
Also... What on earth does this possibly mean:
float roll = float( orient ) / 6284.0 * 2.0 * (-M_PI);
It's just the same as dividing by -100, no? The gl function expects radians, which I tested myself.
As a user I update Num Blocks in the NiHeader.
Refreshing the Block Index Type & Block Size, then length of each is now "num blocks".
When I go to save it updates the "Num blocks", Block Index Type & Block Sizes lenghts according to the list/tree view.
I expect that the values I set should not update. The exceptions being, insertion of blocks manually or copy-pasting branches/blocks and deleting of blocks
In List View, as a user I expect to be able to select multiple blocks, individually using Ctrl + LMB, or a selection of blocks between 2 given blocks, using Shift + LMB.
#32 Refactor Progress
Qt 4.8 is becoming antiquated. Porting to Qt 5 will ease some issues regarding compilation, by having more current tools and packages to work with. There are of course many other benefits but it is pointless listing them.
I have already begun, but there currently a few issues. I disabled a few non-essential elements temporarily. These are due to some methods and classes going obsolete.
See:
This is the basis of the FSEngine code, and the way of opening resources (BSAs). Some alternative needs to be found.
Update: I believe we are going to decide to take this out for the time being. It didn't appear fully implemented to begin with, and as far as I could tell only allowed you to treat uncompressed BSAs as if they were a directory, therefore accessing textures for the models without needing the loose files.
RESOLVED
This is a non-issue. NifSystemLocale
extends this class, but as far as I can tell it's never actually used. If it were to be used QLocale
is an option.
RESOLVED
Simple enough. Just replace with toLatin1()
/ fromLatin1()
.
RESOLVED
You can no longer give QIcon() a raw string. You must wrap it with a QPixMap() constructor.
RESOLVED
QWidget::setShown() is part of an ancient Qt3Support API which no longer exists as of Qt5.
RESOLVED
There is one location in the code where this applies, and the solution is simply removing that parameter as it's now that way be default. So a non-issue. I can't even find where I made this change in the code... ๐ญ I know that it was an issue during compile, but I've scoured through every change in my commits and I can't seem to find it.
These above issues are all forward-compatible changes. They could be fixed in the Qt 4 branch.
There are a few other odd errors I need to look into. I will comment on these below.
Refactor Progress #32
There should either be a setting where a user can choose to have NifSkope ask if you are sure you would like to quit, or NifSkope should detect when there have been modifications to a NIF and prompt if you would like to discard the changes. Or both.
All bhk* blocks need to not only be scaled and translated by 10x for display in the Render View.
NOTE: Applies to Skyrim NIFs only, backwards compatibility needs to be maintained.
My settings recently became corrupted while juggling multiple NifSkope versions (see #11). On mesh load the camera was at the origin in Walk mode, which is usually inside the mesh. Normally it centers the mesh in view.
Thus a "Restore Defaults" option should be added to revert all stored settings.
Block names are stored in the header and referenced by index. This reference gets muddled when copy/pasting blocks into new NIFs. It does not bring the actual strings over with it, but references the string at the same index.
It may be possible to reconcile differences between the string indices by adding all the strings which are needed by the block/branch to the end of the strings and modifying the pasted blocks' indices to point to the new location.
However such repeated actions over time could cause a lot of header string cruft. Might be worth looking into to make a Spell which removes unused strings.
Related: Issue #3
Not only does it generate it at 10x the size, I cannot get it to appear at all in the CK Preview with some meshes[1], and despite scaling it to 0.10 in a parent NiNode, it still appears 10x larger on files where it actually worked.[2]
It does show up in my dev version where all other collision displays correctly, but it is gigantic.
Given the inconsistencies I believe something more is going on here than just the scaling issue. (See comments)
Examples:
[1]: nordiccoffinstatic01.nif
[2]: basket01.nif
Sub-Issues:
NifSkope still gives a warning:
Unknown property: "BSWaterShaderProperty"
Should at least make the warning go away, if not try to improve support for it also.
Create Convex Shape currently strips the root collision. Any collision generated should be put into its own NiNode as a sibling to the shape you are creating it for.
A user may want to create collision for the entire mesh, not just one NiTriShape
. This could technically be done by creating a bhkListShape
with a CVS for each NiTriShape
.
The spell assumes a radius of 0.1, which is actually pretty high. A large amount of bhkCVS have a radius of 0.00, but the vast majority use 0.05.
I did a review of the CVS radiuses in Skyrim.
Best alternative is to allow user choice in the matter. Default to a value, let them change it. Then generate the CVS.
In case that in nif.xml there is bitflags
component containing only one option
, its item in NifSkope is untickable.
Example: meshes\terrain\blackreach\blackreach.4.-3.-1.btr
BSSegmentedTriShape > Segment > Flags
.BSSEG_WATER
and complete edit.It actually goes beyond just bitflags
with one option
.
Example: BSLightingShaderProperty.
To untick them all again you must tick hover over a second option's checkbox and then the first checkbox works. This is why bitflags
with one option
can never work.
This means that it's not a data issue but a UI issue. Basically the UI logic for the checkbox is not getting initialized until you mess with other checkboxes.
Edit: Seems to only happen when leaving only the first option in the list checked. Checking/unchecking the second option only works fine, e.g. SLSF1_Skinned.
Edit2: Actually you only need to hover on another checkbox, not tick it, and then you can untick the first option.
Edit3: Actually, if you carefully attempt to hover on any singularly checked checkbox no matter the index in the list, it is seen as inactive until you hover over any of the other checkboxes. So if you have only one checked option, it can be anywhere in the list. When you expand the dropdown, be careful not to hover on any item other than the checked one. You cannot interact with this item until you hover on another item in the list.
Issue is with the lack of a parent widget passed to QFileDialog::getOpenFileName(). This was apparently not an issue pre Qt5, as the bug is new.
Reported by Hanaisse
There is a lot of code that searches for directories and such that is specific either to dev builds (builds within the repo source dir) or the Linux platform (/usr/share
) without any kind of preprocessor defs.
Personally, my take is that going forward, the NifSkope.pro file (#27) will be responsible for handling the shuffling around of data during a build. I already copy the required DLLs (if on Windows), the shader and lang folders, etc. to the build directory using QMAKE_POST_LINK. I think that qmake is perfectly acceptable for the Linux build as well, and it would make the most sense to have one platform-agnostic makefile.
Furthermore, if any of this dev-specific code is left in at all, the paths need to change as the source has been restructured (#31).
GLee is now defunct. GLEW is current and actively developed.
In my attempts at testing a port from Qt 4.8 > Qt 5.2, GLee breaks in a major way. Figuring out the issue was hard because GLee is long since deprecated.
Note: The issue could have been entirely on Qt's end. I am not exactly sure what changed with OpenGL between 4.8 and 5.2. I know that Qt has only ever had support for OpenGL ES 2.0 spec by default. It seems that I can build Qt with support for full OpenGL by using configure -opengl desktop
yet I haven't looked into whether Qt even supports fixed function pipeline with their OpenGL wrappers.
For an NiTriShape
which contains a BSEffectShaderProperty
, right-clicking Texture > Edit UV gives the error:
"Could not load texture data for UV editor."
Edit UV does not show up on the NiTriShapeData
block's context menu.
(Note to self: There also needs to be a recursive check so that Edit UV does not show on parent blocks when the child does not have a Source Texture
)
[ticket WIP]
Since the project structure and codebase (Qt version) have changed a lot, both the win-install and linux-install targets are effectively broken. I think most of us agree we don't like NSIS, and there are several alternatives.
[1]: Fig. 1
(Ignore the actual content of the installer.) :)
For example I'd rather say "NIF File Format Documentation" to differentiate between that and the NifSkope API docs. Speaking of, an online installer would make including the rather large API docs possible for anyone who would want them. They're rather large currently (100MB). Here's an example of the current Doxygen output. Linking to the main NifSkope class because I think the collaboration diagram is funny. :)
Refactor Progress #32
There is currently a rather outdated block of code for the GLView widget which defines behavior for dragging files to the viewport.
Methods are:
GLView::dragEnterEvent
GLView::dragMoveEvent
GLView::dropEvent
GLView::dragLeaveEvent
Currently it seems to only allow dragging a texture file onto a block which has an NiTexturingProperty, and nothing else.
[1]: Analogous to 3ds Max's functionality with MAX files, where you are given the option to replace the scene with the file or merge the file into the existing scene. This touches a lot more functionality in the codebase than just GLView however, which would require work from Issue #18 (Header Strings enhancements).
[Outline WIP]
It would be nice to implement some basic command line arguments in order to allow for batch editing of NIF files directly through NifSkope. My example use case is Update All Tangent Spaces... these get corrupted easily during import/export and ensuring they are sound manually is tedious for many NIFs. Any Spell could be a candidate of course.
There are significant hurdles in implementing this, and it's very formative at this point.
First, the program already assumes only one argument, a filepath. This is utilized when dragging a file to the executable. It would be the same to call:
NifSkope.exe farmhouse01.nif
... via the command line. (Listing multiple NIFs does not open multiple application windows.)
Currently dragging more than one file to the NifSkope executable results in only the last file opening. Instead an application window should open for each file.
Same goes for:
NifSkope.exe farmhouse01.nif farmhouse02.nif
... via the command line.
#45 Command line arguments, batch scripting
#35 GLView Widget - Drag/Drop events
Many Skyrim NIFs do not use the shader pipeline. Some do use the shader pipeline. It is unclear at the moment what causes this, but it's likely due to changes to the NIF format and how the code conditionalizes whether or not to use shaders.
Shader pipeline example: sprigganmatron.nif
Fixed function example: farmhouse01.nif (or basically any architecture)
Shader pipeline also continues to work after switching to GLEW.
#56 OpenGL Refactoring
#23 Switch from GLee to GLEW NOTE: May get rid of GLee or GLEW entire and use Qt 5.2 native functions
#28 Qt 5 Port
The files which Bethesda uses for terrain (.btr) and LOD objects (.bto) are simply renamed NIFs. To view these in NifSkope one must manually rename it to a NIF.
NifSkope should be able to natively read these file extensions.
Related: http://niftools.sourceforge.net/forum/viewtopic.php?f=10&t=3282
This should also be looked into to see if support for this TriShape can be further enhanced.
A user on sf.net - icedream has provided a chinese translation.
I've done a Chinese translation.
Problems are some icons doesn't show correctly if I've translated the strings, this is the screenshot:
Another problem is that "Continue" has two meanings in spells/blocks.cpp, one for continue/cancel, one for Collision Detection, but I can't separate them for two meanings.
Also, some strings should have been translable but not yet, such as the menu "Spells", redo/redo in UV editor.
Note: This issue as outlined is outdated and Settings was restructured in a different way.
[1] Find a more appropriate location to put settings menu option as its both hard to find and the setting options do not necessarily correspond to "Render".
[2] Users also have difficulty locating Texture path detection/setup because its hidden in here too.
[3] These submenus under Settings can just be a shortcut to the respective tab in one large settings widget. That way to get between settings categories you don't need to close one window and go back into Settings > [Menu you're trying to switch to]. Putting each of these in a visible dropdown menu will make them more user accessible.
#25 Render Settings & View enhancements
Refactor Progress #32
A number of useful commands should be implemented to help with file management.
"Extract File" (or "Export File to...") is needed to write files to the filesystem which are unpacked into memory from a BSA. Something like "Export All" could give you the loose files needed by the NIF to function.
"Show in Folder" would work like any other program, opening up an explorer window at the file's location. Should only show if file exists on the filesystem already.
"Open With..." would open the file in an associated program. Unfortunately I don't know about the permissions required to do such things yet. I am not sure you could look at the shell commands / default programs for a certain file extension without running the program as administrator. The alternative would be to have a setting where you can tell NifSkope what application to use. If neither of these are easy to implement, "Open in Folder" is sufficient.
While the actual NifSkope codebase didn't require too many changes, Qt underwent a pretty drastic overhaul between 4.8 and 5.2. They deprecate code starting in one version, and then make it obsolete in a later version. This all happens silently unfortunately, and you have to actually study which classes and methods have been deprecated or made obsolete.
Also, this normally shouldn't happen, but code can change behavior between versions. For example, file filters in dialog windows stopped working. I've already fixed it, but more strangely, I can't find any explanation as to why *.nif
used to work, but now I need NIF (*.nif)
. Another example, double-clicking/dragging NIFs to open up the program stopped working because of some changes to QUrl (also fixed).
See:
Obsolete Classes
Qt Coding Style
Qt Coding Conventions
NEEDS FUTURE TICKET
And also, while not a quantifiable task for the task list, the program should be tested rigorously in order to find any areas that could have broken during the port, like the aforementioned QUrl / file issues.
Refactor Progress #32
/nifskope/gl/GLee.h:765: error: typedef redefinition with different types ('int' vs 'void *')
In GLee.h the following is defined
typedef int GLhandleARB;
typedef char GLcharARB;
But in gltypes.h it is defined as
typedef char GLcharARB;
typedef void *GLhandleARB;
This gltypes in what is on my macbook running the latest osx
The uv data gets corrupted on load.
This is possibly due to the convention issues with .obj but also results in
"Could not load texture data for UV editor."
More information available here - http://niftools.sourceforge.net/forum/viewtopic.php?f=38&t=3210
NifSkope.pro should be reorganized and restructured to better operate between platforms, individual machines, and compilers. Dependency management should be improved.
There is an incompatibility with the NIFSKOPE_VERSION
and NIFSKOPE_REVISION
macros between Qt Creator and VS 2010-2012. Also, VCPROJ files do not get generated optimally in addition to this macro formatting error. Visual Studio should be somehow targeted directly. (See Below)
The following defines should be looked into:
USE_GL_QPAINTER
EDIT_ON_ACTIVATE
(alt: Q_OS_WIN
)NO_MESSAGEHANDLER
(alt: QT_NO_DEBUG
)USE_GL_QPAINTER
could be done away with. Also, EDIT_ON_ACTIVATE
may be a relic that is not even needed anymore.Use QT_INSTALL_BINS to find and copy DLLs to build folder when dynamic. Ignore when static.
Copy shaders, lang folders to build dir.
Create make targets for NSIS, docsys, doxygen, etc.
Clean up the build dir significantly using UI_DIR, MOC_DIR, OBJ_DIR, RCC_DIR to put them in appropriate subdirs.
Differentiate between MSVC builds by Visual Studio and those by Qt Creator. Checking for *msvc*
scope does not do this alone, though one can test if the build is a "shadow build". Qt Creator builds outside of the project root by default. Visual Studio does not.
Setting up 32-bit / 64-bit compiler scopes should be looked into. Qt precompiled libraries come in 32 and 64-bit. However, static compilation should be an option for Qt, and we should build our own 32- and 64-bit Qt libs to link against.
Consider putting flags in place to enable C++0x / C++11 support for the compilers that can use it. Like 32/64bit code this would be just put in with the off chance that the source will utilize such features in the future. There are quite a few nice things about C++11 so it might eventually sneak into the codebase.
See:
Refactor Progress #32
I have to edit the source to get rid of the ridiculous macro incompatibility.
#define VERSION QString(NIFSKOPE_VERSION).replace("\"", "")
#define REVISION QString(NIFSKOPE_REVISION).replace("\"", "")
I add an additional set of quotes so that VS2010+ stops erroring during compile. I then run it through this macro so that the strings come out the same no matter what platform it's built on.
If you right click a mesh, and go to Transform > Edit
, anything you type in the Name box will get turned immediately into a string, in real time. Meaning if you type "House", the following strings will be generated:
H
Ho
Hou
Hous
House
This is a pretty big bug. Solution being that I'm just going to strip it out, and compensate with the header string improvements in Issue #18.
Many of the features should be given keyboard shortcuts. We should either include the shortcuts with each feature improvement, or save them for all at once.
The collision currently only displays as a wire. For complex shapes this does not give you a good idea of the "coverage", or how accurately it fits the shape. A new mode should be added which fills in the surfaces so that the faces can be seen.
The convex hull algorithm uses a naive algorithm. It does not generate an actual convex hull. It instead draws an edge between every combination of vertices.
I've added CONTRIBUTORS and TROUBLESHOOTING readmes and they will eventually need to be filled out.
@neomonkeus if you could provide a list of current and past contributors, I can format it and get it committed.
Just going by the commit graphs:
@amorilia
@Alphax
@mharj
@PacificMorrowind
@darkyellow
@NicocoiN
@infectedsoundsystem
@bobtedbob
And others have probably contributed from before GitHub.
For TROUBLESHOOTING, it will mostly be taken from the previous readme for now, and deal with improving it later. The previous readme had this:
* Do not install nifskope whilst blender is running.
* Be warned that collada export is still very experimental. It may, or
may not, work for you.
* On some graphic cards textures show up black or distorted. If this happens,
uncheck "Shaders" in NifSkope's settings.
* Models with multiple texture maps may appear to be missing some textures,
but they will become visible when some texture maps are disabled. This is
due to the limited number of texture units in graphics hardware.
* If one of NifSkope's windows disappears due to moving it to a location
outside of the desktop view, close NifSkope and remove the NifSkope settings
by deleting the registry key(s)
HKEY_USERS\S-1-5-***\Software\NifTools\NifSkope-***
Launch NifSkope again, and all windows will appear at their default
position.
* If NifSkope does not start at all, check your firewall. NifSkope uses the
network (locally, nothing is sent to the outside world) to communicate with
itself.
Nifskope doesn't clear unused strings after deletion its instance\place where it was used and its causing some problems to me, I can't reorganise NIf as I want, also I need to include small program to Nif that creates reverse animation for direct animation :) (p.s, I having math)
FSEngine relies on API that has become private in Qt 5. To replace it this API first needs to be stripped out and then refactor wherever the code has assumed the virtual filesystem.
I have it solved for the most part. The "Resource Files" works just as before, but there are a few other places (Spells and such) that assume the virtual filesystem.
Everything necessary can be replicated using QFile and QFileInfo.
These were classes to extend the virtual filesystem and utilized QAbstractFileEngine, QAbstractFileEngineHandler, and QAbstractFileEngineIterator, respectively.
data
to Tex structEach texture that gets loaded is represented as a Tex object. For textures which load from BSAs, store the raw data directly on the Tex. Elsewhere, check if the data is not empty. If the data is not empty, the texture is not on the filesystem.
Wherever a QFile is assumed (to read texture data), add a QBuffer branch which will read the raw data on the Tex into memory.
#28 Qt 5 Port
Refactor Progress #32
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.