The patch contains an implementation of the wide lines and the line stipple that is necessary for OpenGL upgrade. For the implementation I have chosen the geometry shader because it required minimum changes for the wrapper calls and such implementation is the best for the "basic shader" architecture. There are few shortcomings that can be corrected in future. They all are related to the fact that the lines in one strip are not connected with each other. So the stipple pattern is not continuous on the common vertex of two lines. There is also no continuity of form (each line is an independent rectangular). But the advantage is that even outdated glBegin, glVertex work! Though with the above restrictions. Continuity of form and stipple can be implemented with additional attributes, and it will require more changes in calls. At the moment, the patch replaces calls for some "gestures". It works satisfactorily for "cross" or "rectangular" and not so good for "lasso" and "circle" due to the above-mentioned shortcomings. Don't forget to set USE_GLSL to true for testing. Alexander Romanov (Blend4Web Team) Reviewers: merwin, brecht Reviewed By: merwin, brecht Subscribers: aligorith, Evgeny_Rodygin, AlexKowel, yurikovelenov Differential Revision: https://developer.blender.org/D1880
119 lines
3.7 KiB
C++
119 lines
3.7 KiB
C++
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2005 Blender Foundation.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): Brecht Van Lommel.
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
|
|
/** \file GPU_basic_shader.h
|
|
* \ingroup gpu
|
|
*/
|
|
|
|
#ifndef __GPU_BASIC_SHADER_H__
|
|
#define __GPU_BASIC_SHADER_H__
|
|
|
|
#include "BLI_utildefines.h"
|
|
#include "GPU_glew.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Fixed Function Shader */
|
|
|
|
typedef enum GPUBasicShaderOption {
|
|
GPU_SHADER_USE_COLOR = (1 << 0), /* use glColor, for lighting it replaces diffuse */
|
|
GPU_SHADER_LIGHTING = (1 << 1), /* use lighting */
|
|
GPU_SHADER_TWO_SIDED = (1 << 2), /* flip normals towards viewer */
|
|
GPU_SHADER_TEXTURE_2D = (1 << 3), /* use 2D texture to replace diffuse color */
|
|
|
|
GPU_SHADER_SOLID_LIGHTING = (1 << 4), /* use faster lighting (set automatically) */
|
|
GPU_SHADER_STIPPLE = (1 << 5), /* use stipple */
|
|
GPU_SHADER_LINE = (1 << 6), /* draw lines */
|
|
GPU_SHADER_OPTIONS_NUM = 7,
|
|
GPU_SHADER_OPTION_COMBINATIONS = (1 << GPU_SHADER_OPTIONS_NUM)
|
|
} GPUBasicShaderOption;
|
|
|
|
/* Keep these in sync with gpu_shader_basic_frag.glsl */
|
|
typedef enum GPUBasicShaderStipple {
|
|
GPU_SHADER_STIPPLE_HALFTONE = 0,
|
|
GPU_SHADER_STIPPLE_QUARTTONE = 1,
|
|
GPU_SHADER_STIPPLE_CHECKER_8PX = 2,
|
|
GPU_SHADER_STIPPLE_HEXAGON = 3,
|
|
GPU_SHADER_STIPPLE_DIAG_STRIPES = 4,
|
|
GPU_SHADER_STIPPLE_DIAG_STRIPES_SWAP = 5,
|
|
GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW = 6,
|
|
GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW_SWAP = 7,
|
|
GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN = 8,
|
|
GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN_SWAP = 9,
|
|
GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER = 10,
|
|
GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER_SWAP = 11
|
|
} GPUBasicShaderStipple;
|
|
|
|
void GPU_basic_shaders_init(void);
|
|
void GPU_basic_shaders_exit(void);
|
|
|
|
void GPU_basic_shader_bind(int options);
|
|
int GPU_basic_shader_bound_options(void);
|
|
|
|
void GPU_basic_shader_colors(const float diffuse[3], const float specular[3],
|
|
int shininess, float alpha);
|
|
|
|
/* Fixed Function Lighting */
|
|
|
|
typedef enum GPULightType {
|
|
GPU_LIGHT_POINT,
|
|
GPU_LIGHT_SPOT,
|
|
GPU_LIGHT_SUN
|
|
} GPULightType;
|
|
|
|
typedef struct GPULightData {
|
|
GPULightType type;
|
|
|
|
float position[3];
|
|
float direction[3];
|
|
|
|
float diffuse[3];
|
|
float specular[3];
|
|
|
|
float constant_attenuation;
|
|
float linear_attenuation;
|
|
float quadratic_attenuation;
|
|
|
|
float spot_cutoff;
|
|
float spot_exponent;
|
|
} GPULightData;
|
|
|
|
void GPU_basic_shader_light_set(int light_num, GPULightData *light);
|
|
void GPU_basic_shader_light_set_viewer(bool local);
|
|
void GPU_basic_shader_stipple(GPUBasicShaderStipple stipple_id);
|
|
void GPU_basic_shader_line_stipple(GLint stipple_factor, GLushort stipple_pattern);
|
|
void GPU_basic_shader_line_width(float line_width);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|