1 /* c-irrlicht --- C bindings for Irrlicht Engine
3 Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
5 This file is part of c-irrlicht.
7 c-irrlicht is free software; you can redistribute it and/or modify
8 it under the terms of the GNU Lesser General Public License as
9 published by the Free Software Foundation; either version 3 of the
10 License, or (at your option) any later version.
12 c-irrlicht is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with guile-irrlicht. If not, see
19 <http://www.gnu.org/licenses/>.
22 #include <cirrlicht/cirrlicht.h>
29 // ask user for driver
30 irr_video_E_DRIVER_TYPE driverType;
32 printf("Please select the driver you want for this example:\n" \
33 " (a) OpenGL 1.5\n (b) Direct3D 9.0c\n (c) Direct3D 8.1\n" \
34 " (d) Burning's Software Renderer\n (e) Software Renderer\n" \
35 " (f) NullDevice\n (otherKey) exit\n\n");
41 case 'a': driverType = irr_video_EDT_OPENGL; break;
42 case 'b': driverType = irr_video_EDT_DIRECT3D9; break;
43 case 'c': driverType = irr_video_EDT_DIRECT3D8; break;
44 case 'd': driverType = irr_video_EDT_BURNINGSVIDEO; break;
45 case 'e': driverType = irr_video_EDT_SOFTWARE; break;
46 case 'f': driverType = irr_video_EDT_NULL; break;
50 // create device and exit if creation failed
51 irr_core_dimension2d_u32 windowSize = {640, 480};
52 irr_IrrlichtDevice *device =
53 irr_createDevice(driverType, &windowSize, 16, false, false, false);
57 return 1; // could not create selected driver
60 // create engine and camera
61 irr_setWindowCaption(device, "Custom Scene Node - Irrlicht Engine Demo");
63 irr_video_IVideoDriver* driver = irr_getVideoDriver(device);
64 irr_scene_ISceneManager* smgr = irr_getSceneManager(device);
66 irr_core_vector3df position = {0, -40, 0};
67 irr_core_vector3df lookat = {0, 0, 0};
68 irr_scene_addCameraSceneNode(smgr, NULL, &position, &lookat, -1, true);
70 // create our custom scene node
71 irr_scene_ISceneNode* myNode;
72 irr_core_aabbox3d_f32 box;
73 irr_video_S3DVertex vertices[] =
75 // pos, normal, color, tcoords
76 { {0, 0, 10}, {1, 1, 0}, MAKE_COLOR(255, 0, 255, 255), {0, 1} },
77 { {10, 0, -10}, {1, 0, 0}, MAKE_COLOR(255, 255, 0, 255), {1, 1} },
78 { {0, 20, 0}, {0, 1, 1}, MAKE_COLOR(255, 255, 255, 0), {1, 0} },
79 { {-10, 0, -10}, {0, 0, 1}, MAKE_COLOR(255, 0, 255, 0), {0, 0} }
81 irr_video_SMaterial material = S_MATERIAL_DEFAULT;
82 material.wireframe = false;
83 material.lighting = false;
85 irr_core_aabbox3d_reset(&box, &vertices[0].pos);
86 for (int i=1; i<4; i++)
88 irr_core_aabbox3d_addInternalPoint(&box, &vertices[i].pos);
93 uint16_t indices[] = {0, 2, 3, 2, 1, 3, 1, 0, 3, 2, 0, 1};
94 irr_video_setMaterial(driver, &material);
95 irr_video_setTransform(driver,
97 irr_scene_getAbsoluteTransformation(myNode));
98 irr_video_drawVertexPrimitiveList(driver,
101 irr_video_EVT_STANDARD,
102 irr_scene_EPT_TRIANGLES,
103 irr_video_EIT_16BIT);
106 irr_core_aabbox3d_f32* customGetBoundingBox()
111 uint32_t customGetMaterialCount()
116 irr_video_SMaterial* customGetMaterial(unsigned int i)
121 myNode = irr_scene_addCustomSceneNode(smgr, NULL, 666, NULL, NULL, NULL,
122 customRender, customGetBoundingBox,
123 customGetMaterialCount, customGetMaterial);
126 irr_core_vector3df rotation = {0.8, 0, 0.8};
127 irr_scene_ISceneNodeAnimator* anim =
128 irr_scene_createRotationAnimator(smgr, &rotation);
132 irr_scene_addAnimator(myNode, anim);
139 irr_video_SColor bgcolor = MAKE_COLOR(0, 100, 100, 100);
140 while (irr_run(device))
142 irr_video_beginScene(driver, true, true, &bgcolor, NULL, NULL);
143 irr_scene_drawAll(smgr);
144 irr_video_endScene(driver);
149 int fps = irr_video_getFPS(driver);
150 const char *driverName = irr_video_getName(driver);
152 snprintf(NULL, 0, "Irrlicht Engine [%s] FPS:%d",
154 char *caption = (char*)malloc(capsize + 1);
155 snprintf(caption, capsize + 1,
156 "Irrlicht Engine [%s] FPS:%d",
159 irr_setWindowCaption(device, caption);