GPU: Fix broken assert
[blender.git] / source / blender / render / intern / include / render_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup render
22  */
23
24 #ifndef __RENDER_TYPES_H__
25 #define __RENDER_TYPES_H__
26
27 /* ------------------------------------------------------------------------- */
28 /* exposed internal in render module only! */
29 /* ------------------------------------------------------------------------- */
30
31 #include "DNA_scene_types.h"
32 #include "DNA_object_types.h"
33
34 #include "BLI_threads.h"
35
36 #include "BKE_main.h"
37
38 #include "RE_pipeline.h"
39
40 struct GHash;
41 struct Main;
42 struct Object;
43 struct RenderEngine;
44 struct ReportList;
45
46 /* this is handed over to threaded hiding/passes/shading engine */
47 typedef struct RenderPart {
48   struct RenderPart *next, *prev;
49
50   RenderResult *result; /* result of part rendering */
51   ListBase fullresult;  /* optional full sample buffers */
52
53   rcti disprect;    /* part coordinates within total picture */
54   int rectx, recty; /* the size */
55   int nr;           /* nr is partnr */
56   short status;
57 } RenderPart;
58
59 enum {
60   PART_STATUS_NONE = 0,
61   PART_STATUS_IN_PROGRESS = 1,
62   PART_STATUS_RENDERED = 2,
63   PART_STATUS_MERGED = 3,
64 };
65
66 /* controls state of render, everything that's read-only during render stage */
67 struct Render {
68   struct Render *next, *prev;
69   char name[RE_MAXNAME];
70   int slot;
71
72   /* state settings */
73   short flag, ok, result_ok;
74
75   /* result of rendering */
76   RenderResult *result;
77   /* if render with single-layer option, other rendered layers are stored here */
78   RenderResult *pushedresult;
79   /* a list of RenderResults, for fullsample */
80   ListBase fullresult;
81   /* read/write mutex, all internal code that writes to re->result must use a
82    * write lock, all external code must use a read lock. internal code is assumed
83    * to not conflict with writes, so no lock used for that */
84   ThreadRWMutex resultmutex;
85
86   /** Window size, display rect, viewplane.
87    * \note Buffer width and height with percentage applied
88    * without border & crop. convert to long before multiplying together to avoid overflow. */
89   int winx, winy;
90   rcti disprect;  /* part within winx winy */
91   rctf viewplane; /* mapped on winx winy */
92
93   /* final picture width and height (within disprect) */
94   int rectx, recty;
95
96   /* real maximum size of parts after correction for minimum
97    * partx*xparts can be larger than rectx, in that case last part is smaller */
98   int partx, party;
99
100   /* Camera transform, only used by Freestyle. */
101   float winmat[4][4];
102
103   /* clippping */
104   float clip_start;
105   float clip_end;
106
107   /* main, scene, and its full copy of renderdata and world */
108   struct Main *main;
109   Scene *scene;
110   RenderData r;
111   ListBase view_layers;
112   int active_view_layer;
113   struct Object *camera_override;
114
115   ThreadRWMutex partsmutex;
116   struct GHash *parts;
117
118   /* render engine */
119   struct RenderEngine *engine;
120
121   /* NOTE: This is a minimal dependency graph and evaluated scene which is enough to access view
122    * layer visibility and use for post-precessing (compositor and sequencer). */
123   Depsgraph *pipeline_depsgraph;
124   Scene *pipeline_scene_eval;
125
126 #ifdef WITH_FREESTYLE
127   struct Main *freestyle_bmain;
128   ListBase freestyle_renders;
129 #endif
130
131   /* callbacks */
132   void (*display_init)(void *handle, RenderResult *rr);
133   void *dih;
134   void (*display_clear)(void *handle, RenderResult *rr);
135   void *dch;
136   void (*display_update)(void *handle, RenderResult *rr, volatile rcti *rect);
137   void *duh;
138   void (*current_scene_update)(void *handle, struct Scene *scene);
139   void *suh;
140
141   void (*stats_draw)(void *handle, RenderStats *ri);
142   void *sdh;
143   void (*progress)(void *handle, float i);
144   void *prh;
145
146   void (*draw_lock)(void *handle, int i);
147   void *dlh;
148   int (*test_break)(void *handle);
149   void *tbh;
150
151   RenderStats i;
152
153   struct ReportList *reports;
154
155   void **movie_ctx_arr;
156   char viewname[MAX_NAME];
157
158   /* TODO replace by a whole draw manager. */
159   void *gl_context;
160   void *gpu_context;
161 };
162
163 /* **************** defines ********************* */
164
165 /* R.flag */
166 #define R_ANIMATION 1
167
168 #endif /* __RENDER_TYPES_H__ */