Basic UI quad, yay
This commit is contained in:
Vendored
+7
-2
@@ -4,6 +4,7 @@
|
|||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.h": "cpp",
|
"*.h": "cpp",
|
||||||
"*.ush": "hlsl",
|
"*.ush": "hlsl",
|
||||||
|
"*.pl": "prolog",
|
||||||
"xstring": "cpp",
|
"xstring": "cpp",
|
||||||
"list": "cpp",
|
"list": "cpp",
|
||||||
"xhash": "cpp",
|
"xhash": "cpp",
|
||||||
@@ -108,7 +109,10 @@
|
|||||||
"coroutine": "cpp",
|
"coroutine": "cpp",
|
||||||
"*.tcc": "cpp",
|
"*.tcc": "cpp",
|
||||||
"stop_token": "cpp",
|
"stop_token": "cpp",
|
||||||
"span": "cpp"
|
"span": "cpp",
|
||||||
|
"charconv": "cpp",
|
||||||
|
"format": "cpp",
|
||||||
|
"semaphore": "cpp"
|
||||||
},
|
},
|
||||||
"cmake.skipConfigureIfCachePresent": false,
|
"cmake.skipConfigureIfCachePresent": false,
|
||||||
"cmake.configureArgs": [
|
"cmake.configureArgs": [
|
||||||
@@ -118,5 +122,6 @@
|
|||||||
"C_Cpp.default.intelliSenseMode": "msvc-x64",
|
"C_Cpp.default.intelliSenseMode": "msvc-x64",
|
||||||
"files.watcherExclude": {
|
"files.watcherExclude": {
|
||||||
"**/target": true
|
"**/target": true
|
||||||
}
|
},
|
||||||
|
"C_Cpp.errorSquiggles": "Disabled"
|
||||||
}
|
}
|
||||||
@@ -40,6 +40,8 @@ list (APPEND EXTRA_CMAKE_ARGS
|
|||||||
#-----------------KTX----------------------------
|
#-----------------KTX----------------------------
|
||||||
list(APPEND DEPENDENCIES ktx)
|
list(APPEND DEPENDENCIES ktx)
|
||||||
|
|
||||||
|
find_program(BASH_EXECUTABLE git-bash)
|
||||||
|
|
||||||
add_subdirectory(${KTX_ROOT} ${KTX_ROOT})
|
add_subdirectory(${KTX_ROOT} ${KTX_ROOT})
|
||||||
|
|
||||||
#--------------------JSON------------------
|
#--------------------JSON------------------
|
||||||
|
|||||||
Vendored
+1
-1
Submodule external/ktx updated: 68674a69ca...a2ccc90eff
@@ -0,0 +1,31 @@
|
|||||||
|
struct VertexStageOutput
|
||||||
|
{
|
||||||
|
float4 position : SV_Position;
|
||||||
|
float2 uvCoords : TEXCOORD;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
[shader("vertex")]
|
||||||
|
VertexStageOutput vertexMain(uint vertexId : SV_VertexID)
|
||||||
|
{
|
||||||
|
float2 coordinates[4] = {
|
||||||
|
float2(0, 0),
|
||||||
|
float2(0, 1),
|
||||||
|
float2(1, 0),
|
||||||
|
float2(1, 1)
|
||||||
|
};
|
||||||
|
VertexStageOutput output;
|
||||||
|
output.uvCoords = coordinates[vertexId];
|
||||||
|
output.position = float4(output.uvCoords * 2 - 1, 1, 1);
|
||||||
|
output.position.y = -output.position.y;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
[shader("fragment")]
|
||||||
|
float4 fragmentMain(
|
||||||
|
float4 position : SV_Position,
|
||||||
|
float2 uvCoords : TEXCOORD
|
||||||
|
) : SV_Target
|
||||||
|
{
|
||||||
|
return float4(0, 1, 0, 1);
|
||||||
|
}
|
||||||
@@ -30,7 +30,7 @@ public:
|
|||||||
virtual PWindow createWindow(const WindowCreateInfo &createInfo) = 0;
|
virtual PWindow createWindow(const WindowCreateInfo &createInfo) = 0;
|
||||||
virtual PViewport createViewport(PWindow owner, const ViewportCreateInfo &createInfo) = 0;
|
virtual PViewport createViewport(PWindow owner, const ViewportCreateInfo &createInfo) = 0;
|
||||||
|
|
||||||
virtual PRenderPass createRenderPass(PRenderTargetLayout layout) = 0;
|
virtual PRenderPass createRenderPass(PRenderTargetLayout layout, PViewport renderArea) = 0;
|
||||||
virtual void beginRenderPass(PRenderPass renderPass) = 0;
|
virtual void beginRenderPass(PRenderPass renderPass) = 0;
|
||||||
virtual void endRenderPass() = 0;
|
virtual void endRenderPass() = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -549,6 +549,7 @@ public:
|
|||||||
virtual void bindVertexBuffer(const Array<VertexInputStream>& streams) = 0;
|
virtual void bindVertexBuffer(const Array<VertexInputStream>& streams) = 0;
|
||||||
virtual void bindIndexBuffer(Gfx::PIndexBuffer indexBuffer) = 0;
|
virtual void bindIndexBuffer(Gfx::PIndexBuffer indexBuffer) = 0;
|
||||||
virtual void draw(const MeshBatchElement& data) = 0;
|
virtual void draw(const MeshBatchElement& data) = 0;
|
||||||
|
virtual void draw(uint32 vertexCount, uint32 instanceCount, int32 firstVertex, uint32 firstInstance) = 0;
|
||||||
std::string name;
|
std::string name;
|
||||||
};
|
};
|
||||||
DEFINE_REF(RenderCommand)
|
DEFINE_REF(RenderCommand)
|
||||||
@@ -588,6 +589,14 @@ public:
|
|||||||
{
|
{
|
||||||
return samples;
|
return samples;
|
||||||
}
|
}
|
||||||
|
uint32 getSizeX() const
|
||||||
|
{
|
||||||
|
return sizeX;
|
||||||
|
}
|
||||||
|
uint32 getSizeY() const
|
||||||
|
{
|
||||||
|
return sizeY;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint32 sizeX;
|
uint32 sizeX;
|
||||||
@@ -628,7 +637,11 @@ public:
|
|||||||
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
||||||
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
||||||
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE)
|
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE)
|
||||||
: loadOp(loadOp), storeOp(storeOp), stencilLoadOp(stencilLoadOp), stencilStoreOp(stencilStoreOp), texture(texture)
|
: loadOp(loadOp)
|
||||||
|
, storeOp(storeOp)
|
||||||
|
, stencilLoadOp(stencilLoadOp)
|
||||||
|
, stencilStoreOp(stencilStoreOp)
|
||||||
|
, texture(texture)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
virtual ~RenderTargetAttachment()
|
virtual ~RenderTargetAttachment()
|
||||||
@@ -646,6 +659,14 @@ public:
|
|||||||
{
|
{
|
||||||
return texture->getNumSamples();
|
return texture->getNumSamples();
|
||||||
}
|
}
|
||||||
|
virtual uint32 getSizeX() const
|
||||||
|
{
|
||||||
|
return texture->getSizeX();
|
||||||
|
}
|
||||||
|
virtual uint32 getSizeY() const
|
||||||
|
{
|
||||||
|
return texture->getSizeY();
|
||||||
|
}
|
||||||
inline SeAttachmentLoadOp getLoadOp() const { return loadOp; }
|
inline SeAttachmentLoadOp getLoadOp() const { return loadOp; }
|
||||||
inline SeAttachmentStoreOp getStoreOp() const { return storeOp; }
|
inline SeAttachmentStoreOp getStoreOp() const { return storeOp; }
|
||||||
inline SeAttachmentLoadOp getStencilLoadOp() const { return stencilLoadOp; }
|
inline SeAttachmentLoadOp getStencilLoadOp() const { return stencilLoadOp; }
|
||||||
@@ -665,7 +686,7 @@ class SwapchainAttachment : public RenderTargetAttachment
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SwapchainAttachment(PWindow owner,
|
SwapchainAttachment(PWindow owner,
|
||||||
SeAttachmentLoadOp loadOp = SE_ATTACHMENT_LOAD_OP_CLEAR,
|
SeAttachmentLoadOp loadOp = SE_ATTACHMENT_LOAD_OP_LOAD,
|
||||||
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
||||||
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
||||||
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE)
|
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE)
|
||||||
@@ -689,7 +710,14 @@ public:
|
|||||||
{
|
{
|
||||||
return owner->getNumSamples();
|
return owner->getNumSamples();
|
||||||
}
|
}
|
||||||
|
virtual uint32 getSizeX() const
|
||||||
|
{
|
||||||
|
return owner->getSizeX();
|
||||||
|
}
|
||||||
|
virtual uint32 getSizeY() const
|
||||||
|
{
|
||||||
|
return owner->getSizeY();
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
PWindow owner;
|
PWindow owner;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,44 +4,6 @@
|
|||||||
|
|
||||||
namespace Seele
|
namespace Seele
|
||||||
{
|
{
|
||||||
/*#define MAX_TEX_CHANNELS 8
|
|
||||||
struct MeshDescription
|
|
||||||
{
|
|
||||||
Array<Gfx::VertexAttribute> layout;
|
|
||||||
Gfx::PVertexDeclaration declaration;
|
|
||||||
uint32 getStride() const
|
|
||||||
{
|
|
||||||
return getNumFloats() * sizeof(float);
|
|
||||||
}
|
|
||||||
uint32 getNumFloats() const
|
|
||||||
{
|
|
||||||
uint32 vertexSize = 0;
|
|
||||||
for(auto a : layout)
|
|
||||||
{
|
|
||||||
switch (a)
|
|
||||||
{
|
|
||||||
case Gfx::VertexAttribute::POSITION:
|
|
||||||
case Gfx::VertexAttribute::NORMAL:
|
|
||||||
case Gfx::VertexAttribute::TANGENT:
|
|
||||||
case Gfx::VertexAttribute::BITANGENT:
|
|
||||||
vertexSize += 3;
|
|
||||||
break;
|
|
||||||
case Gfx::VertexAttribute::TEXCOORD:
|
|
||||||
vertexSize += 2;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return vertexSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend class boost::serialization::access;
|
|
||||||
template<class Archive>
|
|
||||||
void serialize(Archive& ar, const unsigned int version)
|
|
||||||
{
|
|
||||||
ar & layout;
|
|
||||||
//TODO declaration
|
|
||||||
}
|
|
||||||
};*/
|
|
||||||
DECLARE_REF(MaterialAsset)
|
DECLARE_REF(MaterialAsset)
|
||||||
class Mesh
|
class Mesh
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -80,11 +80,9 @@ void BasePassMeshProcessor::clearCommands()
|
|||||||
}
|
}
|
||||||
|
|
||||||
BasePass::BasePass(PRenderGraph renderGraph, const PScene scene, Gfx::PGraphics graphics, Gfx::PViewport viewport, PCameraActor source)
|
BasePass::BasePass(PRenderGraph renderGraph, const PScene scene, Gfx::PGraphics graphics, Gfx::PViewport viewport, PCameraActor source)
|
||||||
: RenderPass(renderGraph)
|
: RenderPass(renderGraph, graphics, viewport)
|
||||||
, processor(new BasePassMeshProcessor(scene, viewport, graphics, false))
|
, processor(new BasePassMeshProcessor(scene, viewport, graphics, false))
|
||||||
, scene(scene)
|
, scene(scene)
|
||||||
, graphics(graphics)
|
|
||||||
, viewport(viewport)
|
|
||||||
, descriptorSets(4)
|
, descriptorSets(4)
|
||||||
, source(source->getCameraComponent())
|
, source(source->getCameraComponent())
|
||||||
{
|
{
|
||||||
@@ -198,7 +196,7 @@ void BasePass::createRenderPass()
|
|||||||
Gfx::PRenderTargetAttachment depthAttachment = renderGraph->requestRenderTarget("DEPTHPREPASS_DEPTH");
|
Gfx::PRenderTargetAttachment depthAttachment = renderGraph->requestRenderTarget("DEPTHPREPASS_DEPTH");
|
||||||
depthAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
|
depthAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
|
||||||
Gfx::PRenderTargetLayout layout = new Gfx::RenderTargetLayout(colorAttachment, depthAttachment);
|
Gfx::PRenderTargetLayout layout = new Gfx::RenderTargetLayout(colorAttachment, depthAttachment);
|
||||||
renderPass = graphics->createRenderPass(layout);
|
renderPass = graphics->createRenderPass(layout, viewport);
|
||||||
oLightIndexList = renderGraph->requestBuffer("LIGHTCULLING_OLIGHTLIST");
|
oLightIndexList = renderGraph->requestBuffer("LIGHTCULLING_OLIGHTLIST");
|
||||||
oLightGrid = renderGraph->requestTexture("LIGHTCULLING_OLIGHTGRID");
|
oLightGrid = renderGraph->requestTexture("LIGHTCULLING_OLIGHTGRID");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,9 +46,8 @@ private:
|
|||||||
Gfx::PRenderTargetAttachment colorAttachment;
|
Gfx::PRenderTargetAttachment colorAttachment;
|
||||||
Gfx::PTexture2D depthBuffer;
|
Gfx::PTexture2D depthBuffer;
|
||||||
UPBasePassMeshProcessor processor;
|
UPBasePassMeshProcessor processor;
|
||||||
|
|
||||||
const PScene scene;
|
const PScene scene;
|
||||||
Gfx::PGraphics graphics;
|
|
||||||
Gfx::PViewport viewport;
|
|
||||||
Array<Gfx::PDescriptorSet> descriptorSets;
|
Array<Gfx::PDescriptorSet> descriptorSets;
|
||||||
PCameraComponent source;
|
PCameraComponent source;
|
||||||
Gfx::PPipelineLayout basePassLayout;
|
Gfx::PPipelineLayout basePassLayout;
|
||||||
|
|||||||
@@ -11,4 +11,6 @@ target_sources(SeeleEngine
|
|||||||
RenderGraph.h
|
RenderGraph.h
|
||||||
RenderGraph.cpp
|
RenderGraph.cpp
|
||||||
RenderPass.h
|
RenderPass.h
|
||||||
RenderPass.cpp)
|
RenderPass.cpp
|
||||||
|
UIPass.h
|
||||||
|
UIPass.cpp)
|
||||||
@@ -79,11 +79,9 @@ void DepthPrepassMeshProcessor::clearCommands()
|
|||||||
}
|
}
|
||||||
|
|
||||||
DepthPrepass::DepthPrepass(PRenderGraph renderGraph, const PScene scene, Gfx::PGraphics graphics, Gfx::PViewport viewport, PCameraActor source)
|
DepthPrepass::DepthPrepass(PRenderGraph renderGraph, const PScene scene, Gfx::PGraphics graphics, Gfx::PViewport viewport, PCameraActor source)
|
||||||
: RenderPass(renderGraph)
|
: RenderPass(renderGraph, graphics, viewport)
|
||||||
, processor(new DepthPrepassMeshProcessor(scene, viewport, graphics))
|
, processor(new DepthPrepassMeshProcessor(scene, viewport, graphics))
|
||||||
, scene(scene)
|
, scene(scene)
|
||||||
, graphics(graphics)
|
|
||||||
, viewport(viewport)
|
|
||||||
, descriptorSets(3)
|
, descriptorSets(3)
|
||||||
, source(source->getCameraComponent())
|
, source(source->getCameraComponent())
|
||||||
{
|
{
|
||||||
@@ -156,8 +154,10 @@ void DepthPrepass::endFrame()
|
|||||||
void DepthPrepass::publishOutputs()
|
void DepthPrepass::publishOutputs()
|
||||||
{
|
{
|
||||||
TextureCreateInfo depthBufferInfo;
|
TextureCreateInfo depthBufferInfo;
|
||||||
depthBufferInfo.width = viewport->getSizeX();
|
// If we render to a part of an image, the depth buffer itself must
|
||||||
depthBufferInfo.height = viewport->getSizeY();
|
// still match the size of the whole image or their coordinate systems go out of sync
|
||||||
|
depthBufferInfo.width = viewport->getOwner()->getSizeX();
|
||||||
|
depthBufferInfo.height = viewport->getOwner()->getSizeY();
|
||||||
depthBufferInfo.format = Gfx::SE_FORMAT_D32_SFLOAT;
|
depthBufferInfo.format = Gfx::SE_FORMAT_D32_SFLOAT;
|
||||||
depthBufferInfo.usage = Gfx::SE_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
depthBufferInfo.usage = Gfx::SE_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||||
depthBuffer = graphics->createTexture2D(depthBufferInfo);
|
depthBuffer = graphics->createTexture2D(depthBufferInfo);
|
||||||
@@ -170,7 +170,7 @@ void DepthPrepass::publishOutputs()
|
|||||||
void DepthPrepass::createRenderPass()
|
void DepthPrepass::createRenderPass()
|
||||||
{
|
{
|
||||||
Gfx::PRenderTargetLayout layout = new Gfx::RenderTargetLayout(depthAttachment);
|
Gfx::PRenderTargetLayout layout = new Gfx::RenderTargetLayout(depthAttachment);
|
||||||
renderPass = graphics->createRenderPass(layout);
|
renderPass = graphics->createRenderPass(layout, viewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DepthPrepass::modifyRenderPassMacros(Map<const char*, const char*>& defines)
|
void DepthPrepass::modifyRenderPassMacros(Map<const char*, const char*>& defines)
|
||||||
|
|||||||
@@ -46,8 +46,7 @@ private:
|
|||||||
Gfx::PTexture2D depthBuffer;
|
Gfx::PTexture2D depthBuffer;
|
||||||
UPDepthPrepassMeshProcessor processor;
|
UPDepthPrepassMeshProcessor processor;
|
||||||
const PScene scene;
|
const PScene scene;
|
||||||
Gfx::PGraphics graphics;
|
|
||||||
Gfx::PViewport viewport;
|
|
||||||
Array<Gfx::PDescriptorSet> descriptorSets;
|
Array<Gfx::PDescriptorSet> descriptorSets;
|
||||||
PCameraComponent source;
|
PCameraComponent source;
|
||||||
Gfx::PPipelineLayout depthPrepassLayout;
|
Gfx::PPipelineLayout depthPrepassLayout;
|
||||||
|
|||||||
@@ -8,10 +8,8 @@
|
|||||||
using namespace Seele;
|
using namespace Seele;
|
||||||
|
|
||||||
LightCullingPass::LightCullingPass(PRenderGraph renderGraph, const PScene scene, Gfx::PGraphics graphics, Gfx::PViewport viewport, PCameraActor camera)
|
LightCullingPass::LightCullingPass(PRenderGraph renderGraph, const PScene scene, Gfx::PGraphics graphics, Gfx::PViewport viewport, PCameraActor camera)
|
||||||
: RenderPass(renderGraph)
|
: RenderPass(renderGraph, graphics, viewport)
|
||||||
, scene(scene)
|
, scene(scene)
|
||||||
, viewport(viewport)
|
|
||||||
, graphics(graphics)
|
|
||||||
, source(camera->getCameraComponent())
|
, source(camera->getCameraComponent())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
PScene scene;
|
PScene scene;
|
||||||
Gfx::PViewport viewport;
|
|
||||||
Gfx::PGraphics graphics;
|
|
||||||
|
|
||||||
Gfx::PStructuredBuffer frustumBuffer;
|
Gfx::PStructuredBuffer frustumBuffer;
|
||||||
Gfx::PUniformBuffer dispatchParamsBuffer;
|
Gfx::PUniformBuffer dispatchParamsBuffer;
|
||||||
Gfx::PUniformBuffer viewParamsBuffer;
|
Gfx::PUniformBuffer viewParamsBuffer;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
using namespace Seele;
|
using namespace Seele;
|
||||||
|
|
||||||
RenderPass::RenderPass(PRenderGraph renderGraph)
|
RenderPass::RenderPass(PRenderGraph renderGraph, Gfx::PGraphics graphics, Gfx::PViewport viewport)
|
||||||
: renderGraph(renderGraph)
|
: renderGraph(renderGraph), graphics(graphics), viewport(viewport)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,14 @@
|
|||||||
|
|
||||||
namespace Seele
|
namespace Seele
|
||||||
{
|
{
|
||||||
|
DECLARE_NAME_REF(Gfx, Viewport)
|
||||||
|
DECLARE_NAME_REF(Gfx, Graphics)
|
||||||
DECLARE_NAME_REF(Gfx, RenderPass)
|
DECLARE_NAME_REF(Gfx, RenderPass)
|
||||||
DECLARE_REF(RenderGraph)
|
DECLARE_REF(RenderGraph)
|
||||||
class RenderPass
|
class RenderPass
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RenderPass(PRenderGraph rendergraph);
|
RenderPass(PRenderGraph rendergraph, Gfx::PGraphics graphics, Gfx::PViewport viewport);
|
||||||
virtual ~RenderPass();
|
virtual ~RenderPass();
|
||||||
virtual void beginFrame() = 0;
|
virtual void beginFrame() = 0;
|
||||||
virtual void render() = 0;
|
virtual void render() = 0;
|
||||||
@@ -27,6 +29,8 @@ protected:
|
|||||||
} viewParams;
|
} viewParams;
|
||||||
Gfx::PRenderPass renderPass;
|
Gfx::PRenderPass renderPass;
|
||||||
PRenderGraph renderGraph;
|
PRenderGraph renderGraph;
|
||||||
|
Gfx::PGraphics graphics;
|
||||||
|
Gfx::PViewport viewport;
|
||||||
};
|
};
|
||||||
DEFINE_REF(RenderPass)
|
DEFINE_REF(RenderPass)
|
||||||
} // namespace Seele
|
} // namespace Seele
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
#include "UIPass.h"
|
||||||
|
#include "RenderGraph.h"
|
||||||
|
#include "Graphics/Graphics.h"
|
||||||
|
|
||||||
|
using namespace Seele;
|
||||||
|
|
||||||
|
UIPass::UIPass(PRenderGraph renderGraph, Gfx::PGraphics graphics, Gfx::PViewport viewport, Gfx::PRenderTargetAttachment attachment)
|
||||||
|
: RenderPass(renderGraph, graphics, viewport)
|
||||||
|
, renderTarget(attachment)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
UIPass::~UIPass()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIPass::beginFrame()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIPass::render()
|
||||||
|
{
|
||||||
|
graphics->beginRenderPass(renderPass);
|
||||||
|
Gfx::PRenderCommand command = graphics->createRenderCommand("UIPassCommand");
|
||||||
|
command->setViewport(viewport);
|
||||||
|
command->bindPipeline(pipeline);
|
||||||
|
command->draw(4, 1, 0, 0);
|
||||||
|
graphics->executeCommands(Array<Gfx::PRenderCommand>({command}));
|
||||||
|
graphics->endRenderPass();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIPass::endFrame()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIPass::publishOutputs()
|
||||||
|
{
|
||||||
|
TextureCreateInfo depthBufferInfo;
|
||||||
|
// Even if we only render to part of an image, we need to make sure
|
||||||
|
// that the depthbuffer is the same size or they can't be used in the same
|
||||||
|
// framebuffer
|
||||||
|
depthBufferInfo.width = viewport->getOwner()->getSizeX();
|
||||||
|
depthBufferInfo.height = viewport->getOwner()->getSizeY();
|
||||||
|
depthBufferInfo.format = Gfx::SE_FORMAT_D32_SFLOAT;
|
||||||
|
depthBufferInfo.usage = Gfx::SE_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||||
|
|
||||||
|
depthBuffer = graphics->createTexture2D(depthBufferInfo);
|
||||||
|
depthAttachment =
|
||||||
|
new Gfx::RenderTargetAttachment(depthBuffer, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, Gfx::SE_ATTACHMENT_STORE_OP_STORE);
|
||||||
|
depthAttachment->clear.depthStencil.depth = 1.0f;
|
||||||
|
renderGraph->registerRenderPassOutput("UIPASS_DEPTH", depthAttachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIPass::createRenderPass()
|
||||||
|
{
|
||||||
|
std::ifstream codeStream("./shaders/UIPass.slang", std::ios::ate);
|
||||||
|
auto fileSize = codeStream.tellg();
|
||||||
|
codeStream.seekg(0);
|
||||||
|
Array<char> buffer(static_cast<uint32>(fileSize));
|
||||||
|
codeStream.read(buffer.data(), fileSize);
|
||||||
|
|
||||||
|
ShaderCreateInfo createInfo;
|
||||||
|
createInfo.shaderCode.add(std::string(buffer.data()));
|
||||||
|
createInfo.name = "UIVertex";
|
||||||
|
createInfo.entryPoint = "vertexMain";
|
||||||
|
vertexShader = graphics->createVertexShader(createInfo);
|
||||||
|
|
||||||
|
createInfo.name = "UIFragment";
|
||||||
|
createInfo.entryPoint = "fragmentMain";
|
||||||
|
fragmentShader = graphics->createFragmentShader(createInfo);
|
||||||
|
declaration = graphics->createVertexDeclaration({});
|
||||||
|
pipelineLayout = graphics->createPipelineLayout();
|
||||||
|
pipelineLayout->create();
|
||||||
|
|
||||||
|
Gfx::PRenderTargetLayout layout = new Gfx::RenderTargetLayout(renderTarget, depthAttachment);
|
||||||
|
renderPass = graphics->createRenderPass(layout, viewport);
|
||||||
|
|
||||||
|
GraphicsPipelineCreateInfo pipelineInfo;
|
||||||
|
pipelineInfo.vertexDeclaration = declaration;
|
||||||
|
pipelineInfo.vertexShader = vertexShader;
|
||||||
|
pipelineInfo.fragmentShader = fragmentShader;
|
||||||
|
pipelineInfo.renderPass = renderPass;
|
||||||
|
pipelineInfo.pipelineLayout = pipelineLayout;
|
||||||
|
pipelineInfo.rasterizationState.cullMode = Gfx::SE_CULL_MODE_NONE;
|
||||||
|
pipelineInfo.topology = Gfx::SE_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
|
||||||
|
|
||||||
|
pipeline = graphics->createGraphicsPipeline(pipelineInfo);
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "RenderPass.h"
|
||||||
|
#include "UI/RenderHierarchy.h"
|
||||||
|
#include "Graphics/GraphicsResources.h"
|
||||||
|
|
||||||
|
namespace Seele
|
||||||
|
{
|
||||||
|
DECLARE_NAME_REF(Gfx, Texture2D)
|
||||||
|
DECLARE_NAME_REF(Gfx, RenderTargetAttachment)
|
||||||
|
class UIPass : public RenderPass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
UIPass(PRenderGraph renderGraph, Gfx::PGraphics graphics, Gfx::PViewport viewport, Gfx::PRenderTargetAttachment renderTarget);
|
||||||
|
virtual ~UIPass();
|
||||||
|
virtual void beginFrame() override;
|
||||||
|
virtual void render() override;
|
||||||
|
virtual void endFrame() override;
|
||||||
|
virtual void publishOutputs() override;
|
||||||
|
virtual void createRenderPass() override;
|
||||||
|
private:
|
||||||
|
UI::RenderHierarchy hierarchy;
|
||||||
|
Gfx::PRenderTargetAttachment renderTarget;
|
||||||
|
Gfx::PRenderTargetAttachment depthAttachment;
|
||||||
|
Gfx::PTexture2D depthBuffer;
|
||||||
|
|
||||||
|
Gfx::PVertexDeclaration declaration;
|
||||||
|
Gfx::PVertexShader vertexShader;
|
||||||
|
Gfx::PFragmentShader fragmentShader;
|
||||||
|
Gfx::PPipelineLayout pipelineLayout;
|
||||||
|
Gfx::PGraphicsPipeline pipeline;
|
||||||
|
};
|
||||||
|
DEFINE_REF(UIPass);
|
||||||
|
} // namespace Seele
|
||||||
@@ -140,8 +140,8 @@ void ShaderBuffer::executeOwnershipBarrier(Gfx::QueueType newOwner)
|
|||||||
dynamicBarriers[i] = barrier;
|
dynamicBarriers[i] = barrier;
|
||||||
dynamicBarriers[i].buffer = buffers[i].buffer;
|
dynamicBarriers[i].buffer = buffers[i].buffer;
|
||||||
}
|
}
|
||||||
vkCmdPipelineBarrier(srcCommand, srcStage, dstStage, 0, 0, nullptr, numBuffers, dynamicBarriers, 0, nullptr);
|
vkCmdPipelineBarrier(srcCommand, srcStage, srcStage, 0, 0, nullptr, numBuffers, dynamicBarriers, 0, nullptr);
|
||||||
vkCmdPipelineBarrier(dstCommand, srcStage, dstStage, 0, 0, nullptr, numBuffers, dynamicBarriers, 0, nullptr);
|
vkCmdPipelineBarrier(dstCommand, dstStage, dstStage, 0, 0, nullptr, numBuffers, dynamicBarriers, 0, nullptr);
|
||||||
sourceManager->submitCommands();
|
sourceManager->submitCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ void RenderCommand::bindDescriptor(Gfx::PDescriptorSet descriptorSet)
|
|||||||
auto descriptor = descriptorSet.cast<DescriptorSet>();
|
auto descriptor = descriptorSet.cast<DescriptorSet>();
|
||||||
boundDescriptors.add(descriptor.getHandle());
|
boundDescriptors.add(descriptor.getHandle());
|
||||||
descriptor->bind();
|
descriptor->bind();
|
||||||
//std::cout << "Binding descriptor " << descriptor->getHandle() << " to cmd " << handle << std::endl;
|
|
||||||
VkDescriptorSet setHandle = descriptor->getHandle();
|
VkDescriptorSet setHandle = descriptor->getHandle();
|
||||||
vkCmdBindDescriptorSets(handle, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline->getLayout(), descriptorSet->getSetIndex(), 1, &setHandle, 0, nullptr);
|
vkCmdBindDescriptorSets(handle, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline->getLayout(), descriptorSet->getSetIndex(), 1, &setHandle, 0, nullptr);
|
||||||
}
|
}
|
||||||
@@ -261,7 +261,7 @@ void RenderCommand::bindDescriptor(const Array<Gfx::PDescriptorSet>& descriptorS
|
|||||||
{
|
{
|
||||||
auto descriptorSet = descriptorSets[i].cast<DescriptorSet>();
|
auto descriptorSet = descriptorSets[i].cast<DescriptorSet>();
|
||||||
descriptorSet->bind();
|
descriptorSet->bind();
|
||||||
//std::cout << "Binding descriptor " << descriptorSet->getHandle() << " to cmd " << handle << std::endl;
|
|
||||||
boundDescriptors.add(descriptorSet.getHandle());
|
boundDescriptors.add(descriptorSet.getHandle());
|
||||||
sets[descriptorSet->getSetIndex()] = descriptorSet->getHandle();
|
sets[descriptorSet->getSetIndex()] = descriptorSet->getHandle();
|
||||||
}
|
}
|
||||||
@@ -290,6 +290,11 @@ void RenderCommand::draw(const MeshBatchElement& data)
|
|||||||
vkCmdDrawIndexed(handle, data.indexBuffer->getNumIndices(), data.numInstances, data.minVertexIndex, data.baseVertexIndex, 0);
|
vkCmdDrawIndexed(handle, data.indexBuffer->getNumIndices(), data.numInstances, data.minVertexIndex, data.baseVertexIndex, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RenderCommand::draw(uint32 vertexCount, uint32 instanceCount, int32 firstVertex, uint32 firstInstance)
|
||||||
|
{
|
||||||
|
vkCmdDraw(handle, vertexCount, instanceCount, firstVertex, firstInstance);
|
||||||
|
}
|
||||||
|
|
||||||
ComputeCommand::ComputeCommand(PGraphics graphics, VkCommandPool cmdPool)
|
ComputeCommand::ComputeCommand(PGraphics graphics, VkCommandPool cmdPool)
|
||||||
: SecondaryCmdBuffer(graphics, cmdPool)
|
: SecondaryCmdBuffer(graphics, cmdPool)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ public:
|
|||||||
virtual void bindVertexBuffer(const Array<VertexInputStream>& streams) override;
|
virtual void bindVertexBuffer(const Array<VertexInputStream>& streams) override;
|
||||||
virtual void bindIndexBuffer(Gfx::PIndexBuffer indexBuffer) override;
|
virtual void bindIndexBuffer(Gfx::PIndexBuffer indexBuffer) override;
|
||||||
virtual void draw(const MeshBatchElement& data) override;
|
virtual void draw(const MeshBatchElement& data) override;
|
||||||
|
virtual void draw(uint32 vertexCount, uint32 instanceCount, int32 firstVertex, uint32 firstInstance) override;
|
||||||
private:
|
private:
|
||||||
PGraphicsPipeline pipeline;
|
PGraphicsPipeline pipeline;
|
||||||
friend class CmdBuffer;
|
friend class CmdBuffer;
|
||||||
|
|||||||
@@ -13,31 +13,39 @@ Framebuffer::Framebuffer(PGraphics graphics, PRenderPass renderPass, Gfx::PRende
|
|||||||
FramebufferDescription description;
|
FramebufferDescription description;
|
||||||
std::memset(&description, 0, sizeof(FramebufferDescription));
|
std::memset(&description, 0, sizeof(FramebufferDescription));
|
||||||
Array<VkImageView> attachments;
|
Array<VkImageView> attachments;
|
||||||
|
uint32 sizeX = 0;
|
||||||
|
uint32 sizeY = 0;
|
||||||
for (auto inputAttachment : layout->inputAttachments)
|
for (auto inputAttachment : layout->inputAttachments)
|
||||||
{
|
{
|
||||||
PTexture2D vkInputAttachment = inputAttachment->getTexture().cast<Texture2D>();
|
PTexture2D vkInputAttachment = inputAttachment->getTexture().cast<Texture2D>();
|
||||||
attachments.add(vkInputAttachment->getView());
|
attachments.add(vkInputAttachment->getView());
|
||||||
description.inputAttachments[description.numInputAttachments++] = vkInputAttachment->getView();
|
description.inputAttachments[description.numInputAttachments++] = vkInputAttachment->getView();
|
||||||
|
sizeX = std::max(sizeX, vkInputAttachment->getSizeX());
|
||||||
|
sizeY = std::max(sizeY, vkInputAttachment->getSizeY());
|
||||||
}
|
}
|
||||||
for (auto colorAttachment : layout->colorAttachments)
|
for (auto colorAttachment : layout->colorAttachments)
|
||||||
{
|
{
|
||||||
PTexture2D vkColorAttachment = colorAttachment->getTexture().cast<Texture2D>();
|
PTexture2D vkColorAttachment = colorAttachment->getTexture().cast<Texture2D>();
|
||||||
attachments.add(vkColorAttachment->getView());
|
attachments.add(vkColorAttachment->getView());
|
||||||
description.colorAttachments[description.numColorAttachments++] = vkColorAttachment->getView();
|
description.colorAttachments[description.numColorAttachments++] = vkColorAttachment->getView();
|
||||||
|
sizeX = std::max(sizeX, vkColorAttachment->getSizeX());
|
||||||
|
sizeY = std::max(sizeY, vkColorAttachment->getSizeY());
|
||||||
}
|
}
|
||||||
if (layout->depthAttachment != nullptr)
|
if (layout->depthAttachment != nullptr)
|
||||||
{
|
{
|
||||||
PTexture2D vkDepthAttachment = layout->depthAttachment->getTexture().cast<Texture2D>();
|
PTexture2D vkDepthAttachment = layout->depthAttachment->getTexture().cast<Texture2D>();
|
||||||
attachments.add(vkDepthAttachment->getView());
|
attachments.add(vkDepthAttachment->getView());
|
||||||
description.depthAttachment = vkDepthAttachment->getView();
|
description.depthAttachment = vkDepthAttachment->getView();
|
||||||
|
sizeX = std::max(sizeX, vkDepthAttachment->getSizeX());
|
||||||
|
sizeY = std::max(sizeY, vkDepthAttachment->getSizeY());
|
||||||
}
|
}
|
||||||
VkFramebufferCreateInfo createInfo =
|
VkFramebufferCreateInfo createInfo =
|
||||||
init::FramebufferCreateInfo(
|
init::FramebufferCreateInfo(
|
||||||
renderPass->getHandle(),
|
renderPass->getHandle(),
|
||||||
(uint32)attachments.size(),
|
(uint32)attachments.size(),
|
||||||
attachments.data(),
|
attachments.data(),
|
||||||
renderPass->getRenderArea().extent.width,
|
sizeX,
|
||||||
renderPass->getRenderArea().extent.height,
|
sizeY,
|
||||||
1);
|
1);
|
||||||
|
|
||||||
VK_CHECK(vkCreateFramebuffer(graphics->getDevice(), &createInfo, nullptr, &handle));
|
VK_CHECK(vkCreateFramebuffer(graphics->getDevice(), &createInfo, nullptr, &handle));
|
||||||
|
|||||||
@@ -55,9 +55,9 @@ Gfx::PViewport Graphics::createViewport(Gfx::PWindow owner, const ViewportCreate
|
|||||||
viewports.add(result);
|
viewports.add(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
Gfx::PRenderPass Graphics::createRenderPass(Gfx::PRenderTargetLayout layout)
|
Gfx::PRenderPass Graphics::createRenderPass(Gfx::PRenderTargetLayout layout, Gfx::PViewport renderArea)
|
||||||
{
|
{
|
||||||
PRenderPass result = new RenderPass(this, layout);
|
PRenderPass result = new RenderPass(this, layout, renderArea);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
void Graphics::beginRenderPass(Gfx::PRenderPass renderPass)
|
void Graphics::beginRenderPass(Gfx::PRenderPass renderPass)
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
virtual Gfx::PWindow createWindow(const WindowCreateInfo &createInfo) override;
|
virtual Gfx::PWindow createWindow(const WindowCreateInfo &createInfo) override;
|
||||||
virtual Gfx::PViewport createViewport(Gfx::PWindow owner, const ViewportCreateInfo &createInfo) override;
|
virtual Gfx::PViewport createViewport(Gfx::PWindow owner, const ViewportCreateInfo &createInfo) override;
|
||||||
|
|
||||||
virtual Gfx::PRenderPass createRenderPass(Gfx::PRenderTargetLayout layout) override;
|
virtual Gfx::PRenderPass createRenderPass(Gfx::PRenderTargetLayout layout, Gfx::PViewport renderArea) override;
|
||||||
virtual void beginRenderPass(Gfx::PRenderPass renderPass) override;
|
virtual void beginRenderPass(Gfx::PRenderPass renderPass) override;
|
||||||
virtual void endRenderPass() override;
|
virtual void endRenderPass() override;
|
||||||
|
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
using namespace Seele;
|
using namespace Seele;
|
||||||
using namespace Seele::Vulkan;
|
using namespace Seele::Vulkan;
|
||||||
|
|
||||||
RenderPass::RenderPass(PGraphics graphics, Gfx::PRenderTargetLayout layout)
|
RenderPass::RenderPass(PGraphics graphics, Gfx::PRenderTargetLayout layout, Gfx::PViewport viewport)
|
||||||
: Gfx::RenderPass(layout)
|
: Gfx::RenderPass(layout)
|
||||||
, graphics(graphics)
|
, graphics(graphics)
|
||||||
{
|
{
|
||||||
renderArea.extent.width = layout->width;
|
renderArea.extent.width = viewport->getSizeX();
|
||||||
renderArea.extent.height = layout->height;
|
renderArea.extent.height = viewport->getSizeY();
|
||||||
renderArea.offset.x = 0;
|
renderArea.offset.x = viewport->getOffsetX();
|
||||||
renderArea.offset.y = 0;
|
renderArea.offset.y = viewport->getOffsetY();
|
||||||
subpassContents = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS;
|
subpassContents = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS;
|
||||||
Array<VkAttachmentDescription> attachments;
|
Array<VkAttachmentDescription> attachments;
|
||||||
Array<VkAttachmentReference> inputRefs;
|
Array<VkAttachmentReference> inputRefs;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace Vulkan
|
|||||||
class RenderPass : public Gfx::RenderPass
|
class RenderPass : public Gfx::RenderPass
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RenderPass(PGraphics graphics, Gfx::PRenderTargetLayout layout);
|
RenderPass(PGraphics graphics, Gfx::PRenderTargetLayout layout, Gfx::PViewport viewport);
|
||||||
virtual ~RenderPass();
|
virtual ~RenderPass();
|
||||||
uint32 getFramebufferHash();
|
uint32 getFramebufferHash();
|
||||||
inline VkRenderPass getHandle() const
|
inline VkRenderPass getHandle() const
|
||||||
|
|||||||
@@ -52,39 +52,6 @@ static SlangStage getStageFromShaderType(ShaderType type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*static void createMixedDescriptorLayout(PDescriptorLayout layout, VariableLayoutReflection* parameter)
|
|
||||||
{
|
|
||||||
//std::cout << "category: " << (uint32)parameter->ge << std::endl;
|
|
||||||
uint32 categoryCount = parameter->getCategoryCount();
|
|
||||||
std::cout << "Mixed parameter " << parameter->getName() << " with categories: " << std::endl;
|
|
||||||
for(uint32 i = 0; i < categoryCount; ++i)
|
|
||||||
{
|
|
||||||
ParameterCategory category = parameter->getCategoryByIndex(i);
|
|
||||||
uint32 offset = parameter->getOffset(category);
|
|
||||||
uint32 space = parameter->getBindingSpace(category);
|
|
||||||
std::cout << "category: " << category << std::endl << " offset: " << offset << std::endl << " space: " << space << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Gfx::SeDescriptorType getTypeFromKind(slang::TypeReflection::Kind kind)
|
|
||||||
{
|
|
||||||
switch (kind)
|
|
||||||
{
|
|
||||||
case slang::TypeReflection::Kind::ConstantBuffer:
|
|
||||||
case slang::TypeReflection::Kind::GenericTypeParameter:
|
|
||||||
case slang::TypeReflection::Kind::ParameterBlock:
|
|
||||||
return Gfx::SE_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
|
||||||
case slang::TypeReflection::Kind::ShaderStorageBuffer:
|
|
||||||
return Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER;
|
|
||||||
case slang::TypeReflection::Kind::TextureBuffer:
|
|
||||||
return Gfx::SE_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
|
|
||||||
case slang::TypeReflection::Kind::SamplerState:
|
|
||||||
return Gfx::SE_DESCRIPTOR_TYPE_SAMPLER;
|
|
||||||
default:
|
|
||||||
return Gfx::SE_DESCRIPTOR_TYPE_MAX_ENUM;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
void Shader::create(const ShaderCreateInfo& createInfo)
|
void Shader::create(const ShaderCreateInfo& createInfo)
|
||||||
{
|
{
|
||||||
entryPointName = createInfo.entryPoint;
|
entryPointName = createInfo.entryPoint;
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ TextureHandle::TextureHandle(PGraphics graphics, VkImageViewType viewType,
|
|||||||
region.imageSubresource.layerCount = 1;
|
region.imageSubresource.layerCount = 1;
|
||||||
|
|
||||||
region.imageOffset = {0, 0, 0};
|
region.imageOffset = {0, 0, 0};
|
||||||
region.imageExtent = {sizeX, sizeX, sizeZ};
|
region.imageExtent = {sizeX, sizeY, sizeZ};
|
||||||
|
|
||||||
vkCmdCopyBufferToImage(cmdBufferManager->getCommands()->getHandle(),
|
vkCmdCopyBufferToImage(cmdBufferManager->getCommands()->getHandle(),
|
||||||
staging->getHandle(), image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion);
|
staging->getHandle(), image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion);
|
||||||
@@ -251,10 +251,11 @@ void TextureHandle::executeOwnershipBarrier(Gfx::QueueType newOwner)
|
|||||||
dstStage = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
|
dstStage = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
|
||||||
dstManager = graphics->getGraphicsCommands();
|
dstManager = graphics->getGraphicsCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
VkCommandBuffer sourceCmd = sourceManager->getCommands()->getHandle();
|
VkCommandBuffer sourceCmd = sourceManager->getCommands()->getHandle();
|
||||||
VkCommandBuffer destCmd = dstManager->getCommands()->getHandle();
|
VkCommandBuffer destCmd = dstManager->getCommands()->getHandle();
|
||||||
vkCmdPipelineBarrier(sourceCmd, srcStage, dstStage, 0, 0, nullptr, 0, nullptr, 1, &imageBarrier);
|
vkCmdPipelineBarrier(sourceCmd, srcStage, srcStage, 0, 0, nullptr, 0, nullptr, 1, &imageBarrier);
|
||||||
vkCmdPipelineBarrier(destCmd, srcStage, dstStage, 0, 0, nullptr, 0, nullptr, 1, &imageBarrier);
|
vkCmdPipelineBarrier(destCmd, dstStage, dstStage, 0, 0, nullptr, 0, nullptr, 1, &imageBarrier);
|
||||||
currentOwner = newOwner;
|
currentOwner = newOwner;
|
||||||
sourceManager->submitCommands();
|
sourceManager->submitCommands();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,8 +162,19 @@ void Window::advanceBackBuffer()
|
|||||||
imageAcquiredSemaphore = imageAcquired[semaphoreIndex];
|
imageAcquiredSemaphore = imageAcquired[semaphoreIndex];
|
||||||
currentImageIndex = imageIndex;
|
currentImageIndex = imageIndex;
|
||||||
|
|
||||||
backBufferImages[currentImageIndex]->changeLayout(Gfx::SE_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
|
||||||
PCmdBuffer cmdBuffer = graphics->getGraphicsCommands()->getCommands();
|
PCmdBuffer cmdBuffer = graphics->getGraphicsCommands()->getCommands();
|
||||||
|
backBufferImages[currentImageIndex]->changeLayout(Gfx::SE_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||||
|
VkClearColorValue clearColor = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||||
|
VkImageSubresourceRange range = init::ImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT);
|
||||||
|
vkCmdClearColorImage(
|
||||||
|
cmdBuffer->getHandle(),
|
||||||
|
backBufferImages[currentImageIndex]->getHandle(),
|
||||||
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||||
|
&clearColor,
|
||||||
|
1,
|
||||||
|
&range);
|
||||||
|
|
||||||
|
backBufferImages[currentImageIndex]->changeLayout(Gfx::SE_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||||
graphics->getGraphicsCommands()->getCommands()->addWaitSemaphore(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, imageAcquiredSemaphore);
|
graphics->getGraphicsCommands()->getCommands()->addWaitSemaphore(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, imageAcquiredSemaphore);
|
||||||
graphics->getGraphicsCommands()->submitCommands();
|
graphics->getGraphicsCommands()->submitCommands();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Scene::Scene(Gfx::PGraphics graphics)
|
|||||||
lightEnv.pointLights[i].positionWS = Vector4(frand() * 100-50, frand(), frand() * 100-50, 1);
|
lightEnv.pointLights[i].positionWS = Vector4(frand() * 100-50, frand(), frand() * 100-50, 1);
|
||||||
}
|
}
|
||||||
lightEnv.numPointLights = 16;
|
lightEnv.numPointLights = 16;
|
||||||
lightEnv.pointLights[0].colorRange = Vector4(1, 0, 0, 100);
|
lightEnv.pointLights[0].colorRange = Vector4(1, 1, 1, 1000);
|
||||||
lightEnv.pointLights[0].positionWS = Vector4(0, 10, 0, 1);
|
lightEnv.pointLights[0].positionWS = Vector4(0, 10, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
target_sources(SeeleEngine
|
target_sources(SeeleEngine
|
||||||
PRIVATE
|
PRIVATE
|
||||||
Element.h
|
HorizontalLayout.h
|
||||||
Element.cpp
|
HorizontalLayout.cpp
|
||||||
|
Layout.h
|
||||||
|
Layout.cpp
|
||||||
RenderHierarchy.h
|
RenderHierarchy.h
|
||||||
RenderHierarchy.cpp
|
RenderHierarchy.cpp
|
||||||
UIRenderPath.h
|
VerticalLayout.h
|
||||||
UIRenderPath.cpp)
|
VerticalLayout.cpp)
|
||||||
|
|
||||||
|
add_subdirectory(Elements/)
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "MinimalEngine.h"
|
|
||||||
|
|
||||||
namespace Seele
|
|
||||||
{
|
|
||||||
namespace UI
|
|
||||||
{
|
|
||||||
//Element defines any part of the UI
|
|
||||||
DECLARE_REF(Element)
|
|
||||||
class Element
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Element();
|
|
||||||
virtual ~Element();
|
|
||||||
void addElement(PElement element);
|
|
||||||
const Array<PElement> getChildren() const;
|
|
||||||
void clear();
|
|
||||||
void remove(PElement element);
|
|
||||||
void setEnabled(bool newEnabled);
|
|
||||||
bool isEnabled() const;
|
|
||||||
protected:
|
|
||||||
bool enabled;
|
|
||||||
Array<PElement> children;
|
|
||||||
};
|
|
||||||
DEFINE_REF(Element)
|
|
||||||
} // namespace UI
|
|
||||||
} // namespace Seele
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
target_sources(SeeleEngine
|
||||||
|
PRIVATE
|
||||||
|
Element.h
|
||||||
|
Element.cpp)
|
||||||
@@ -11,12 +11,12 @@ Element::~Element()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Element::addElement(PElement element)
|
void Element::addChild(PElement element)
|
||||||
{
|
{
|
||||||
children.add(element);
|
children.add(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Array<PElement> Element::getChildren() const
|
const Array<PElement> Element::getChildren()
|
||||||
{
|
{
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
@@ -39,4 +39,14 @@ void Element::setEnabled(bool newEnabled)
|
|||||||
bool Element::isEnabled() const
|
bool Element::isEnabled() const
|
||||||
{
|
{
|
||||||
return enabled;
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rect& Element::getBoundingBox()
|
||||||
|
{
|
||||||
|
return boundingBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Rect Element::getBoundingBox() const
|
||||||
|
{
|
||||||
|
return boundingBox;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "MinimalEngine.h"
|
||||||
|
|
||||||
|
namespace Seele
|
||||||
|
{
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
//Element defines any part of the UI
|
||||||
|
DECLARE_REF(Element)
|
||||||
|
class Element
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Element();
|
||||||
|
virtual ~Element();
|
||||||
|
void setParent(PElement element);
|
||||||
|
PElement getParent() const;
|
||||||
|
void addChild(PElement element);
|
||||||
|
const Array<PElement> getChildren();
|
||||||
|
void clear();
|
||||||
|
void remove(PElement element);
|
||||||
|
void setEnabled(bool newEnabled);
|
||||||
|
bool isEnabled() const;
|
||||||
|
// maybe not the healthiest inteface
|
||||||
|
// non-const version
|
||||||
|
Rect& getBoundingBox();
|
||||||
|
// The bounding box describes the relative size of any Element
|
||||||
|
// relative to the total view, meaning a bounding box of (0,0), (1,1)
|
||||||
|
// would take up the entire view
|
||||||
|
const Rect getBoundingBox() const;
|
||||||
|
protected:
|
||||||
|
Rect boundingBox;
|
||||||
|
bool enabled;
|
||||||
|
PElement parent;
|
||||||
|
Array<PElement> children;
|
||||||
|
friend class Layout;
|
||||||
|
friend class RenderElement;
|
||||||
|
};
|
||||||
|
DEFINE_REF(Element)
|
||||||
|
} // namespace UI
|
||||||
|
} // namespace Seele
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Element.h"
|
||||||
|
|
||||||
|
namespace Seele
|
||||||
|
{
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
class Panel : Element
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Panel();
|
||||||
|
virtual ~Panel();
|
||||||
|
};
|
||||||
|
} // namespace UI
|
||||||
|
} // namespace Seele
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#include "HorizontalLayout.h"
|
||||||
|
|
||||||
|
using namespace Seele;
|
||||||
|
using namespace Seele::UI;
|
||||||
|
|
||||||
|
HorizontalLayout::HorizontalLayout(PElement element)
|
||||||
|
: Layout(element)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
HorizontalLayout::~HorizontalLayout()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void HorizontalLayout::apply()
|
||||||
|
{
|
||||||
|
Array<PElement> children = element->getChildren();
|
||||||
|
const Rect parent = element->getBoundingBox();
|
||||||
|
float xOffset = parent.offset.x;
|
||||||
|
float yOffset = parent.offset.y;
|
||||||
|
float xSize = parent.size.x / children.size();
|
||||||
|
float ySize = parent.size.y;
|
||||||
|
for(uint32 index = 0; index < children.size(); ++index)
|
||||||
|
{
|
||||||
|
Rect& child = children[index]->getBoundingBox();
|
||||||
|
child.offset.x = xOffset + (index * xSize);
|
||||||
|
child.offset.y = yOffset;
|
||||||
|
child.size.x = xSize;
|
||||||
|
child.size.y = ySize;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Layout.h"
|
||||||
|
|
||||||
|
namespace Seele
|
||||||
|
{
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
class HorizontalLayout : Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HorizontalLayout(PElement element);
|
||||||
|
~HorizontalLayout();
|
||||||
|
virtual void apply() override;
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
} // namespace UI
|
||||||
|
} // namespace Seele
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#include "Layout.h"
|
||||||
|
|
||||||
|
using namespace Seele;
|
||||||
|
using namespace Seele::UI;
|
||||||
|
|
||||||
|
Layout::Layout(PElement element)
|
||||||
|
: element(element)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Layout::~Layout()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Elements/Element.h"
|
||||||
|
|
||||||
|
namespace Seele
|
||||||
|
{
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
class Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Layout(PElement element);
|
||||||
|
virtual ~Layout();
|
||||||
|
virtual void apply() = 0;
|
||||||
|
protected:
|
||||||
|
PElement element;
|
||||||
|
};
|
||||||
|
} // namespace UI
|
||||||
|
} // namespace Seele
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#include "RenderHierarchy.h"
|
||||||
|
|
||||||
|
using namespace Seele;
|
||||||
|
using namespace Seele::UI;
|
||||||
|
|
||||||
|
RenderElement::RenderElement()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderElement::~RenderElement()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderHierarchy::RenderHierarchy()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderHierarchy::~RenderHierarchy()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,15 +1,29 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include "Elements/Element.h"
|
||||||
|
|
||||||
namespace Seele
|
namespace Seele
|
||||||
{
|
{
|
||||||
namespace UI
|
namespace UI
|
||||||
{
|
{
|
||||||
|
DECLARE_NAME_REF(Gfx, RenderCommand);
|
||||||
|
class RenderElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RenderElement();
|
||||||
|
virtual ~RenderElement();
|
||||||
|
private:
|
||||||
|
PElement referencedElement;
|
||||||
|
Gfx::PRenderCommand renderCommand;
|
||||||
|
friend class RenderHierarchy;
|
||||||
|
};
|
||||||
class RenderHierarchy
|
class RenderHierarchy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
RenderHierarchy();
|
||||||
|
~RenderHierarchy();
|
||||||
private:
|
private:
|
||||||
|
// List of all drawable elements in draw order
|
||||||
|
Array<RenderElement> drawElements;
|
||||||
};
|
};
|
||||||
} // namespace UI
|
} // namespace UI
|
||||||
} // namespace Seele
|
} // namespace Seele
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "Window/RenderPath.h"
|
|
||||||
#include "Element.h"
|
|
||||||
|
|
||||||
namespace Seele
|
|
||||||
{
|
|
||||||
class UIRenderPath : public RenderPath
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
UIRenderPath();
|
|
||||||
virtual ~UIRenderPath();
|
|
||||||
virtual void beginFrame();
|
|
||||||
virtual void render();
|
|
||||||
virtual void endFrame();
|
|
||||||
private:
|
|
||||||
Array<UI::PElement> rootElements;
|
|
||||||
};
|
|
||||||
DEFINE_REF(UIRenderPath);
|
|
||||||
} // namespace Seele
|
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#include "VerticalLayout.h"
|
||||||
|
|
||||||
|
using namespace Seele;
|
||||||
|
using namespace Seele::UI;
|
||||||
|
|
||||||
|
VerticalLayout::VerticalLayout(PElement element)
|
||||||
|
: Layout(element)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
VerticalLayout::~VerticalLayout()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void VerticalLayout::apply()
|
||||||
|
{
|
||||||
|
Array<PElement> children = element->getChildren();
|
||||||
|
const Rect parent = element->getBoundingBox();
|
||||||
|
float xOffset = parent.offset.x;
|
||||||
|
float yOffset = parent.offset.y;
|
||||||
|
float xSize = parent.size.x;
|
||||||
|
float ySize = parent.size.y / children.size();
|
||||||
|
for(uint32 index = 0; index < children.size(); ++index)
|
||||||
|
{
|
||||||
|
Rect& child = children[index]->getBoundingBox();
|
||||||
|
child.offset.x = xOffset;
|
||||||
|
child.offset.y = yOffset + (index * ySize);
|
||||||
|
child.size.x = xSize;
|
||||||
|
child.size.y = ySize;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Layout.h"
|
||||||
|
|
||||||
|
namespace Seele
|
||||||
|
{
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
class VerticalLayout : Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VerticalLayout(PElement element);
|
||||||
|
~VerticalLayout();
|
||||||
|
virtual void apply() override;
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
} // namespace UI
|
||||||
|
} // namespace Seele
|
||||||
@@ -1,9 +1,16 @@
|
|||||||
#include "InspectorView.h"
|
#include "InspectorView.h"
|
||||||
|
#include "Window.h"
|
||||||
|
|
||||||
using namespace Seele;
|
using namespace Seele;
|
||||||
|
|
||||||
InspectorView::InspectorView(Gfx::PGraphics graphics, PWindow window, const ViewportCreateInfo &createInfo)
|
InspectorView::InspectorView(Gfx::PGraphics graphics, PWindow window, const ViewportCreateInfo &createInfo)
|
||||||
: View(graphics, window, createInfo)
|
: View(graphics, window, createInfo)
|
||||||
{
|
{
|
||||||
|
renderGraph = new RenderGraph();
|
||||||
|
Gfx::PRenderTargetAttachment attachment = new Gfx::SwapchainAttachment(window->getGfxHandle());
|
||||||
|
uiPass = new UIPass(renderGraph, graphics, viewport, attachment);
|
||||||
|
renderGraph->addRenderPass(uiPass);
|
||||||
|
renderGraph->setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
InspectorView::~InspectorView()
|
InspectorView::~InspectorView()
|
||||||
@@ -12,15 +19,40 @@ InspectorView::~InspectorView()
|
|||||||
|
|
||||||
void InspectorView::beginFrame()
|
void InspectorView::beginFrame()
|
||||||
{
|
{
|
||||||
|
uiPass->beginFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InspectorView::render()
|
void InspectorView::render()
|
||||||
{
|
{
|
||||||
|
uiPass->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InspectorView::endFrame()
|
void InspectorView::endFrame()
|
||||||
|
{
|
||||||
|
uiPass->endFrame();
|
||||||
|
}
|
||||||
|
|
||||||
|
void InspectorView::keyCallback(KeyCode code, InputAction action, KeyModifier modifier)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InspectorView::mouseMoveCallback(double xPos, double yPos)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InspectorView::mouseButtonCallback(MouseButton button, InputAction action, KeyModifier modifier)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InspectorView::scrollCallback(double xOffset, double yOffset)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InspectorView::fileCallback(int count, const char** paths)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "View.h"
|
#include "View.h"
|
||||||
#include "UI/UIRenderPath.h"
|
#include "Graphics/RenderPass/RenderGraph.h"
|
||||||
|
#include "Graphics/RenderPass/UIPass.h"
|
||||||
|
|
||||||
namespace Seele
|
namespace Seele
|
||||||
{
|
{
|
||||||
|
DECLARE_REF(Actor)
|
||||||
class InspectorView : public View
|
class InspectorView : public View
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -12,7 +14,19 @@ public:
|
|||||||
virtual void beginFrame();
|
virtual void beginFrame();
|
||||||
virtual void render();
|
virtual void render();
|
||||||
virtual void endFrame();
|
virtual void endFrame();
|
||||||
|
void selectActor();
|
||||||
private:
|
|
||||||
|
protected:
|
||||||
|
Array<UI::PElement> rootElements;
|
||||||
|
PUIPass uiPass;
|
||||||
|
PActor selectedActor;
|
||||||
|
PRenderGraph renderGraph;
|
||||||
|
|
||||||
|
virtual void keyCallback(KeyCode code, InputAction action, KeyModifier modifier) override;
|
||||||
|
virtual void mouseMoveCallback(double xPos, double yPos) override;
|
||||||
|
virtual void mouseButtonCallback(MouseButton button, InputAction action, KeyModifier modifier) override;
|
||||||
|
virtual void scrollCallback(double xOffset, double yOffset) override;
|
||||||
|
virtual void fileCallback(int count, const char** paths) override;
|
||||||
};
|
};
|
||||||
|
DEFINE_REF(InspectorView)
|
||||||
} // namespace Seele
|
} // namespace Seele
|
||||||
|
|||||||
@@ -25,6 +25,5 @@ protected:
|
|||||||
PDepthPrepass depthPrepass;
|
PDepthPrepass depthPrepass;
|
||||||
PLightCullingPass lightCullingPass;
|
PLightCullingPass lightCullingPass;
|
||||||
PBasePass basePass;
|
PBasePass basePass;
|
||||||
|
|
||||||
};
|
};
|
||||||
} // namespace Seele
|
} // namespace Seele
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
namespace Seele
|
namespace Seele
|
||||||
{
|
{
|
||||||
DECLARE_REF(Window)
|
DECLARE_REF(Window)
|
||||||
// A view is a part of the window, which can be anything from a viewport to an editor
|
// A view is a part of the window, which can be anything from a viewport to an inspector
|
||||||
class View
|
class View
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
+10
-1
@@ -1,5 +1,6 @@
|
|||||||
#include "Graphics/RenderCore.h"
|
#include "Graphics/RenderCore.h"
|
||||||
#include "Window/SceneView.h"
|
#include "Window/SceneView.h"
|
||||||
|
#include "Window/InspectorView.h"
|
||||||
#include "Asset/AssetRegistry.h"
|
#include "Asset/AssetRegistry.h"
|
||||||
#include "Fibers/Fibers.h"
|
#include "Fibers/Fibers.h"
|
||||||
#include <queue>
|
#include <queue>
|
||||||
@@ -19,12 +20,20 @@ int main()
|
|||||||
mainWindowInfo.pixelFormat = Gfx::SE_FORMAT_B8G8R8A8_UNORM;
|
mainWindowInfo.pixelFormat = Gfx::SE_FORMAT_B8G8R8A8_UNORM;
|
||||||
auto window = core.getWindowManager()->addWindow(mainWindowInfo);
|
auto window = core.getWindowManager()->addWindow(mainWindowInfo);
|
||||||
ViewportCreateInfo sceneViewInfo;
|
ViewportCreateInfo sceneViewInfo;
|
||||||
sceneViewInfo.sizeX = 1280;
|
sceneViewInfo.sizeX = 640;
|
||||||
sceneViewInfo.sizeY = 720;
|
sceneViewInfo.sizeY = 720;
|
||||||
sceneViewInfo.offsetX = 0;
|
sceneViewInfo.offsetX = 0;
|
||||||
sceneViewInfo.offsetY = 0;
|
sceneViewInfo.offsetY = 0;
|
||||||
PSceneView sceneView = new SceneView(core.getWindowManager()->getGraphics(), window, sceneViewInfo);
|
PSceneView sceneView = new SceneView(core.getWindowManager()->getGraphics(), window, sceneViewInfo);
|
||||||
window->addView(sceneView);
|
window->addView(sceneView);
|
||||||
|
|
||||||
|
ViewportCreateInfo inspectorViewInfo;
|
||||||
|
inspectorViewInfo.sizeX = 640;
|
||||||
|
inspectorViewInfo.sizeY = 720;
|
||||||
|
inspectorViewInfo.offsetX = 640;
|
||||||
|
inspectorViewInfo.offsetY = 0;
|
||||||
|
PInspectorView inspectorView = new InspectorView(core.getWindowManager()->getGraphics(), window, inspectorViewInfo);
|
||||||
|
window->addView(inspectorView);
|
||||||
sceneView->setFocused();
|
sceneView->setFocused();
|
||||||
AssetRegistry::init("D:\\Private\\Programming\\C++\\TestSeeleProject\\");
|
AssetRegistry::init("D:\\Private\\Programming\\C++\\TestSeeleProject\\");
|
||||||
AssetRegistry::importFile("D:\\Private\\Programming\\Unreal Engine\\Assets\\Ely\\Ely.fbx");
|
AssetRegistry::importFile("D:\\Private\\Programming\\Unreal Engine\\Assets\\Ely\\Ely.fbx");
|
||||||
|
|||||||
Reference in New Issue
Block a user