Hallo zusammen,
ich wollte für mein aktuelles kleines Projekt eigentlich SFML für GUI & 2D Grafiken verwenden (weil sie so schön einfach ist
), während ich für die 3D Darstellung Irrlicht (1.8.1) verwenden wollte. Hab mir gedacht ich könnte das Window ja einfach per SFML erstellen und anschließend das Irrlicht Device hinterher. Das ganze funktioniert auch prima, alles wird korrekt gerendert etc., ABER nur auf meiner integrierten Intel Grafikkarte -.-'
Wenn ich es mit meiner dedizierten Nvidia versuche, schlägt die Erstellung des Irrlicht Device fehl (OGl Context konnte nicht erzeugt werden).
Nvidia Treiber hab ich schon geupdatet, denke auch nicht dass es daran liegt. Weiß jemand zufällig wie ich das richtig hinkriege?
Oder wäre es vllt. auch möglich alles was ich per SFML rendern will, in eine RenderTexture zu rendern und ich diese Textur anschließend per Irrlicht zeichne? Sodass sie sich das Window nicht "teilen" müssen?
Hier der Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#include <SFML/Graphics.hpp>
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
int main() {
sf::ContextSettings settings;
settings.depthBits = 16;
settings.stencilBits = 8;
settings.majorVersion = 3;
settings.minorVersion = 0;
sf::RenderWindow window(sf::VideoMode(1280, 720), "Irrlicht + SFML", sf::Style::Default, settings);
IrrlichtDevice* device;
SIrrlichtCreationParameters Parameters;
Parameters.DriverType = video::EDT_OPENGL;
Parameters.Bits = 16;
Parameters.Fullscreen = false;
Parameters.Stencilbuffer = true;
Parameters.WindowId = window.getSystemHandle(); // hier hab ich gedacht, übergeb ich doch einfach das Handle
device = createDeviceEx(Parameters);
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
smgr->addCameraSceneNode(0, vector3df(0, 30, -40), vector3df(0, 5, 0));
while (window.isOpen())
{
sf::Event event;
device->run();
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
device->getTimer()->tick();
driver->beginScene(false, true, SColor(0,0,0,255));
smgr->drawAll();
guienv->drawAll();
// push und po GL states wie wenn ich SFML mit purem OGL mixen würde
window.pushGLStates();
window.draw(...);
window.popGLStates();
driver->endScene();
}
device->drop();
return 0;
}
|