当前位置: 首页 > news >正文

网站过期怎么找回来wix做网站的建议

网站过期怎么找回来,wix做网站的建议,网站开发工程师和前端,邯郸最新工程项目公示Step 1 搭建一个简单的渲染框架 万事开头难。从萌生到自己到处看源码手抄一个mini engine出来的想法#xff0c;到真正敲键盘去抄#xff0c;转眼过去了很久的时间。这次大概的确是抱着认真的想法#xff0c;打开VS从零开始抄代码。不知道能坚持多久呢。。。 本次的主题是搭… Step 1 搭建一个简单的渲染框架 万事开头难。从萌生到自己到处看源码手抄一个mini engine出来的想法到真正敲键盘去抄转眼过去了很久的时间。这次大概的确是抱着认真的想法打开VS从零开始抄代码。不知道能坚持多久呢。。。 本次的主题是搭一个简单的渲染框架。这里我们先假定要使用的底层图形API为DX12当然代码设计上渲染和API层面肯定是要解耦的如果有一天去抄OpenGL或是Vulcan的代码的时候总不可能要重写已有的逻辑。另外由于DX12的初始化逻辑中需要HWND类型的窗口句柄所以这里也就需要引入原生的Windows API来绘制窗口了。当然同样的道理窗口系统与绘制的API也没有什么耦合关系。 那么先从Main函数写起它是最简单的只做初始化和运行两件事情 int main() {EngineLoop loop(hInstance);if (!loop.Initialize())return 0;return loop.Run(); }EngineLoop类里目前包含我们这里需要的窗口系统和图形系统。初始化的逻辑是有顺序的这里我们先初始化窗口系统再初始化图形系统 bool EngineLoop::Initialize() {m_pWindowSystem MakeSharedWindowSystem();if (!m_pWindowSystem-Initialize(windowSystemCfg)){return false;}m_pGraphicsSystem MakeSharedGraphicsSystem();if (!m_pGraphicsSystem-Initialize(graphicsSystemCfg)){return false;}return true; }我们用智能指针shared_ptr管理这些System。这样它们的生命周期就和EngineLoop保持一致不用担心析构的时候忘记释放它们。 为了把创建绘制窗口的API与窗口本身的逻辑分开窗口系统持有一个LowLevelWindow抽象类的指针。通过这个指针去真正地创建窗口绘制窗口以及响应窗口的事件等等 bool WindowSystem::Initialize(const WindowSystemCfg cfg) {m_pWindow MakeSharedWindowsAPIWindow();if (!m_pWindow-Initialize(windowCfg)){return false;}return true; }同样图形系统也是我们使用RHI抽象类的指针来真正跟图形硬件打交道 bool GraphicsSystem::Initialize(const GraphicsSystemCfg cfg) {m_pRHI MakeSharedD3D12RHI();if (!m_pRHI-Initialize(rhiCfg)){return false;}return true; }对于DX12来说那么就有一个D3D12RHI的子类啦。目前我们先不考虑渲染任何东西只是把初始化的工作做掉那需要哪些东西呢 首先IDXGIFactory和ID3D12Device这两货肯定是需要的如果没有它们整个初始化逻辑就没法跑IDXGISwapChain也是必要的不然连back buffer都没有然后我们需要使用绘制指令来进行各种底层操作那就需要ID3D12CommandQueueID3D12CommandAllocator和ID3D12GraphicsCommandList这三剑客了。ID3D12CommandQueue是指令的执行者它可以包含多个command listcommand allocator是存储指令的数据结构command list里记录的指令实际上是保存到这里。另外由于GPU指令的执行对CPU来说是异步的因此还需要一个ID3D12Fence用于同步。我们使用ComPtr来管理这些类ComPtr对象当引用计数为0时会自动调用Release接口从而避免内存泄漏。 class D3D12RHI : public RHI { private:ComPtrID3D12Device m_pDevice;ComPtrIDXGIFactory4 m_pDxGiFactory;ComPtrID3D12Fence m_pFence;ComPtrID3D12CommandQueue m_pCommandQueue;ComPtrID3D12CommandAllocator m_pDirectCmdListAlloc;ComPtrID3D12GraphicsCommandList m_pCommandList;ComPtrIDXGISwapChain m_pSwapChain; }; DX12的资源和view是分开的一个资源可以对应多种view这里的view以D3D12_CPU_DESCRIPTOR_HANDLE来区分。一个资源每使用一个view就需要往ID3D12DescriptorHeap申请一个空闲的handle。那么我们可以把这个过程抽象一下封装一个D3D12DescriptorHeap类它负责分配空闲的handle给申请者 class D3D12DescriptorHeap { public:D3D12DescriptorHeap(ID3D12Device* pDevice, D3D12_DESCRIPTOR_HEAP_TYPE type, UInt32 numDescriptors);void Initialize();D3D12_CPU_DESCRIPTOR_HANDLE Allocate();private:ID3D12Device* m_pDevice nullptr;D3D12_DESCRIPTOR_HEAP_TYPE m_type;UInt32 m_numDescriptors 0;UInt32 m_descriptorSize 0;UInt32 m_remainingFreeHandles;CD3DX12_CPU_DESCRIPTOR_HANDLE m_cpuHandle;ComPtrID3D12DescriptorHeap m_pDescriptorHeap; }; 初始化过程中我们需要创建若干back buffer和一个depth buffer这两个buffer的创建方式有区别但它们本质上都属于资源因此给它们各自一个类然后共同继承D3D12Resource这个类这个类包含一些对资源的通用操作。 class D3D12Resource : public D3D12RHIChild { public:D3D12Resource(D3D12RHI* pRHI) : D3D12RHIChild(pRHI), m_state(D3D12_RESOURCE_STATE_COMMON) {}void SetState(D3D12_RESOURCE_STATES state);protected:D3D12_RESOURCE_STATES m_state;ComPtrID3D12Resource m_pResource; };class D3D12BackBuffer : public D3D12Resource { public:D3D12BackBuffer(D3D12RHI* pRHI) : D3D12Resource(pRHI), m_rtvHandle() {}void Initialize(Int32 index);void Clear(const Color color);D3D12_CPU_DESCRIPTOR_HANDLE GetRtvHandle() const { return m_rtvHandle; } private:D3D12_CPU_DESCRIPTOR_HANDLE m_rtvHandle; };class D3D12DepthBuffer : public D3D12Resource { public:D3D12DepthBuffer(D3D12RHI* pRHI) : D3D12Resource(pRHI), m_dsvHandle() {}void Initialize(Int32 clientWidth, Int32 clientHeight, DXGI_FORMAT format);void Clear(D3D12_CLEAR_FLAGS clearFlags, Float depth, UInt8 stencil);D3D12_CPU_DESCRIPTOR_HANDLE GetDsvHandle() const { return m_dsvHandle; }private:D3D12_CPU_DESCRIPTOR_HANDLE m_dsvHandle; }; 初始化流程完毕之后我们就要准备update了。现阶段我们啥也不做就准备一下渲染环境吧。我们在RHI类中添加了PrepareRender和FinishRender两个抽象接口分别表示准备渲染以及完成渲染提交显示的逻辑。对于DX12来说在渲染前/后要准备哪些事情呢 渲染前首先是清空command让command相关的数据结构保证可用然后获取当前要渲染的back buffer设置其状态为D3D12_RESOURCE_STATE_RENDER_TARGET然后对back buffer和depth buffer执行clear操作最后提交给硬件。在渲染结束之后同样我们要把当前back buffer的状态切回渲染前的如果是多缓冲要切到下一个可用的back buffer执行掉中间产生的所有渲染指令显示到屏幕上。 自此一个最简单的渲染框架就搭好了运行起来也就是一个填充满clear color的窗口并没有什么稀奇然而背后的代码量却有数百行了。
http://www.w-s-a.com/news/943894/

相关文章:

  • 怎么安装php网站哪个网站是专门为建设方服务的
  • 重慶网站开发sina app engine wordpress
  • wampserver网站开发步骤中冠工程管理咨询有限公司
  • 自己做网站商城需要营业执照吗老外做牛排的视频网站
  • 网站推广效果的评估指标主要包括公司广告推广
  • 昆明网站建设那家好哪个网站学做凉皮
  • hype做网站动效哪里有给网站做
  • 打扑克网站推广软件设计类专业哪个最好
  • 网站设计首页网站建设意向书
  • 做网站要学那些angularjs后台管理系统网站
  • 广州白云手机网站建设学做点心上哪个网站
  • 哈尔滨网站建设步骤百度青岛代理公司
  • 怎么利用代码做网站军队 网站备案
  • 百度手机版网址免费广州seo
  • 军博做网站公司wordpress评论插件
  • 如何申请一个网站 做视频网站报错解析
  • 徐州高端网站建设无锡找做网站
  • 网站如何不需要备案百度的宣传视频广告
  • 如何用易语言做网站采购系统有哪些
  • 建一个网站容易吗浙江省城乡建设厅官网
  • 奇点网站建设黄骅贴吧百度贴吧
  • 站长爱it如何分析网站设计
  • 服装公司网站定位seo网站关键词
  • 电商网站开发流程文档南京 seo 价格
  • 网站建设任务分解张家港网站制作服务
  • 化州+网站建设网络营销怎么做推广
  • 贵阳网站设计方案阿里云 wordpress 数据库
  • 如何做购物返佣金网站高校 网站建设实施方案
  • 网站如何连接微信支付网页制作与网站开发
  • 地名网站建设方案营销型网站策划书