Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h1
-rw-r--r--source/blender/draw/intern/draw_cache.c30
-rw-r--r--source/blender/draw/intern/draw_cache.h1
-rw-r--r--source/blender/draw/intern/draw_manager.c25
4 files changed, 56 insertions, 1 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index a4a933250c9..16a17f4f21d 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -226,6 +226,7 @@ void DRW_uniformbuffer_free(struct GPUUniformBuffer *ubo);
} while (0)
void DRW_transform_to_display(struct GPUTexture *tex);
+void DRW_transform_none(struct GPUTexture *tex);
void DRW_multisamples_resolve(
struct GPUTexture *src_depth, struct GPUTexture *src_color);
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index 707aadbc229..d23b9e693ce 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -51,6 +51,7 @@ static struct DRWShapeCache {
Gwn_Batch *drw_cursor;
Gwn_Batch *drw_cursor_only_circle;
Gwn_Batch *drw_fullscreen_quad;
+ Gwn_Batch *drw_fullscreen_quad_texcoord;
Gwn_Batch *drw_quad;
Gwn_Batch *drw_sphere;
Gwn_Batch *drw_screenspace_circle;
@@ -287,6 +288,35 @@ Gwn_Batch *DRW_cache_fullscreen_quad_get(void)
return SHC.drw_fullscreen_quad;
}
+Gwn_Batch *DRW_cache_fullscreen_quad_texcoord_get(void)
+{
+ if (!SHC.drw_fullscreen_quad_texcoord) {
+ /* Use a triangle instead of a real quad */
+ /* https://www.slideshare.net/DevCentralAMD/vertex-shader-tricks-bill-bilodeau - slide 14 */
+ float pos[3][2] = {{-1.0f, -1.0f}, { 3.0f, -1.0f}, {-1.0f, 3.0f}};
+ float texCoord[3][2] = {{ 0.0f, 0.0f}, { 2.0f, 0.0f}, { 0.0f, 2.0f}};
+
+ /* Position Only 2D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, texCoord; } attr_id;
+ if (format.attr_len == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ attr_id.texCoord = GWN_vertformat_attr_add(&format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 3);
+
+ for (int i = 0; i < 3; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, pos[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.texCoord, i, texCoord[i]);
+ }
+
+ SHC.drw_fullscreen_quad_texcoord = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_fullscreen_quad_texcoord;
+}
+
/* Just a regular quad with 4 vertices. */
Gwn_Batch *DRW_cache_quad_get(void)
{
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index c1c80d2c5bf..07c8a571256 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -40,6 +40,7 @@ struct Gwn_Batch *DRW_cache_cursor_get(bool crosshair_lines);
/* Common Shapes */
struct Gwn_Batch *DRW_cache_fullscreen_quad_get(void);
+struct Gwn_Batch *DRW_cache_fullscreen_quad_texcoord_get(void);
struct Gwn_Batch *DRW_cache_quad_get(void);
struct Gwn_Batch *DRW_cache_cube_get(void);
struct Gwn_Batch *DRW_cache_sphere_get(void);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 556f02c2899..58ce9dd5218 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -283,6 +283,29 @@ void DRW_transform_to_display(GPUTexture *tex)
}
}
+/* Draw texture to framebuffer without any color transforms */
+void DRW_transform_none(GPUTexture *tex)
+{
+ /* Draw as texture for final render (without immediate mode). */
+ Gwn_Batch *geom = DRW_cache_fullscreen_quad_texcoord_get();
+ GWN_batch_program_set_builtin(geom, GPU_SHADER_2D_IMAGE_COLOR);
+
+ GPU_texture_bind(tex, 0);
+
+ const float white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ GWN_batch_uniform_4fv(geom, "color", white);
+
+ float mat[4][4];
+ unit_m4(mat);
+ GWN_batch_uniform_mat4(geom, "ModelViewProjectionMatrix", mat);
+
+ GWN_batch_program_use_begin(geom);
+ GWN_batch_draw_range_ex(geom, 0, 0, false);
+ GWN_batch_program_use_end(geom);
+
+ GPU_texture_unbind(tex);
+}
+
/** \} */
@@ -2217,8 +2240,8 @@ void DRW_engine_register(DrawEngineType *draw_engine_type)
void DRW_engines_register(void)
{
+ RE_engines_register(&DRW_engine_viewport_opengl_type);
RE_engines_register(&DRW_engine_viewport_eevee_type);
- RE_engines_register(&DRW_engine_viewport_workbench_type);
DRW_engine_register(&draw_engine_workbench_solid);
DRW_engine_register(&draw_engine_workbench_transparent);