Moved a few things to shader buffers, added some bugs that I have to fix

This commit is contained in:
2023-05-30 08:35:18 -07:00
parent 8da23b123a
commit b6cbd982eb
14 changed files with 141 additions and 83 deletions

View File

@ -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();