Quellcode durchsuchen

Added a SceneMesh sheet for entity editor, made SceneMeshes that have VBOs and a skeleton not use VBOs unless the setting to send bone matrices to the material is on

Ivan Safrin vor 11 Jahren
Ursprung
Commit
4c3720bfed

+ 6 - 0
Core/Contents/Source/PolySceneMesh.cpp

@@ -393,6 +393,12 @@ void SceneMesh::Render() {
         }
     }
     
+    bool useVertexBuffer = this->useVertexBuffer;
+
+    if(useVertexBuffer && skeleton && !sendBoneMatricesToMaterial) {
+        useVertexBuffer = false;
+    }
+    
 	if(useVertexBuffer) {
         VertexBuffer *vb = mesh->getVertexBuffer();
         if(vb){

+ 1 - 0
IDE/Contents/Include/EntityEditorPropertyView.h

@@ -61,6 +61,7 @@ class EntityEditorPropertyView : public UIElement {
         SceneCurveSheet *curveSheet;
         CameraSheet *cameraSheet;
         EntityPropSheet *propSheet;
+        SceneMeshSheet *sceneMeshSheet;
     
         ShaderTexturesSheet *shaderTexturesSheet;
         ShaderOptionsSheet *shaderOptionsSheet;

+ 3 - 2
IDE/Contents/Include/PolycodeProps.h

@@ -722,7 +722,7 @@ class SceneLightSheet : public PropSheet {
         SliderProp *shadowMapFOVProp;
         NumberProp *shadowResolutionProp;
 };
-/*
+
 class SceneMeshSheet : public PropSheet {
     public:
         SceneMeshSheet();
@@ -733,9 +733,10 @@ class SceneMeshSheet : public PropSheet {
     
     private:
     
+        BoolProp *gpuSkinningProp;
         SceneMesh *sceneMesh;
 };
-*/
+
 
 class ScenePrimitiveSheet : public PropSheet {
 public:

+ 7 - 1
IDE/Contents/Source/EntityEditorPropertyView.cpp

@@ -70,6 +70,10 @@ EntityEditorPropertyView::EntityEditorPropertyView() : UIElement() {
     primitiveSheet = new ScenePrimitiveSheet();
     entityProps->addPropSheet(primitiveSheet);
     primitiveSheet->addEventListener(this, PropEvent::EVENT_PROP_CHANGE);
+
+    sceneMeshSheet = new SceneMeshSheet();
+    entityProps->addPropSheet(sceneMeshSheet);
+    sceneMeshSheet->addEventListener(this, PropEvent::EVENT_PROP_CHANGE);
     
     soundSheet = new SoundSheet();
     entityProps->addPropSheet(soundSheet);
@@ -165,7 +169,9 @@ void EntityEditorPropertyView::setEntity(Entity *entity) {
     } else {
         primitiveSheet->setScenePrimitive(NULL);
     }
-
+    
+    sceneMeshSheet->setSceneMesh(sceneMesh);
+    
     SceneSound *sound = dynamic_cast<SceneSound*>(entity);
     soundSheet->setSound(sound);
 

+ 23 - 3
IDE/Contents/Source/PolycodeProps.cpp

@@ -2838,10 +2838,13 @@ void SceneLightSheet::handleEvent(Event *event) {
     }
     PropSheet::handleEvent(event);
 }
-/*
-SceneMeshSheet::SceneMeshSheet() : PropSheet("MESH FILE", "scene_mesh_file") {
+
+SceneMeshSheet::SceneMeshSheet() : PropSheet("SCENE MESH", "scene_mesh") {
     enabled = false;
     sceneMesh = NULL;
+    
+    gpuSkinningProp = new BoolProp("GPU Skinning");
+    addProp(gpuSkinningProp);
 }
 
 SceneMeshSheet::~SceneMeshSheet() {
@@ -2849,13 +2852,30 @@ SceneMeshSheet::~SceneMeshSheet() {
 }
 
 void SceneMeshSheet::setSceneMesh(SceneMesh *mesh) {
+    this->sceneMesh = mesh;
     
+    if(sceneMesh) {
+        
+        gpuSkinningProp->set(sceneMesh->sendBoneMatricesToMaterial);
+        
+        enabled = true;
+    } else {
+        enabled = false;
+    }
 }
 
 void SceneMeshSheet::handleEvent(Event *event) {
+    if(!sceneMesh) {
+        return;
+    }
     
+    if(event->getDispatcher() == gpuSkinningProp) {
+        sceneMesh->sendBoneMatricesToMaterial = gpuSkinningProp->get();
+    }
+    
+    PropSheet::handleEvent(event);
 }
-*/
+
 
 ScenePrimitiveSheet::ScenePrimitiveSheet() : PropSheet("PRIMITIVE", "scene_primitive") {
     typeProp = new ComboProp("Type");