FCT
载入中...
搜索中...
未找到
ResourceManager.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/7/28.
3//
4
5#ifndef RESOURCEMANAGER_H
6#define RESOURCEMANAGER_H
7#include "../ThirdParty.h"
8#include "ContextEvent.h"
10#include "Device.h"
11#include "FlowControl.h"
12#include "Format.h"
15namespace FCT
16{
17 class Image;
18 class MutilBufferImage;
20 class Context;
21 class Window;
22 namespace RHI
23 {
24 class Swapchain;
25 }
34 std::string WindowToToken(Window* wnd);
35 std::string SwapchainToToken(RHI::Swapchain* swapchain);
36 struct ImageDesc
37 {
40 ImageUsages usage;
41 };
43 {
44 int width;
45 int height;
48 ImageUsages usage;
49 };
51 {
52 ImageSaved(RHI::Swapchain* swapchain);
53 ImageSaved(ImageSaved* denpendency);
55 {
56 mutilBuffer = true;
57 autoIndex = true;
58 }
62 };
63
70 namespace InnerTicker
71 {
72 constexpr const char* ImageGraph_ChangeIndex = "ImageGraph_ChangeIndex";
73 }
75 public:
85 Image* allocateImage(std::string name,Window* dependency,ImageDesc desc);
94 Image* allocateImage(std::string name,std::string dependency,ImageDesc desc);
95 void clearImage(std::string name);
96 private:
97 /*todo: updateGraph 修改了 m_needChangeIndexImages 而 change index 发生在submit 线程
98 * 要是运行时 allocateImage怎么办?怎么做线程同步?
99 */
100 void updateGraph();
102 void registerWindow(Window* wnd);
103 void resizeSub(std::string token,int width, int height);
104 void resize(std::string token, int width, int height);
106 std::vector<std::string> m_target;
107 std::vector<ImageSaved> m_needChangeIndexImages;
111 public:
112 //todo:todo函数
121 void resizeImage(std::string name, int width, int height);
129 Image* allocateTarget(std::string name,TargetDesc desc);
130 };
131
132}
133
134
135
136#endif //RESOURCEMANAGER_H
void clearImage(std::string name)
void resizeSub(std::string token, int width, int height)
void resize(std::string token, int width, int height)
std::vector< std::string > m_target
TokenGraph< std::string, ImageSaved > m_dependencyGraph
void resizeImage(std::string name, int width, int height)
挂起resize一个image
Image * allocateTarget(std::string name, TargetDesc desc)
分配的是独立的Target,例如窗口一类的就算为独立Target
std::vector< ImageSaved > m_needChangeIndexImages
Image * allocateImage(std::string name, Window *dependency, ImageDesc desc)
分配中间Target / 图像
constexpr const char * ImageGraph_ChangeIndex
std::string WindowToToken(Window *wnd)
std::string SwapchainToToken(RHI::Swapchain *swapchain)
ImageSaved(RHI::Swapchain *swapchain)