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:
authorJeroen Bakker <jbakker>2020-03-19 10:06:49 +0300
committerJeroen Bakker <jeroen@blender.org>2020-03-19 10:26:48 +0300
commitfd48ff1296f45b32bffeca2c60dca2a12bb84229 (patch)
tree250137802d4bed0628a7926df724227349320757 /source/blender/windowmanager/intern/wm_stereo.c
parentfe045b2b77dc6d7f0b552619fe824b496d34db6c (diff)
Fix T73931: Stereo Viewport Color Management
Stereoscopic viewport didn't support Color Manangement due recent changes in the color management pipeline. In order to solve the issue we will migrate the strereo rendering into the GPUViewport. This will share some textures and reduce required GPU memory. Reviewed By: fclem, dfelinto Differential Revision: https://developer.blender.org/D6922
Diffstat (limited to 'source/blender/windowmanager/intern/wm_stereo.c')
-rw-r--r--source/blender/windowmanager/intern/wm_stereo.c94
1 files changed, 0 insertions, 94 deletions
diff --git a/source/blender/windowmanager/intern/wm_stereo.c b/source/blender/windowmanager/intern/wm_stereo.c
index c5f8fb71b60..8ae343d5eb5 100644
--- a/source/blender/windowmanager/intern/wm_stereo.c
+++ b/source/blender/windowmanager/intern/wm_stereo.c
@@ -53,100 +53,6 @@
#include "UI_interface.h"
#include "UI_resources.h"
-static eGPUInterlaceShader interlace_gpu_id_from_type(eStereo3dInterlaceType interlace_type)
-{
- switch (interlace_type) {
- case S3D_INTERLACE_ROW:
- return GPU_SHADER_INTERLACE_ROW;
- case S3D_INTERLACE_COLUMN:
- return GPU_SHADER_INTERLACE_COLUMN;
- case S3D_INTERLACE_CHECKERBOARD:
- default:
- return GPU_SHADER_INTERLACE_CHECKER;
- }
-}
-
-void wm_stereo3d_draw_interlace(wmWindow *win, ARegion *region)
-{
- bool swap = (win->stereo3d_format->flag & S3D_INTERLACE_SWAP) != 0;
- enum eStereo3dInterlaceType interlace_type = win->stereo3d_format->interlace_type;
-
- /* wmOrtho for the screen has this same offset */
- float halfx = GLA_PIXEL_OFS / region->winx;
- float halfy = GLA_PIXEL_OFS / region->winy;
-
- GPUVertFormat *format = immVertexFormat();
- uint texcoord = GPU_vertformat_attr_add(format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
-
- /* leave GL_TEXTURE0 as the latest active texture */
- for (int view = 1; view >= 0; view--) {
- GPUTexture *texture = wm_draw_region_texture(region, view);
- glActiveTexture(GL_TEXTURE0 + view);
- glBindTexture(GL_TEXTURE_2D, GPU_texture_opengl_bindcode(texture));
- }
-
- immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_INTERLACE);
- immUniform1i("image_a", (swap) ? 1 : 0);
- immUniform1i("image_b", (swap) ? 0 : 1);
-
- immUniform1i("interlace_id", interlace_gpu_id_from_type(interlace_type));
-
- immBegin(GPU_PRIM_TRI_FAN, 4);
-
- immAttr2f(texcoord, halfx, halfy);
- immVertex2f(pos, region->winrct.xmin, region->winrct.ymin);
-
- immAttr2f(texcoord, 1.0f + halfx, halfy);
- immVertex2f(pos, region->winrct.xmax + 1, region->winrct.ymin);
-
- immAttr2f(texcoord, 1.0f + halfx, 1.0f + halfy);
- immVertex2f(pos, region->winrct.xmax + 1, region->winrct.ymax + 1);
-
- immAttr2f(texcoord, halfx, 1.0f + halfy);
- immVertex2f(pos, region->winrct.xmin, region->winrct.ymax + 1);
-
- immEnd();
- immUnbindProgram();
-
- for (int view = 1; view >= 0; view--) {
- glActiveTexture(GL_TEXTURE0 + view);
- glBindTexture(GL_TEXTURE_2D, 0);
- }
-}
-
-void wm_stereo3d_draw_anaglyph(wmWindow *win, ARegion *region)
-{
- for (int view = 0; view < 2; view++) {
- int bit = view + 1;
-
- switch (win->stereo3d_format->anaglyph_type) {
- case S3D_ANAGLYPH_REDCYAN:
- glColorMask((1 & bit) ? GL_TRUE : GL_FALSE,
- (2 & bit) ? GL_TRUE : GL_FALSE,
- (2 & bit) ? GL_TRUE : GL_FALSE,
- GL_FALSE);
- break;
- case S3D_ANAGLYPH_GREENMAGENTA:
- glColorMask((2 & bit) ? GL_TRUE : GL_FALSE,
- (1 & bit) ? GL_TRUE : GL_FALSE,
- (2 & bit) ? GL_TRUE : GL_FALSE,
- GL_FALSE);
- break;
- case S3D_ANAGLYPH_YELLOWBLUE:
- glColorMask((1 & bit) ? GL_TRUE : GL_FALSE,
- (1 & bit) ? GL_TRUE : GL_FALSE,
- (2 & bit) ? GL_TRUE : GL_FALSE,
- GL_FALSE);
- break;
- }
-
- wm_draw_region_blend(region, view, false);
- }
-
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-}
-
void wm_stereo3d_draw_sidebyside(wmWindow *win, int view)
{
bool cross_eyed = (win->stereo3d_format->flag & S3D_SIDEBYSIDE_CROSSEYED) != 0;