Sign in to follow this  
Freestyler

Nokia shuns Windows and Direct3D Users!

Recommended Posts

Previously i have been teaching myself C++ via Qt and Direct3D 10. This has been fun and quite a learning experience, however Nokia/Trolltech have completely removed support for Direct3D functionality, so I'm now left with code that works in Qt4.53 but will never work in Qt4.6 or later. (DOH!) I cannot believe Nokia can shun Windows and Direct3D developers.For a GPL/LGPL cross platform framework, i believe they have lost the plot. When you basically support OGL and Linux, and Windows is just abandoned i think they need to rethink the term "Cross Platform Framework". I have not been able to get anyone from Trolltech or Nokia to comment on why, but i thought i would let Direct3D users know that Nokia's Qt4.6 is not a viable option for Direct3D development anymore. I see Qt suggest around here a lot, but perhaps many aren't aware of it's new limitations. Can anyone tell me the nicest alternative to write some simple D3D GUI's preferably one that one abandon me tomorrow because I'm a D3D user. Anyway @$@#$@#$%#$%@#@ NOKIA$@#@#$ @#$@#$@#$ TROLLTECH@#$@#$@#&*$(!!!!! /RANT

Share this post


Link to post
Share on other sites
I don't know how much you've used Linux, but OpenGL on Windows is a hell of a lot better supported than OpenGL on Linux. Further, to suggest that an open-source, cross-platform framework needs to support the proprietary, Windows-only Direct3D is pretty ridiculous. Frankly, if they kept Direct3D-specific functionality, that makes Qt less of a cross-platform framework.

A quick search tells me the "Direct3D paint engine" was only an experimental addition from 4.3 to 4.5, which was removed to focus on OpenGL support. I haven't messed with Qt yet so I really don't know how big of a change this is. But, it seems to me that if you have a lot of D3D stuff in your code and you are using Qt, you're doing it wrong.

Share this post


Link to post
Share on other sites
I don't see how having the library use a windows-only library when compiled on windows and something else when compiled elsewhere makes it less cross-platform. Assumedly the library doesn't directly expose the opengl/direct3d bits to a library user, so why not be able to make choices like this? It doesn't make the library less usable on other platforms

Especially if them using direct3d on windows lets them outperform opengl for some reason, please do it!

Also, it might stink sometimes, but having certain features only work on certain platforms is good. Hopefully it leads to supporting those features on all platforms, but IMO it's better than always only supporting the least common feature set and leaving it up to users to implement anything else.

Share this post


Link to post
Share on other sites
Quote:
Original post by lmelior

Further, to suggest that an open-source, cross-platform framework needs to support the proprietary, Windows-only Direct3D is pretty ridiculous.


Firstly Qt is both commercial and GPL, so open source is incorrect, if i wanted to commercially produce 3D visualization software using CUDA and DX3D i no longer can use the Commercial or Opensource Nokia Qt frameworks to do so.

So how is that an Opensource or Cross platform Framework?

Secondly, I think it is you that has "Cross Platform" incorrectly applied in this instance. Cross Platform should imply that i can use Qt on either Mac/Windows/Linux to develop the tools and applications i want.

NOT that i MUST only use Qt with OGL on platform X, as this truly isn't an open or cross platform framework at all. It's a proprietary API being forced by an "Open Cross Platform framework" OGL is just as closed as Direct3D really.

If you don't support Direct3D or other Windows functions, than i say it's not cross platform at all. Qt4.53 which offered me the choice sure, but 4.6 with it's forcing of OGL on Windows is anything but cross platform friendly IMHO.

Quote:
Frankly, if they kept Direct3D-specific functionality, that makes Qt less of a cross-platform framework.


How does it stop anyone from using Qt on Mac/Linux or Windows? Does it stop others from using OGL on Mac/Linux? But the reverse stops me from using Direct3D and Windows, how is this better?

I don't know why they have to support Direct3D at all, just simply allow ANY other drawing engines to be used, rather than forcing only OGL. That is far more shortsighted and makes it far less useful for myself.

After teaching myself C++ via Qt and Direct3D, i'm now lost without any ability for any of my code projects in the last 12months to work with Qt4.6 or above.

Now it makes it completely irrelevant for a Windows GUI framework, if it cannot handle all the areas of Windows it needs to, it may as well just support Mac/Linux and OGL.

Quote:
A quick search tells me the "Direct3D paint engine" was only an experimental addition from 4.3 to 4.5, which was removed to focus on OpenGL support.


So they add features i can use in 4.3 and remove them in 4.6. Great idea Nokia!

OGL and Direct3D both work fine in 4.53, 4.6 only allows OGL. Again i don't really need a D3D Class in Qt, i just need to ability to overide it with my own custom paint event, which cannot be done now in 4.6.


Quote:
I haven't messed with Qt yet so I really don't know how big of a change this is.
Either do i because Nokia offer no documentation in what the "-direct3D" switch done when configuring libraries.

Quote:
But, it seems to me that if you have a lot of D3D stuff in your code and you are using Qt, you're doing it wrong.


Not sure what that is meant to imply, but i do have a lot of D3D code, and it all works great until Nokia's stupidity to change their mind.

Currently i can use Direct3D which is better optimized for Nvidia consumer cards than that of OGL, it also is better supported and easier with documentation and development, and arguably more powerful these days.

If i want to port my application to Mac and Linux, it means only my D3D class has to be changed to OGL, every other bit of the code is portable. So i say that it's not me who is doing it wrong at all. :)

But for D3D users stay clear of Qt4.6 and beyond.

Share this post


Link to post
Share on other sites
Do you have a link to the announcement where they've actually declared that they're dropping support for it? Perhaps it just hasn't been ported to 4.6 yet?

I can understand your frustration, but I'm not sure how the painter affects your ability to use Direct3D with Qt anyway? You can still derive a class from QWidget and create an IDirect3DDevice that uses it as the device window...

I do agree that, in general, cross-platform doesn't imply that you have to only use the lowest common denominator features on every platform. A good cross-platform library will use the lowest-common denominator if it has to, and then provide the ability to customize features specific for the platform it's running on. But Qt does still allow you to use Direct3D with a QWidget (as far as I can tell, at least).

Share this post


Link to post
Share on other sites
Quote:
Original post by Freestyler
Cross Platform should imply that i can use Qt on either Mac/Windows/Linux to develop the tools and applications i want.
Exactly. And, like any cross-platform framework which is actually cross-platform, rather than having a limited-functionality cross-platform core, it ends up being a bit of a lowest common denominator. So goeth Qt, so goeth the JRE, so goeth .NET. It stands in contrast to things like the C standard library, which has a cross-platform core but really needs platform-specific libraries in order to do most of the things most people would want to do. Hence Qt supporting OpenGL as The 3D Graphics Layer, because it is a lowest common denominator of cross-platform graphics, which does most of the things most people would want to do (including, BTW, CUDA, since you mentioned that you want that).

It sucks that you were left high and dry from them abandoning that development branch, though. If it's any consolation, OpenGL is very, very similar to D3D in all the ways that count.

Share this post


Link to post
Share on other sites
Quote:
Original post by Codeka
Do you have a link to the announcement where they've actually declared that they're dropping support for it?


http://qt.nokia.com/developer/changes/changes-4.6.0

"****************************************************************************
* Important Behavior Changes *
****************************************************************************

- The experimental Direct3D paint engine has been removed. The reason for
this is that Nokia focuses on OpenGL for desktop hardware accelerated
rendering."


Ironically the top of the document states

"The Qt version 4.6 series is binary compatible with the 4.5.x series.
Applications compiled for 4.5 will continue to run with 4.6..."

To which i say Hahahahahahahahahah.....

Quote:
Perhaps it just hasn't been ported to 4.6 yet?


I have been asking every Qt list, forum and person i can to get any info on how and why it was done and removed. Amazing when Qt can be used to develop Windows Mobile apps, but not Direc3D apps in Windows.

Quote:
I can understand your frustration, but I'm not sure how the painter affects your ability to use Direct3D with Qt anyway? You can still derive a class from QWidget and create an IDirect3DDevice that uses it as the device window...


No you cannot, Qt will always overwrite my custom paintEvent now, so you have fighting or flickering of both paintengines, i.e i can see my D3D window when i resize or cause an update, but it's immediately overwritten by Qt's double buffering. (And thanks yes it's very frustrating)

But Qt does still allow you to use Direct3D with a QWidget (as far as I can tell, at least).[/quote]

No it doesn't and with all due respect, i wish you (others) could back your claims up, before assuring me it should work (as plenty of people who haven't tried it, claim it "should still work") If this were true i would not have a problem like i do now, and i would likely kiss you... ;)

If someone can tell me what the "-direct3D" switch was doing behind the Qt scenes i would be very happy, documentation is absent on these topics.

Basically in 4.53 if you didn't build libraries with "-direct3D" it would exhibit the same behavior as it is now. (Flickering and fighting with QWidget or QMainWindow with the paintevent)

You can see the issues discussed here previously http://www.qtcentre.org/forum/f-qt-programming-2/t-direct3d-widget-19885.html/?highlight=Direct3D the OP of this thread also needed to compile using -direct3d otherwise he had flickering, it's the same problem i have now that "-direct3d" has been removed.

So in 4.6 or above this will seemingly be an issue, and i guess not just for D3D but for all custom painting events, which is why i think this is so stupid.

Anyway thanks for the replies.

Quote:
Original post by krum
Quote:
Original post by Freestyler
Firstly Qt is both commercial and GPL,


Qt is LGPL. Huge difference.


Sorry but i don't get the relevance or huge difference to the discussion or any of it's points?

Share this post


Link to post
Share on other sites
[quote]Original post by Sneftel
Quote:
Original post by Freestyler
Hence Qt supporting OpenGL as The 3D Graphics Layer, because it is a lowest common denominator of cross-platform graphics, which does most of the things most people would want to do (including, BTW, CUDA, since you mentioned that you want that).


Cross Platform, should imply that i can use it on the platform of my choosing, and i could do this when i started with Qt.

I don't care if Qt has OGL or Direct3D classes, i generally subclass and implement my own, which totally means Nokia don't have to support either themselves, just make sure that i have the ability to choose my own custom events. Basically Qt shouldn't worry if I'm using D3D or OGL, it should just paint my demo window regardless.


Quote:
It sucks that you were left high and dry from them abandoning that development branch, though. If it's any consolation, OpenGL is very, very similar to D3D in all the ways that count.


Thanks, but i already know OGL and have used it many times in the past, I'm just learning D3D and FWIW, i think DX10/DX11 are miles in front of OGL 3.2 in performance, features and ease of use.

Just getting the right headers, GLEW, Kronos headers and then Nvidia 3.2 drivers for my laptop is a pain, and then only to have more convoluted code running slower FPS isn't something i want to go back to. Ever since they scrapped immediate mode, i jumped to D3D and don't wish to return.

But i won't say i ain't considering it, and i appreciated your thoughts.

On top of this i think Qt's OGL changes for 4.6 are just as bad an idea as dropping D3D. OGL used to be OGL, now you have to write QtOGL so the syntax is now different. (Doh!)

Cheers,

PS.... Anyone have any suggestions for alternative GUI framworks, is WXWidgets anygood?

Share this post


Link to post
Share on other sites
PS.... Anyone have any suggestions for 

Yes stop whinging like a baby.
What did the version you have not support that you now want? ie why can't you carry on using 4.5.3?
Go and grab the source from ftp://ftp.qt.nokia.com/ and hack to your hearts content to add the features you want, releasing them back to qt.

Share this post


Link to post
Share on other sites
Quote:
Original post by magic_man

Yes stop whinging like a baby.


Yes I'm not allowed to voice my opinions, but your complaints of others frustrations are golden, don't let the irony hit you on the back of the head on the way out...("Don't take my mummy away")

People in Glass houses shouldn't call the kettle black, and you DO know what i'm talking about... :) Save your not useful comments for something you at least understand, and leave the rest of the discussions for people that can understand them.





Share this post


Link to post
Share on other sites
Quote:
Original post by Freestyler
Qt will always overwrite my custom paintEvent now, so you have fighting or flickering of both paintengines, i.e i can see my D3D window when i resize or cause an update, but it's immediately overwritten by Qt's double buffering. (And thanks yes it's very frustrating)
See, I think this is the problem you should be concentrating on. Forget about the lack of a Direct3D painter, that's totally irrelevent: you don't care how Qt paints it's windows, as long as you can use a Direct3D device with a Qt widget as the device window.

If a fix is required from Trolltech/Nokia to make this work, then so be it. But that's a much smaller ask than getting them to reinstate the "experimental" Direct3D painter that was in previous versions.

magic_man was being rather harsh, but he did have a point. Coming on here to vent your frustration is one thing, but that's only going to do so much for you. At the end of the day, you have to solve your problem. If worse comes to worst, you have the source code: you can submit a patch to make it work.

Share this post


Link to post
Share on other sites
Quote:
Original post by Freestyler
Cross Platform, should imply that i can use it on the platform of my choosing, and i could do this when i started with Qt.


No , cross platform has never implied that, it has always meant that the software or library works on more than one platform (Most large cross platform libraries only work on a rather small selection of platforms), The point of cross platform libraries is to make it easier to write cross-platform software, not to make it easy to write platform specific applications (There are plenty of platform specific libraries for most platforms that do a far better job at this than QT) so spending alot of money and other resources maintaining D3D support in QT is fairly pointless.

I don't see what the problem is really, you used experimental features of a library and got burned when those same features were dropped, experimental features get dropped or changed all the time, thats why they're marked as experimental.

Share this post


Link to post
Share on other sites
Could the removal of D3D support from Qt have something to do with the fact that Qt recently stopped using native windows for widgets and instead they use "foreign windows", a single native window where Qt draws the widgets. Not using native windows greatly improved the responsiveness of the UI, especially when resizing windows and widgets. This is a fairly major architectural change. When you create a D3D device, you need to have a native win32 window (a HWND window handle, that is) where to render to. Since Qt doesn't have one, they may have dropped D3D support for the sake of simplicity.

What puzzles me, though, is that when you create an OpenGL rendering surface you need to have a native window just as you need with D3D. How do they do this in Qt? Perhaps when using GL, they put a native window on top of the Qt window which to use for the GL surface.

You really should not whine about open source projects dropping a feature you liked. They probably do have a reason for it and the developers are free to do stuff that's in their intrest. If you really want or need that feature back, you are free to grab the source code and hack it there yourself. I'm sure you can find the old D3D widget source from their source repositories and also track down the changes in other relevant parts. Also looking at the source for the OpenGL widget may prove to be helpful.

-Riku

Share this post


Link to post
Share on other sites
* I think most of the people answering here have missed the point why D3D support is so important for Freestyler. Qt can draw all of its widgets using both the software back-end and the hardware accelerated back-end, Meaning that you can have Qt powered GUI drawn using OpenGL. When it comes to D3D you can not use Qt for in game GUI (at least not hardware accelerated).

* I can understand that you are frustrated but I think Nokia has done the right thing dropping D3D support. Maybe 80% of Qt users don't case at all about OGL or D3D support. Most of the rest 20% are happy to have some kind of fast paint system but still don't care about the implementation and CAD applications have always been OGL based in the first place. Maintaining a D3D paint system is a lot of work due to the fast API change, D3D10+ not being supported on XP and not even word with older hardware on Vista and Win7. Also have a look at "Qt in Use" tab on their homepage and you will see that Windows is maybe not even the most important platform for most of the Qt customers.

* What are the alternatives? Well, many AAA titles use Scaleform Gfx but it is an expensive product. Many game engines have also built in GUI system. I think the DirectX SDK includes a minimal GUI library and there are probably some other free libraries.

* What else? Forget those "D3D vs. OGL" clichés, learn both and use the API that suites your needs. If Qt let you develop your application in half the time its probably better to use it than reinventing the wheel. Better get something done than ending in something like Duke Nukem ForNever.

[Edited by - Kambiz on December 24, 2009 7:39:51 AM]

Share this post


Link to post
Share on other sites
Quote:
Original post by riku

You really should not whine about open source projects dropping a feature you liked.


Where have i done this please?

I'm letting other Direct3D users know so they avoid the same pitfalls, sorry if you whingers see that as whinging, but to me i was suggested Qt as a GUI framework from this forum for developing my own apps and code, and now it's taken away.

This fact was not documented very well, i had no idea it was "experimental" until after they have dropped support for it, and now that i have wasted 6 months learning a framework that no longer runs the code the same as it did, i seem to have a right to be a little pissed personally.

If Qt could document it, comment on it or tell me what the -direct3D switch was doing, than i may have a chance of doing it myself manually without the burden being on Trolltech to begin with?. Or why i have "fighting"due to double buffering this would at least be acceptable.

I was looking at becoming a commercial user of Qt because i plan on writing Plugins for Newtek CORE. Newtek have recently gone C++ and changed to Qt as well and are commercial users of Nokia's GUI for there upcoming 3D application.

So to claim i shouldn't be able to "whinge" when they drop an important reason as to why i would be paying $3000 for a commercial license in the first place, is also a little misplaced i think.

The MAIN point i think others are missing is, I didn't ask for Trolltech to offer Direct3D class in Qt, i agree this is more work for Nokia that they shouldn't really maintain. Qt have recently added their own QtOGL class, i personally don't need that either as i always subclassed my own from QWidget.

So let me create my own Direct3D Class for Qt and let me use that?

But to stop the ability for other rendering engines to work within it, i think is my main gripe, and i think is a shortsighted option to take for Qt. If i knew how to hack around the issues and to allow my PaintEvent to not fight with Qt's then it would be a moot point, but nonody has even gotten close to explaining this to me via Qt support channels.

So perhaps "support for D3D" can be dropped, but preventing it from working allogether seems like a very big reason to avoid using Qt for gaming or 3D visualization for anything other than OGL.I think that truly makes it a lot less Windows friendly to most on this forum.

Cheers,





Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this