Nokia shuns Windows and Direct3D Users!

Started by
14 comments, last by Freestyler 14 years, 3 months ago
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
Advertisement
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.
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.
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.

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).
Quote:Original post by Freestyler
Firstly Qt is both commercial and GPL,


Qt is LGPL. Huge difference.


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.
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).

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?
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?
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.
"You insulted me!" I did not say that in the private message Tom Sloper!

This topic is closed to new replies.

Advertisement