コード例 #1
0
void MeshRenderProcessorGL::process() {

    if (imageInport_.isConnected()){
        utilgl::activateTargetAndCopySource(outport_, imageInport_);
    }
    else{
        utilgl::activateAndClearTarget(outport_, COLOR_DEPTH);
    }
    
    shader_.activate();

    utilgl::setShaderUniforms(shader_, camera_, "camera_");
    utilgl::setShaderUniforms(shader_, lightingProperty_, "light_");
    utilgl::setShaderUniforms(shader_, overrideColor_);

    utilgl::GlBoolState depthTest(GL_DEPTH_TEST, true);
    utilgl::CullFaceState culling(cullFace_.get());
    utilgl::PolygonModeState polygon(polygonMode_.get(), renderLineWidth_, renderPointSize_);

    for (auto& drawer : drawers_) {
        utilgl::setShaderUniforms(shader_, *(drawer.second->getGeometry()), "geometry_");
        drawer.second->draw();
    }

    shader_.deactivate();
    utilgl::deactivateCurrentTarget();
}
コード例 #2
0
ファイル: meshpicking.cpp プロジェクト: Ojaswi/inviwo
void MeshPicking::process() {
    utilgl::activateAndClearTarget(outport_, ImageType::ColorDepthPicking);

    MeshDrawerGL drawer(meshInport_.getData().get());
    shader_.activate();
    shader_.setUniform("pickingColor_", picking_.getPickingObject()->getPickingColor());

    const auto& ct = meshInport_.getData()->getCoordinateTransformer(camera_.get());

    mat4 dataToClip =
        ct.getWorldToClipMatrix() * glm::translate(position_.get()) * ct.getDataToWorldMatrix();

    shader_.setUniform("dataToClip", dataToClip);

    {
        utilgl::GlBoolState depthTest(GL_DEPTH_TEST, true);
        utilgl::CullFaceState culling(cullFace_.get());
        utilgl::DepthFuncState depthfunc(GL_ALWAYS);
        drawer.draw();
    }

    shader_.deactivate();
    utilgl::deactivateCurrentTarget();
    compositePortsToOutport(outport_, ImageType::ColorDepthPicking, imageInport_);
}
コード例 #3
0
void PassGBuffer_Fluid::addParticlesSolid( PSET_RID psid, const PSetInstance &inst, uint32 n )
{
    if(!culling(psid, inst)) { return; }

    const ParticleSet *rc = atmGetParticleSet(psid);
    uint32 num_particles = rc->getNumParticles();
    PSetUpdateInfo tmp;
    tmp.psid        = psid;
    tmp.instanceid  = m_rigid_so.instance_data.size();
    tmp.num = n!=0 ? std::min(n, num_particles) : num_particles;
    m_rigid_so.update_info.push_back(tmp);
    m_rigid_so.instance_data.push_back(inst);
}
コード例 #4
0
void MeshRenderProcessorGLSR::process() {
 /*   if (imageInport_.isConnected()) {
        utilgl::activateTargetAndCopySource(outport_, imageInport_);
    } else {
        utilgl::activateAndClearTarget(outport_, ImageType::ColorDepth);
    }  */  
	utilgl::activateAndClearTarget(outport_, ImageType::ColorDepth);

	if (meshName_.isConnected())
	{
		auto inDescr = *meshName_.getData();
		sceneDesc_->setInputName(inDescr.getInputName());

	}
	//LogInfo(inport_.getContentInfo());
	//LogInfo(inport_.getClassIdentifier());
	
    shader_.activate();
    utilgl::setShaderUniforms(shader_, camera_, "camera_");
	//std::cout << "Camera Position = " << camera_.position.x
	LogInfo(camera_.getLookFrom());
    utilgl::setShaderUniforms(shader_, lightingProperty_, "light_");
	LogInfo(lightingProperty_.silhouetteThreshold_);
    LogInfo(lightingProperty_.depthThreshold_);
	LogInfo(lightingProperty_.specularExponent_);
	utilgl::setShaderUniforms(shader_, lightingProperty_.silhouetteThreshold_, "threshold_sil");
    utilgl::setShaderUniforms(shader_, lightingProperty_.depthThreshold_, "threshold_depth");
    utilgl::setShaderUniforms(shader_, overrideColor_);

    utilgl::GlBoolState depthTest(GL_DEPTH_TEST, enableDepthTest_.get());
    utilgl::CullFaceState culling(cullFace_.get());
    utilgl::PolygonModeState polygon(polygonMode_.get(), renderLineWidth_, renderPointSize_);

    for (auto& drawer : drawers_) {
        utilgl::setShaderUniforms(shader_, *(drawer.second->getGeometry()), "geometry_");
        drawer.second->draw();
    }

	sceneDesc_->setImageDimensions(outport_.getDimensions());
	sceneDesc_->setShaderName(lightingProperty_.shadingMode_.getSelectedDisplayName());
	sceneDesc_->setLayerDescription(layersDeclaration_);
	/*setImageDimensions(*sceneDesc_);
	setShaderName(*sceneDesc_);
	setLayerDescription(*sceneDesc_);*/
	sceneDesc_->printDescription();
	sceneDescOutport_.setData(sceneDesc_);

    utilgl::deactivateCurrentTarget();

}
コード例 #5
0
ファイル: main.cpp プロジェクト: lragnarsson/Emerald-Engine
void run()
{
    renderer.running = true;
    while (renderer.running) {
        Profiler::start_timer("-> Frame time");

        handle_input();

        update_camera();

        animate_models();

        culling();

        renderer.render(camera);

        Profiler::start_timer("Swap");
        SDL_GL_SwapWindow(main_window);
        Profiler::stop_timer("Swap");
        Profiler::stop_timer("-> Frame time");
    }
}
コード例 #6
0
ファイル: blender_object.cpp プロジェクト: sobotka/blender
void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph, float motion_time)
{
  /* layer data */
  bool motion = motion_time != 0.0f;

  if (!motion) {
    /* prepare for sync */
    light_map.pre_sync();
    mesh_map.pre_sync();
    object_map.pre_sync();
    particle_system_map.pre_sync();
    motion_times.clear();
  }
  else {
    mesh_motion_synced.clear();
  }

  /* initialize culling */
  BlenderObjectCulling culling(scene, b_scene);

  /* object loop */
  bool cancel = false;
  bool use_portal = false;

  BL::ViewLayer b_view_layer = b_depsgraph.view_layer_eval();

  BL::Depsgraph::object_instances_iterator b_instance_iter;
  for (b_depsgraph.object_instances.begin(b_instance_iter);
       b_instance_iter != b_depsgraph.object_instances.end() && !cancel;
       ++b_instance_iter) {
    BL::DepsgraphObjectInstance b_instance = *b_instance_iter;
    BL::Object b_ob = b_instance.object();

    /* load per-object culling data */
    culling.init_object(scene, b_ob);

    /* test if object needs to be hidden */
    const bool show_self = b_instance.show_self();
    const bool show_particles = b_instance.show_particles();

    if (show_self || show_particles) {
      /* object itself */
      sync_object(b_depsgraph,
                  b_view_layer,
                  b_instance,
                  motion_time,
                  show_self,
                  show_particles,
                  culling,
                  &use_portal);
    }

    cancel = progress.get_cancel();
  }

  progress.set_sync_status("");

  if (!cancel && !motion) {
    sync_background_light(use_portal);

    /* handle removed data and modified pointers */
    if (light_map.post_sync())
      scene->light_manager->tag_update(scene);
    if (mesh_map.post_sync())
      scene->mesh_manager->tag_update(scene);
    if (object_map.post_sync())
      scene->object_manager->tag_update(scene);
    if (particle_system_map.post_sync())
      scene->particle_system_manager->tag_update(scene);
  }

  if (motion)
    mesh_motion_synced.clear();
}
コード例 #7
0
ファイル: Camera.cpp プロジェクト: lalalaring/WIP
void WIPCamera::culling(WIPLayer* layer)
{
	culling(layer,((WIPObjectsLayer*)layer)->_batch);
}
コード例 #8
0
ファイル: rendermesh.cpp プロジェクト: 1yvT0s/corgi
void RenderMeshComponent::AddFromRawData(corgi::EntityRef& entity,
                                         const void* raw_data) {
  auto rendermesh_def = static_cast<const RenderMeshDef*>(raw_data);

  // You need to call asset_manager before you can add from raw data,
  // otherwise it can't load up new meshes!
  assert(asset_manager_ != nullptr);
  assert(rendermesh_def->source_file() != nullptr);
  assert(rendermesh_def->shader() != nullptr);

  RenderMeshData* rendermesh_data = AddEntity(entity);

  rendermesh_data->mesh_filename = rendermesh_def->source_file()->c_str();
  rendermesh_data->shader_filename = rendermesh_def->shader()->c_str();

  rendermesh_data->mesh =
      asset_manager_->LoadMesh(rendermesh_def->source_file()->c_str());
  assert(rendermesh_data->mesh != nullptr);

  // Allocate the array to hold shader default pose's transforms.
  assert(rendermesh_data->shader_transforms == nullptr);
  const uint8_t num_shader_transforms =
      rendermesh_data->mesh->num_shader_bones();
  rendermesh_data->num_shader_transforms = num_shader_transforms;
  if (num_shader_transforms > 0) {
    rendermesh_data->shader_transforms =
        new mathfu::AffineTransform[num_shader_transforms];
    for (uint8_t i = 0; i < num_shader_transforms; ++i) {
      rendermesh_data->shader_transforms[i] = mathfu::kAffineIdentity;
    }
  }

  rendermesh_data->shader =
      asset_manager_->LoadShader(rendermesh_def->shader()->c_str());
  assert(rendermesh_data->shader != nullptr);

  rendermesh_data->visible = rendermesh_def->visible();
  rendermesh_data->default_pose = rendermesh_def->default_pose();

  rendermesh_data->pass_mask = 0;
  if (rendermesh_def->render_pass() != nullptr) {
    for (size_t i = 0; i < rendermesh_def->render_pass()->size(); i++) {
      int render_pass = rendermesh_def->render_pass()->Get(i);
      assert(render_pass < RenderPass_Count);
      rendermesh_data->pass_mask |= 1 << render_pass;
    }
  } else {
    // Anything unspecified is assumed to be opaque.
    rendermesh_data->pass_mask = (1 << RenderPass_Opaque);
  }

  if (rendermesh_def->culling() != nullptr) {
    for (size_t i = 0; i < rendermesh_def->culling()->size(); i++) {
      int culling_test = rendermesh_def->culling()->Get(i);
      assert(culling_test < CullingTest_Count);
      rendermesh_data->culling_mask |= 1 << culling_test;
    }
  }

  // TODO: Load this from a flatbuffer file instead of setting it.
  rendermesh_data->tint = mathfu::kOnes4f;
}
コード例 #9
0
void ABufferGeometryGLProcessor::geometryRender() {
    ABUFFER_PROFILE("Total-Time");

    // tempImage_ = new Image(outport_.getDimensions());
    auto tempImage_ = outport_.getEditableData();
    ImageGL* tempImageGL = tempImage_->getEditableRepresentation<ImageGL>();
    ivec2 dim = outport_.getDimensions();

    bool abufferEnabled = abuffer_.settings_.abufferEnable_.get();

    // abuffer initialization
    if (abufferEnabled) {
        ABUFFER_PROFILE("Initialize-abuffer");
        abuffer_.abuffer_initABuffer(dim, updateRequried_);

        LGL_ERROR;
        abuffer_.abuffer_addShaderDefinesAndBuild(&abuffer_.resolveABufferShader_);

        LGL_ERROR;
        ABUFFER_PROFILE("Reset-abuffer");
        abuffer_.aBuffer_resetLinkList(tempImageGL);

        updateRequried_ = false;
    }

    abuffer_.abuffer_addShaderDefinesAndBuild(&abufferGeometryShader_);

    // Rendering
    {
        ABUFFER_PROFILE("Rendering");

        tempImageGL = tempImage_->getEditableRepresentation<ImageGL>();
        utilgl::activateAndClearTarget(outport_);

        // initialize shader
        abufferGeometryShader_.activate();
        // LGL_ERROR;
        utilgl::setShaderUniforms(abufferGeometryShader_, camera_, "camera_");
        // LGL_ERROR;
        utilgl::setShaderUniforms(abufferGeometryShader_, lightingProperty_, "light_");
        // LGL_ERROR;

        if (abufferEnabled) {
            abuffer_.abuffer_addUniforms(&abufferGeometryShader_);
            abufferGeometryShader_.setUniform("globalTransparency_", transparency_.get());
        }

        utilgl::GlBoolState depthTest(GL_DEPTH_TEST, true);
        utilgl::CullFaceState culling(cullFace_.get());
        utilgl::PolygonModeState polygon(polygonMode_.get(), renderLineWidth_, renderPointSize_);

        for (auto& drawer : drawers_) {
            utilgl::setShaderUniforms(abufferGeometryShader_, *(drawer.second->getGeometry()),
                                      "geometry_");
            drawer.second->draw();
        }

        abufferGeometryShader_.deactivate();
        utilgl::deactivateCurrentTarget();

        glMemoryBarrierEXT(GL_ALL_BARRIER_BITS_EXT);
    }

    // abuffer resolve
    if (abufferEnabled) {
        ABUFFER_PROFILE("Resolving-abuffer");
        utilgl::activateAndClearTarget(outport_);
        abuffer_.aBuffer_resolveLinkList(tempImageGL);
        utilgl::deactivateCurrentTarget();
    }
}