]> git.jsancho.org Git - c-irrlicht.git/blobdiff - src/IVideoDriver.cpp
C types
[c-irrlicht.git] / src / IVideoDriver.cpp
index 3b77b9106a6b0f70bd9d945e79264765421b1da2..e04dbf6ee9d1cf63c133707ad975ddacac5b90af 100644 (file)
@@ -26,8 +26,8 @@
 extern "C" {
   int
   irr_video_beginScene(irr_video_IVideoDriver* driver,
-                       int backBuffer,
-                       int zBuffer,
+                       bool backBuffer,
+                       bool zBuffer,
                        const irr_video_SColor* color,
                        irr_video_SExposedVideoData* videoData,
                        const irr_core_rect_s32* sourceRect)
@@ -59,6 +59,61 @@ extern "C" {
                    sourceRect != NULL ? &rect : 0);
   }
 
+  void
+  irr_video_drawVertexPrimitiveList(irr_video_IVideoDriver* driver,
+                                    const void* vertices,
+                                    uint32_t vertexCount,
+                                    const void* indexList,
+                                    uint32_t primCount,
+                                    irr_video_E_VERTEX_TYPE vType,
+                                    irr_scene_E_PRIMITIVE_TYPE pType,
+                                    irr_video_E_INDEX_TYPE iType)
+  {
+    // Convert vertices
+    irr::video::S3DVertex irrVertices[vertexCount];
+    for (int i=0; i<vertexCount; i++)
+      {
+        irr_video_S3DVertex *vertex = (irr_video_S3DVertex*)vertices + i;
+        irrVertices[i] =
+          irr::video::S3DVertex(vertex->pos.x, vertex->pos.y, vertex->pos.z,
+                                vertex->normal.x, vertex->normal.y, vertex->normal.z,
+                                irr::video::SColor(vertex->color.a,
+                                                   vertex->color.r,
+                                                   vertex->color.g,
+                                                   vertex->color.b),
+                                vertex->tCoords.x, vertex->tCoords.y);
+      }
+
+    // Convert indices
+    size_t indexListSize =
+      ((iType == irr_video_EIT_16BIT) ? sizeof(irr::u16) : sizeof(irr::u32)) *
+      primCount * 3;
+    void* irrIndexList = malloc(indexListSize);
+
+    for (int i=0; i<primCount*3; i++)
+      {
+        if (iType == irr_video_EIT_16BIT)
+          {
+            uint16_t *index = (uint16_t*)indexList + i;
+            ((irr::u16*)irrIndexList)[i] = *index;
+          }
+        else
+          {
+            uint32_t *index = (uint32_t*)indexList + i;
+            ((irr::u32*)irrIndexList)[i] = *index;
+          }
+      }
+
+    ((irr::video::IVideoDriver*)driver)
+      ->drawVertexPrimitiveList(&irrVertices[0], vertexCount,
+                                irrIndexList, primCount,
+                                (irr::video::E_VERTEX_TYPE)vType,
+                                (irr::scene::E_PRIMITIVE_TYPE)pType,
+                                (irr::video::E_INDEX_TYPE)iType);
+
+    free(irrIndexList);
+  }
+
   int
   irr_video_endScene(irr_video_IVideoDriver* driver)
   {
@@ -89,4 +144,24 @@ extern "C" {
       ((irr::video::IVideoDriver*)driver)->getTexture(filename);
   }
 
+  void
+  irr_video_setMaterial(irr_video_IVideoDriver* driver,
+                        const irr_video_SMaterial material)
+  {
+    irr::video::SMaterial irrMaterial = irr::video::SMaterial();
+    irrMaterial.Lighting = material.lighting;
+    irrMaterial.Wireframe = material.wireframe;
+
+    ((irr::video::IVideoDriver*)driver)->setMaterial(irrMaterial);
+  }
+
+  void
+  irr_video_setTransform(irr_video_IVideoDriver* driver,
+                         irr_video_E_TRANSFORMATION_STATE state,
+                         irr_core_matrix4* mat)
+  {
+    ((irr::video::IVideoDriver*)driver)
+      ->setTransform((irr::video::E_TRANSFORMATION_STATE)state,
+                     *(irr::core::matrix4*)mat);
+  }
 }