forked from blender/blender
Implement transparent background for Storm delegate #71
@ -109,7 +109,7 @@ void FinalEngine::prepare_for_render(Depsgraph *depsgraph)
|
|||||||
if (light_tasks_delegate_) {
|
if (light_tasks_delegate_) {
|
||||||
light_tasks_delegate_->set_camera_and_viewport(
|
light_tasks_delegate_->set_camera_and_viewport(
|
||||||
free_camera_delegate_->GetCameraId(), pxr::GfVec4d(0, 0, resolution_[0], resolution_[1]));
|
free_camera_delegate_->GetCameraId(), pxr::GfVec4d(0, 0, resolution_[0], resolution_[1]));
|
||||||
tasks_ = light_tasks_delegate_->get_tasks();
|
tasks_ = light_tasks_delegate_->get_tasks(scene->r.alphamode == R_ALPHAPREMUL);
|
||||||
}
|
}
|
||||||
tasks_.push_back(render_task_delegate_->get_task());
|
tasks_.push_back(render_task_delegate_->get_task());
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ void FinalEngineGPU::render(Depsgraph *depsgraph)
|
|||||||
|
|
||||||
GPU_framebuffer_bind(framebuffer);
|
GPU_framebuffer_bind(framebuffer);
|
||||||
|
|
||||||
float clear_color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
|
float clear_color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||||
|
|
||||||
GPU_framebuffer_clear_color_depth(framebuffer, clear_color, 1.0f);
|
GPU_framebuffer_clear_color_depth(framebuffer, clear_color, 1.0f);
|
||||||
|
|
||||||
|
@ -18,12 +18,17 @@ LightTasksDelegate::LightTasksDelegate(pxr::HdRenderIndex *parent_index,
|
|||||||
GetRenderIndex().InsertTask<pxr::HdxSimpleLightTask>(this, simple_task_id_);
|
GetRenderIndex().InsertTask<pxr::HdxSimpleLightTask>(this, simple_task_id_);
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::HdTaskSharedPtrVector LightTasksDelegate::get_tasks()
|
pxr::HdTaskSharedPtrVector LightTasksDelegate::get_tasks(const bool isTransparent)
|
||||||
{
|
{
|
||||||
/*Note that this task is intended to be the first "Render Task",
|
/*Note that this task is intended to be the first "Render Task",
|
||||||
so that the AOV's are properly cleared, however it
|
so that the AOV's are properly cleared, however it
|
||||||
does not spawn a HdRenderPass.*/
|
does not spawn a HdRenderPass.*/
|
||||||
return {GetRenderIndex().GetTask(skydome_task_id_), GetRenderIndex().GetTask(simple_task_id_)};
|
pxr::HdTaskSharedPtrVector tasks;
|
||||||
|
if (!isTransparent) {
|
||||||
|
tasks.push_back(GetRenderIndex().GetTask(skydome_task_id_));
|
||||||
|
}
|
||||||
|
tasks.push_back(GetRenderIndex().GetTask(simple_task_id_));
|
||||||
|
return tasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightTasksDelegate::set_camera_and_viewport(pxr::SdfPath const &camera_id,
|
void LightTasksDelegate::set_camera_and_viewport(pxr::SdfPath const &camera_id,
|
||||||
|
@ -14,7 +14,7 @@ class LightTasksDelegate : public pxr::HdSceneDelegate {
|
|||||||
LightTasksDelegate(pxr::HdRenderIndex *parentIndex, pxr::SdfPath const &delegate_id);
|
LightTasksDelegate(pxr::HdRenderIndex *parentIndex, pxr::SdfPath const &delegate_id);
|
||||||
~LightTasksDelegate() override = default;
|
~LightTasksDelegate() override = default;
|
||||||
|
|
||||||
pxr::HdTaskSharedPtrVector get_tasks();
|
pxr::HdTaskSharedPtrVector get_tasks(const bool isTransparent);
|
||||||
void set_camera_and_viewport(pxr::SdfPath const &camera_id, pxr::GfVec4d const &viewport);
|
void set_camera_and_viewport(pxr::SdfPath const &camera_id, pxr::GfVec4d const &viewport);
|
||||||
|
|
||||||
/* Delegate methods */
|
/* Delegate methods */
|
||||||
|
@ -222,9 +222,10 @@ void ViewportEngine::render(Depsgraph * /* depsgraph */)
|
|||||||
/* Empty function */
|
/* Empty function */
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewportEngine::render(Depsgraph * /* depsgraph */, bContext *context)
|
void ViewportEngine::render(Depsgraph *depsgraph, bContext *context)
|
||||||
{
|
{
|
||||||
ViewSettings view_settings(context);
|
ViewSettings view_settings(context);
|
||||||
|
const Scene *scene = DEG_get_evaluated_scene(depsgraph);
|
||||||
if (view_settings.width() * view_settings.height() == 0) {
|
if (view_settings.width() * view_settings.height() == 0) {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
@ -254,7 +255,7 @@ void ViewportEngine::render(Depsgraph * /* depsgraph */, bContext *context)
|
|||||||
|
|
||||||
pxr::HdTaskSharedPtrVector tasks;
|
pxr::HdTaskSharedPtrVector tasks;
|
||||||
if (light_tasks_delegate_) {
|
if (light_tasks_delegate_) {
|
||||||
tasks = light_tasks_delegate_->get_tasks();
|
tasks = light_tasks_delegate_->get_tasks(scene->r.alphamode == R_ALPHAPREMUL);
|
||||||
}
|
}
|
||||||
tasks.push_back(render_task_delegate_->get_task());
|
tasks.push_back(render_task_delegate_->get_task());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user