1#include "GuiRenderTask.h"
3#include "Rendering/IContext.h"
4#include "Rendering/ITextures.h"
5#include "Renderer/InspectorGui/InspectorGuiHelper.h"
6#include "Renderer/InspectorGui/InspectorGuiRenderer.h"
10#include "Renderer/Renderer.h"
11#include "Renderer/RenderTexture.h"
12#include "Renderer/RenderTarget.h"
15#include "GuiRenderComponent.h"
17#include <glm/gtc/type_ptr.hpp>
19void Cogs::Core::GuiRenderTask::apply(RenderTaskContext * renderContext)
21 RenderInstrumentationScope(renderContext->device->getImmediateContext(), SCOPE_RENDERING,
"GuiRenderTask::apply");
23 auto renderComponent = guiRenderComponent.
resolveComponent<GuiRenderComponent>();
25 if (!renderComponent) {
29 auto guiComponent = renderComponent->guiComponent.resolveComponent<GuiComponent>();
31 if (!guiComponent || !guiComponent->document) {
35 auto * context = renderContext->context;
38 auto & guiData = guiSystem->getData(guiComponent);
40 if (!renderComponent->isVisible())
return;
41 if (renderComponent->target && !renderTexture)
return;
42 if (!guiData.htmlDocument)
return;
43 if (!guiData.invalidated)
return;
45 glm::vec2 guiSize = guiData.size;
48 renderContext->renderer->getInspectorGuiRenderer()->beginRender(renderContext->context, renderContext->renderer);
51 ImGui::GetIO().DisplaySize = ImVec2(guiSize.x, guiSize.y);
53 const ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar |
54 ImGuiWindowFlags_NoResize |
55 ImGuiWindowFlags_NoScrollbar |
56 ImGuiWindowFlags_NoMove |
57 ImGuiWindowFlags_NoSavedSettings |
58 ImGuiWindowFlags_NoInputs |
59 ImGuiWindowFlags_NoFocusOnAppearing;
61 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0, 0 });
62 ImGui::SetNextWindowPos(ImVec2(0.0f, 0.0f));
63 ImGui::SetNextWindowSize(ImVec2(guiSize.x, guiSize.y));
64 ImGui::SetNextWindowBgAlpha(0.0f);
65 ImGui::Begin(
"Gui",
nullptr, flags);
67 guiData.htmlDocument->render((
int)guiSize.x, litehtml::render_all);
71 guiData.htmlDocument->draw((litehtml::uint_ptr)0x1234, 0, 0, &clip);
77 auto deviceContext = renderContext->device->getImmediateContext();
79 deviceContext->setRenderTarget(renderTexture->renderTarget->renderTargetHandle, renderTexture->renderTarget->depthTargetHandle);
80 deviceContext->clearRenderTarget(glm::value_ptr(renderComponent->clearColor));
82 renderContext->renderer->getInspectorGuiRenderer()->endRender(renderContext->context, renderContext->renderer);
84 deviceContext->setRenderTarget(renderContext->defaultRenderTarget->renderTargetHandle, renderContext->defaultRenderTarget->depthTargetHandle);
87 renderContext->device->getTextures()->generateMipmaps(renderTexture->textureHandle);
91 guiData.invalidated =
false;
static Reflection::TypeId getTypeId()
Get the type id of the component type used by the system.
ComponentType * resolveComponent() const
@ GenerateMipMaps
The texture supports automatic mipmap generation performed by the graphics device.