Draw Module: Move the Global Ubo block definition to it's own file.

This commit is contained in:
Clément Foucault 2017-03-22 21:26:27 +01:00
parent 4646ecf749
commit 26c140fbc8
13 changed files with 105 additions and 323 deletions

View File

@ -103,6 +103,7 @@ data_to_c_simple(engines/eevee/shaders/lit_surface_frag.glsl SRC)
data_to_c_simple(engines/eevee/shaders/lit_surface_vert.glsl SRC)
data_to_c_simple(engines/eevee/shaders/tonemap_frag.glsl SRC)
data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
data_to_c_simple(modes/shaders/edit_overlay_frag.glsl SRC)
data_to_c_simple(modes/shaders/edit_overlay_vert.glsl SRC)
data_to_c_simple(modes/shaders/edit_overlay_geom_tri.glsl SRC)

View File

@ -167,6 +167,7 @@ void DRW_framebuffer_texture_detach(struct GPUTexture *tex);
void DRW_framebuffer_blit(struct GPUFrameBuffer *fb_read, struct GPUFrameBuffer *fb_write, bool depth);
/* Shaders */
struct GPUShader *DRW_shader_create(const char *vert, const char *geom, const char *frag, const char *defines);
struct GPUShader *DRW_shader_create_with_lib(const char *vert, const char *geom, const char *frag, const char *lib, const char *defines);
struct GPUShader *DRW_shader_create_2D(const char *frag, const char *defines);
struct GPUShader *DRW_shader_create_3D(const char *frag, const char *defines);
struct GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines);

View File

@ -316,6 +316,11 @@ GPUShader *DRW_shader_create(const char *vert, const char *geom, const char *fra
return GPU_shader_create(vert, frag, geom, NULL, defines, 0, 0, 0);
}
GPUShader *DRW_shader_create_with_lib(const char *vert, const char *geom, const char *frag, const char *lib, const char *defines)
{
return GPU_shader_create(vert, frag, geom, lib, defines, 0, 0, 0);
}
GPUShader *DRW_shader_create_2D(const char *frag, const char *defines)
{
return GPU_shader_create(datatoc_gpu_shader_2D_vert_glsl, frag, NULL, NULL, defines, 0, 0, 0);

View File

@ -49,6 +49,7 @@ extern char datatoc_edit_overlay_facefill_vert_glsl[];
extern char datatoc_edit_overlay_facefill_frag_glsl[];
extern char datatoc_edit_normals_vert_glsl[];
extern char datatoc_edit_normals_geom_glsl[];
extern char datatoc_common_globals_lib_glsl[];
extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
@ -138,58 +139,69 @@ static void EDIT_MESH_engine_init(void)
tex, 2);
if (!e_data.overlay_tri_sh) {
e_data.overlay_tri_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, "#define EDGE_FIX\n");
e_data.overlay_tri_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl,
datatoc_common_globals_lib_glsl, "#define EDGE_FIX\n");
}
if (!e_data.overlay_tri_fast_sh) {
e_data.overlay_tri_fast_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, NULL);
e_data.overlay_tri_fast_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl,
datatoc_common_globals_lib_glsl, NULL);
}
if (!e_data.overlay_tri_vcol_sh) {
e_data.overlay_tri_vcol_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, "#define EDGE_FIX\n"
"#define VERTEX_SELECTION\n");
e_data.overlay_tri_vcol_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl,
datatoc_common_globals_lib_glsl, "#define EDGE_FIX\n"
"#define VERTEX_SELECTION\n");
}
if (!e_data.overlay_tri_vcol_fast_sh) {
e_data.overlay_tri_vcol_fast_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, "#define VERTEX_SELECTION\n");
e_data.overlay_tri_vcol_fast_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl,
datatoc_common_globals_lib_glsl, "#define VERTEX_SELECTION\n");
}
if (!e_data.overlay_edge_sh) {
e_data.overlay_edge_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_edge_glsl,
datatoc_edit_overlay_frag_glsl, NULL);
e_data.overlay_edge_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_edge_glsl,
datatoc_edit_overlay_frag_glsl,
datatoc_common_globals_lib_glsl, NULL);
}
if (!e_data.overlay_edge_vcol_sh) {
e_data.overlay_edge_vcol_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_edge_glsl,
datatoc_edit_overlay_frag_glsl, "#define VERTEX_SELECTION\n");
e_data.overlay_edge_vcol_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_edge_glsl,
datatoc_edit_overlay_frag_glsl,
datatoc_common_globals_lib_glsl, "#define VERTEX_SELECTION\n");
}
if (!e_data.overlay_vert_sh) {
e_data.overlay_vert_sh = DRW_shader_create(datatoc_edit_overlay_loosevert_vert_glsl, NULL,
datatoc_edit_overlay_frag_glsl, "#define VERTEX_SELECTION\n");
e_data.overlay_vert_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_loosevert_vert_glsl, NULL,
datatoc_edit_overlay_frag_glsl,
datatoc_common_globals_lib_glsl, "#define VERTEX_SELECTION\n");
}
if (!e_data.overlay_facedot_sh) {
e_data.overlay_facedot_sh = DRW_shader_create(datatoc_edit_overlay_facedot_vert_glsl, NULL,
datatoc_edit_overlay_facedot_frag_glsl, NULL);
e_data.overlay_facedot_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_facedot_vert_glsl, NULL,
datatoc_edit_overlay_facedot_frag_glsl,
datatoc_common_globals_lib_glsl, NULL);
}
if (!e_data.overlay_mix_sh) {
e_data.overlay_mix_sh = DRW_shader_create_fullscreen(datatoc_edit_overlay_mix_frag_glsl, NULL);
}
if (!e_data.overlay_facefill_sh) {
e_data.overlay_facefill_sh = DRW_shader_create(datatoc_edit_overlay_facefill_vert_glsl, NULL,
datatoc_edit_overlay_facefill_frag_glsl, NULL);
e_data.overlay_facefill_sh = DRW_shader_create_with_lib(datatoc_edit_overlay_facefill_vert_glsl, NULL,
datatoc_edit_overlay_facefill_frag_glsl,
datatoc_common_globals_lib_glsl, NULL);
}
if (!e_data.normals_face_sh) {
e_data.normals_face_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl, datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl, "#define FACE_NORMALS\n");
e_data.normals_face_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl,
datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl, "#define FACE_NORMALS\n");
}
if (!e_data.normals_sh) {
e_data.normals_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl, datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl, NULL);
e_data.normals_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl,
datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl, NULL);
}
if (!e_data.depth_sh) {
e_data.depth_sh = DRW_shader_create_3D_depth_only();

View File

@ -0,0 +1,55 @@
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
vec4 colorBackground;
vec4 colorGrid;
vec4 colorGridEmphasise;
vec4 colorGridAxisX;
vec4 colorGridAxisY;
vec4 colorGridAxisZ;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
float gridDistance;
float gridResolution;
float gridSubdivisions;
float gridScale;
};

View File

@ -1,46 +1,4 @@
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
};
flat in int isSelected;
out vec4 FragColor;

View File

@ -1,46 +1,4 @@
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
};
uniform mat4 ModelViewProjectionMatrix;
in vec3 pos;

View File

@ -1,48 +1,6 @@
uniform mat4 ModelViewProjectionMatrix;
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
};
in vec3 pos;
in ivec4 data;

View File

@ -5,48 +5,6 @@
/* This shader follows the principles of
* http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
};
uniform float faceAlphaMod;
flat in vec3 edgesCrease;

View File

@ -5,48 +5,6 @@
/* This shader follows the principles of
* http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
};
layout(lines) in;
layout(triangle_strip, max_vertices=6) out;

View File

@ -5,48 +5,6 @@
/* This shader follows the principles of
* http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
};
layout(triangles) in;
#ifdef EDGE_FIX

View File

@ -5,48 +5,6 @@
/* This shader follows the principles of
* http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock {
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorTransform;
vec4 colorGroupActive;
vec4 colorGroup;
vec4 colorLamp;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLampNoAlpha;
float sizeLampCenter;
float sizeLampCircle;
float sizeLampCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
};
uniform mat4 ModelViewProjectionMatrix;
uniform vec2 viewportSize;

View File

@ -371,6 +371,7 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
source[num_source++] = standard_defines;
if (defines) source[num_source++] = defines;
if (libcode) source[num_source++] = libcode;
source[num_source++] = vertexcode;
glAttachShader(shader->program, shader->vertex);
@ -436,6 +437,7 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
source[num_source++] = standard_defines;
if (defines) source[num_source++] = defines;
if (libcode) source[num_source++] = libcode;
source[num_source++] = geocode;
glAttachShader(shader->program, shader->geometry);