BI Viewport(GLSL): support for envmap in Texture node
This patch is another step to achieve BI and it's Viewport consistency for cubemap textures. {F318879} To test world_space_shading flag D2072 is required. Alexander (Blend4Web Team) Reviewers: campbellbarton, brecht Subscribers: homyachetser, Evgeny_Rodygin, AlexKowel, yurikovelenov Differential Revision: https://developer.blender.org/D2074
This commit is contained in:
parent
4aaf5baccf
commit
d4eb28ab7e
|
@ -1358,6 +1358,13 @@ void mtex_cube_map(vec3 co, samplerCube ima, out float value, out vec4 color)
|
|||
value = 1.0;
|
||||
}
|
||||
|
||||
void mtex_cube_map_refl_from_refldir(
|
||||
samplerCube ima, vec3 reflecteddirection, out float value, out vec4 color)
|
||||
{
|
||||
color = textureCube(ima, reflecteddirection);
|
||||
value = 1.0;
|
||||
}
|
||||
|
||||
void mtex_cube_map_refl(
|
||||
samplerCube ima, vec3 vp, vec3 vn, mat4 viewmatrixinverse, mat4 viewmatrix,
|
||||
out float value, out vec4 color)
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
|
||||
#include "node_shader_util.h"
|
||||
|
||||
#include "GPU_material.h"
|
||||
|
||||
/* **************** TEXTURE ******************** */
|
||||
static bNodeSocketTemplate sh_node_texture_in[] = {
|
||||
{ SOCK_VECTOR, 1, "Vector", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE}, /* no limit */
|
||||
|
@ -121,9 +123,20 @@ static int gpu_shader_texture(GPUMaterial *mat, bNode *node, bNodeExecData *UNUS
|
|||
{
|
||||
Tex *tex = (Tex *)node->id;
|
||||
|
||||
if (tex && tex->type == TEX_IMAGE && tex->ima) {
|
||||
GPUNodeLink *texlink = GPU_image(tex->ima, &tex->iuser, false);
|
||||
GPU_stack_link(mat, "texture_image", in, out, texlink);
|
||||
if (tex && tex->ima && (tex->type == TEX_IMAGE || tex->type == TEX_ENVMAP)) {
|
||||
if (tex->type == TEX_IMAGE) {
|
||||
GPUNodeLink *texlink = GPU_image(tex->ima, &tex->iuser, false);
|
||||
GPU_stack_link(mat, "texture_image", in, out, texlink);
|
||||
}
|
||||
else { /* TEX_ENVMAP */
|
||||
if (!in[0].link)
|
||||
in[0].link = GPU_uniform(in[0].vec);
|
||||
if (!GPU_material_use_world_space_shading(mat))
|
||||
GPU_link(mat, "direction_transform_m4v3", in[0].link, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &in[0].link);
|
||||
GPU_link(mat, "mtex_cube_map_refl_from_refldir",
|
||||
GPU_cube_map(tex->ima, &tex->iuser, false), in[0].link, &out[0].link, &out[1].link);
|
||||
GPU_link(mat, "color_to_normal", out[1].link, &out[2].link);
|
||||
}
|
||||
|
||||
ImBuf *ibuf = BKE_image_acquire_ibuf(tex->ima, &tex->iuser, NULL);
|
||||
if (ibuf && (ibuf->colormanage_flag & IMB_COLORMANAGE_IS_DATA) == 0 &&
|
||||
|
|
Loading…
Reference in New Issue