载入中...
搜索中...
未找到
RenderTrace.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Export.h"
4
5#include <string>
6
7namespace eve::debug {
8
15public:
16 virtual ~IRenderTracer() = default;
17 virtual void frameBegin() {}
18 virtual void frameEnd() {}
19 virtual void passBegin(const char* name) {}
20 virtual void passEnd(const char* name) {}
21 virtual void target(const char* name) {} // screen / canvas
22 virtual void bind(const char* kind, const char* name) {}
23 virtual void draw(const char* api, const char* detail) {}
24 virtual void error(const char* message) {}
25};
26
27EVENGINE_API void setRenderTracer(IRenderTracer* tracer);
28EVENGINE_API IRenderTracer* renderTracer();
29
30inline void rtFrameBegin() {
31 if (IRenderTracer* t = renderTracer()) t->frameBegin();
32}
33inline void rtFrameEnd() {
34 if (IRenderTracer* t = renderTracer()) t->frameEnd();
35}
36inline void rtPassBegin(const char* name) {
37 if (IRenderTracer* t = renderTracer()) t->passBegin(name);
38}
39inline void rtPassEnd(const char* name) {
40 if (IRenderTracer* t = renderTracer()) t->passEnd(name);
41}
42inline void rtTarget(const char* name) {
43 if (IRenderTracer* t = renderTracer()) t->target(name);
44}
45inline void rtBind(const char* kind, const char* name) {
46 if (IRenderTracer* t = renderTracer()) t->bind(kind, name);
47}
48inline void rtDraw(const char* api, const char* detail = nullptr) {
49 if (IRenderTracer* t = renderTracer()) t->draw(api, detail ? detail : "");
50}
51inline void rtError(const char* message) {
52 if (IRenderTracer* t = renderTracer()) t->error(message ? message : "");
53}
54
57public:
58 explicit RenderPassScope(const char* name) : name_(name ? name : "") {
59 rtPassBegin(name_.c_str());
60 }
61 ~RenderPassScope() { rtPassEnd(name_.c_str()); }
64
65private:
66 std::string name_;
67};
68
69} // namespace eve::debug
Tok kind
#define EVENGINE_API
宿主(eve / libmain)导出宏;插件从进程导入同一批符号。
Definition Export.h:16
const char * name
Definition RockMesh.cpp:21
Optional render-pipeline tracer. Graphics / RenderSystem call the rt* helpers; when no tracer is inst...
Definition RenderTrace.h:14
virtual void error(const char *message)
Definition RenderTrace.h:24
virtual void bind(const char *kind, const char *name)
Definition RenderTrace.h:22
virtual void passBegin(const char *name)
Definition RenderTrace.h:19
virtual void frameBegin()
Definition RenderTrace.h:17
virtual void draw(const char *api, const char *detail)
Definition RenderTrace.h:23
virtual ~IRenderTracer()=default
virtual void passEnd(const char *name)
Definition RenderTrace.h:20
virtual void target(const char *name)
Definition RenderTrace.h:21
virtual void frameEnd()
Definition RenderTrace.h:18
RAII pass scope for C++ call sites.
Definition RenderTrace.h:56
RenderPassScope(const RenderPassScope &)=delete
RenderPassScope(const char *name)
Definition RenderTrace.h:58
RenderPassScope & operator=(const RenderPassScope &)=delete
void setRenderTracer(IRenderTracer *tracer)
void rtBind(const char *kind, const char *name)
Definition RenderTrace.h:45
void rtTarget(const char *name)
Definition RenderTrace.h:42
void rtPassBegin(const char *name)
Definition RenderTrace.h:36
void rtFrameBegin()
Definition RenderTrace.h:30
IRenderTracer * renderTracer()
void rtFrameEnd()
Definition RenderTrace.h:33
void rtError(const char *message)
Definition RenderTrace.h:51
void rtDraw(const char *api, const char *detail=nullptr)
Definition RenderTrace.h:48
void rtPassEnd(const char *name)
Definition RenderTrace.h:39