Moved a few things to shader buffers, added some bugs that I have to fix
This commit is contained in:
@ -20,6 +20,32 @@ UICanvas::UICanvas(SceneItem *item) :
|
||||
{
|
||||
}
|
||||
|
||||
void UICanvas::rebufferShaderParameters() {
|
||||
struct UICanvasShaderParameterBufferData data;
|
||||
|
||||
switch(this->drawType) {
|
||||
case UI_DRAW_TYPE_WORLD_ABSOLUTE:
|
||||
data.projection = camera->getProjection();
|
||||
data.view = camera->transform->getWorldTransform();
|
||||
break;
|
||||
|
||||
case UI_DRAW_TYPE_WORLD_CAMERA_RELATIVE:
|
||||
data.projection = glm::ortho(
|
||||
0.0f,
|
||||
camera->getRenderTarget()->getWidth(),
|
||||
camera->getRenderTarget()->getHeight(),
|
||||
0.0f
|
||||
);
|
||||
data.view = glm::mat4(1.0f);
|
||||
break;
|
||||
|
||||
default:
|
||||
assertUnreachable();
|
||||
}
|
||||
|
||||
this->shaderBuffer.buffer(&data);
|
||||
}
|
||||
|
||||
float_t UICanvas::getWidth() {
|
||||
return w;
|
||||
}
|
||||
@ -36,41 +62,22 @@ float_t UICanvas::getContentHeight() {
|
||||
return this->getHeight();
|
||||
}
|
||||
|
||||
void UICanvas::getProjectionAndView(glm::mat4 *proj, glm::mat4 *view) {
|
||||
assertNotNull(proj);
|
||||
assertNotNull(view);
|
||||
|
||||
switch(this->drawType) {
|
||||
case UI_DRAW_TYPE_WORLD_ABSOLUTE:
|
||||
*proj = camera->getProjection();
|
||||
*view = camera->transform->getWorldTransform();
|
||||
break;
|
||||
|
||||
case UI_DRAW_TYPE_WORLD_CAMERA_RELATIVE:
|
||||
*proj = glm::ortho(
|
||||
0.0f,
|
||||
camera->getRenderTarget()->getWidth(),
|
||||
camera->getRenderTarget()->getHeight(),
|
||||
0.0f
|
||||
);
|
||||
*view = glm::mat4(1.0f);
|
||||
break;
|
||||
|
||||
default:
|
||||
assertUnreachable();
|
||||
}
|
||||
}
|
||||
|
||||
void UICanvas::onStart() {
|
||||
if(camera == nullptr) camera = getScene()->findComponent<Camera>();
|
||||
|
||||
this->shaderBuffer.init();
|
||||
this->rebufferShaderParameters();
|
||||
|
||||
useEffectWithTeardown([&]{
|
||||
if(camera == nullptr) return evtRenderResize = [&] {};
|
||||
this->w = camera->getRenderTarget()->getWidth();
|
||||
this->h = camera->getRenderTarget()->getHeight();
|
||||
this->rebufferShaderParameters();
|
||||
|
||||
return evtRenderResize = useEvent([&](float_t w, float_t h){
|
||||
this->w = w;
|
||||
this->h = h;
|
||||
this->rebufferShaderParameters();
|
||||
|
||||
auto comps = this->item->findChildren<UIComponent>();
|
||||
auto itComps = comps.begin();
|
||||
|
Reference in New Issue
Block a user