60 QSGRenderer(QSGRenderContext *context);
61 virtual ~QSGRenderer();
64 QMatrix4x4 currentProjectionMatrix(
int index)
const {
return m_current_projection_matrix[index]; }
65 QMatrix4x4 currentModelViewMatrix()
const {
return m_current_model_view_matrix; }
66 QMatrix4x4 currentCombinedMatrix(
int index)
const {
return m_current_projection_matrix[index] * m_current_model_view_matrix; }
67 qreal currentOpacity()
const {
return m_current_opacity; }
68 qreal determinant()
const {
return m_current_determinant; }
70 void setDevicePixelRatio(qreal ratio) { m_device_pixel_ratio = ratio; }
71 qreal devicePixelRatio()
const {
return m_device_pixel_ratio; }
72 QSGRenderContext *context()
const {
return m_context; }
74 bool isMirrored()
const;
75 void renderScene() override;
76 void prepareSceneInline() override;
77 void renderSceneInline() override;
78 void nodeChanged(QSGNode *node, QSGNode::DirtyState state) override;
80 QSGNodeUpdater *nodeUpdater()
const;
81 void setNodeUpdater(QSGNodeUpdater *updater);
82 inline QSGMaterialShader::RenderState state(QSGMaterialShader::RenderState::DirtyStates dirty)
const;
83 virtual void setVisualizationMode(
const QByteArray &) { }
84 virtual bool hasVisualizationModeWithContinuousUpdate()
const {
return false; }
85 virtual void releaseCachedResources() { }
87 void clearChangedFlag() { m_changed_emitted =
false; }
90 QByteArray *currentUniformData()
const {
return m_current_uniform_data; }
91 QRhiResourceUpdateBatch *currentResourceUpdateBatch()
const {
return m_current_resource_update_batch; }
92 QRhi *currentRhi()
const {
return m_rhi; }
94 void setRenderTarget(
const QSGRenderTarget &rt) { m_rt = rt; }
95 const QSGRenderTarget &renderTarget()
const {
return m_rt; }
97 void setRenderPassRecordingCallbacks(QSGRenderContext::RenderPassCallback start,
98 QSGRenderContext::RenderPassCallback end,
101 m_renderPassRecordingCallbacks.start = start;
102 m_renderPassRecordingCallbacks.end = end;
103 m_renderPassRecordingCallbacks.userData = userData;
107 virtual void render() = 0;
109 virtual void prepareInline();
110 virtual void renderInline();
112 virtual void preprocess();
114 void addNodesToPreprocess(QSGNode *node);
115 void removeNodesToPreprocess(QSGNode *node);
117 QVarLengthArray<QMatrix4x4, 1> m_current_projection_matrix;
118 QVarLengthArray<QMatrix4x4, 1> m_current_projection_matrix_native_ndc;
119 QMatrix4x4 m_current_model_view_matrix;
120 qreal m_current_opacity;
121 qreal m_current_determinant;
122 qreal m_device_pixel_ratio;
124 QSGRenderContext *m_context;
126 QByteArray *m_current_uniform_data;
127 QRhiResourceUpdateBatch *m_current_resource_update_batch;
129 QSGRenderTarget m_rt;
131 QSGRenderContext::RenderPassCallback start =
nullptr;
132 QSGRenderContext::RenderPassCallback end =
nullptr;
133 void *userData =
nullptr;
134 } m_renderPassRecordingCallbacks;
137 QSGNodeUpdater *m_node_updater;
139 QSet<QSGNode *> m_nodes_to_preprocess;
140 QSet<QSGNode *> m_nodes_dont_preprocess;
142 uint m_changed_emitted : 1;
143 uint m_is_rendering : 1;
144 uint m_is_preprocessing : 1;