Progress on new RTT widget, now I see a white rectangle

This commit is contained in:
Marianne Gagnon 2014-05-21 20:13:36 -04:00
parent bca5beeaa7
commit 60fead1eea
3 changed files with 24 additions and 18 deletions

View File

@ -1880,6 +1880,16 @@ void Skin::process3DPane(IGUIElement *element, const core::recti &rect,
if (!widget->m_event_handler->m_deactivated)
drawSpinnerChild(rect, widget, pressed, focused);
}
else if (type == WTYPE_MODEL_VIEW)
{
ModelViewWidget* mvw = dynamic_cast<ModelViewWidget*>(widget);
FrameBuffer* fb = mvw->getFrameBuffer();
if (fb->getRTT().size() > 0)
{
draw2DImageFromRTT(fb->getRTT()[0], 512, 512,
rect, core::rect<s32>(0, 0, 512, 512), NULL, true);
}
}
else if (type == WTYPE_ICON_BUTTON || type == WTYPE_MODEL_VIEW)
{
drawIconButton(rect, widget, pressed, focused);

View File

@ -35,7 +35,10 @@ using namespace irr::gui;
ModelViewWidget::ModelViewWidget() :
IconButtonWidget(IconButtonWidget::SCALE_MODE_KEEP_TEXTURE_ASPECT_RATIO, false, false)
{
//FIXME: find nicer way than overriding what IconButtonWidget's constructor already set...
m_frame_buffer = NULL;
m_rtt_main_node = NULL;
m_camera = NULL;
m_light = NULL;
m_type = WTYPE_MODEL_VIEW;
m_rtt_provider = NULL;
m_rotation_mode = ROTATE_OFF;
@ -161,31 +164,20 @@ void ModelViewWidget::update(float delta)
std::string name = "model view ";
name += m_properties[PROP_ID].c_str();
m_rtt_provider = new RTT(512, 512);
setupRTTScene(m_models, m_model_location, m_model_scale, m_model_frames);
if (m_rtt_main_node == NULL)
setupRTTScene(m_models, m_model_location, m_model_scale, m_model_frames);
}
irr_driver->setRTT(m_rtt_provider);
std::vector<IrrDriver::GlowData> glows;
irr_driver->renderScene(m_camera, glows, GUIEngine::getLatestDt(), false);
FrameBuffer* fb = irr_driver->getPostProcessing()->render(m_camera);
m_frame_buffer = irr_driver->getPostProcessing()->render(m_camera);
glViewport(0, 0, UserConfigParams::m_width, UserConfigParams::m_height);
/*
if (m_texture != NULL)
{
setImage(m_texture);
}
else
{
m_rtt_unsupported = true;
}
*/
//irr_driver->setRTT(NULL);
irr_driver->onUnloadWorld();
m_rtt_provider = NULL;
irr_driver->setRTT(NULL);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
irr_driver->getSceneManager()->setActiveCamera(NULL);
}

View File

@ -64,6 +64,8 @@ namespace GUIEngine
scene::ILightSceneNode *m_light;
FrameBuffer *m_frame_buffer;
public:
LEAK_CHECK()
@ -100,6 +102,8 @@ namespace GUIEngine
AlignedArray<Vec3>& mesh_location,
AlignedArray<Vec3>& mesh_scale,
const std::vector<int>& model_frames);
FrameBuffer* getFrameBuffer() { return m_frame_buffer; }
};
}