extract shaders to own file and use shared shader loading
Change-Id: I1af7e03a3e46f3cb49162be9351ce22f54d08c52
This commit is contained in:
@@ -20,6 +20,7 @@ $(eval $(call gb_Library_use_libraries,oglcanvas,\
|
|||||||
cppuhelper \
|
cppuhelper \
|
||||||
comphelper \
|
comphelper \
|
||||||
vcl \
|
vcl \
|
||||||
|
vclopengl \
|
||||||
tk \
|
tk \
|
||||||
tl \
|
tl \
|
||||||
i18nlangtag \
|
i18nlangtag \
|
||||||
|
@@ -24,6 +24,7 @@ $(eval $(call gb_Module_add_targets,canvas,\
|
|||||||
Library_canvastools \
|
Library_canvastools \
|
||||||
Library_simplecanvas \
|
Library_simplecanvas \
|
||||||
Library_vclcanvas \
|
Library_vclcanvas \
|
||||||
|
Package_opengl \
|
||||||
))
|
))
|
||||||
|
|
||||||
ifeq ($(ENABLE_CAIRO_CANVAS),TRUE)
|
ifeq ($(ENABLE_CAIRO_CANVAS),TRUE)
|
||||||
|
22
canvas/Package_opengl.mk
Normal file
22
canvas/Package_opengl.mk
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
|
||||||
|
#
|
||||||
|
# This file is part of the LibreOffice project.
|
||||||
|
#
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
#
|
||||||
|
|
||||||
|
$(eval $(call gb_Package_Package,canvas_opengl_shader,$(SRCDIR)/canvas/opengl))
|
||||||
|
|
||||||
|
$(eval $(call gb_Package_add_files,canvas_opengl_shader,$(LIBO_BIN_FOLDER)/opengl,\
|
||||||
|
dummyVertexShader.glsl \
|
||||||
|
linearMultiColorGradientFragmentShader.glsl \
|
||||||
|
linearTwoColorGradientFragmentShader.glsl \
|
||||||
|
radialMultiColorGradientFragmentShader.glsl \
|
||||||
|
radialTwoColorGradientFragmentShader.glsl \
|
||||||
|
rectangularMultiColorGradientFragmentShader.glsl \
|
||||||
|
rectangularTwoColorGradientFragmentShader.glsl \
|
||||||
|
))
|
||||||
|
|
||||||
|
# vim: set noet sw=4 ts=4:
|
17
canvas/opengl/dummyVertexShader.glsl
Normal file
17
canvas/opengl/dummyVertexShader.glsl
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
varying vec2 v_textureCoords2d;
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
gl_Position = ftransform();
|
||||||
|
v_textureCoords2d = gl_MultiTexCoord0.st;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
45
canvas/opengl/linearMultiColorGradientFragmentShader.glsl
Normal file
45
canvas/opengl/linearMultiColorGradientFragmentShader.glsl
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 120
|
||||||
|
|
||||||
|
uniform int i_nColors;
|
||||||
|
uniform sampler1D t_colorArray4d;
|
||||||
|
uniform sampler1D t_stopArray1d;
|
||||||
|
uniform mat3x2 m_transform;
|
||||||
|
varying vec2 v_textureCoords2d;
|
||||||
|
|
||||||
|
int findBucket(float t)
|
||||||
|
{
|
||||||
|
int nMinBucket=0;
|
||||||
|
while( nMinBucket < i_nColors &&
|
||||||
|
texture1D(t_stopArray1d, nMinBucket).s < t )
|
||||||
|
++nMinBucket;
|
||||||
|
return max(nMinBucket-1,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
const float fAlpha =
|
||||||
|
clamp( (m_transform * vec3(v_textureCoords2d,1)).s,
|
||||||
|
0.0, 1.0 );
|
||||||
|
|
||||||
|
const int nMinBucket=findBucket( fAlpha );
|
||||||
|
|
||||||
|
const float fLerp =
|
||||||
|
(fAlpha-texture1D(t_stopArray1d, nMinBucket).s) /
|
||||||
|
(texture1D(t_stopArray1d, nMinBucket+1).s -
|
||||||
|
texture1D(t_stopArray1d, nMinBucket).s);
|
||||||
|
|
||||||
|
gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket),
|
||||||
|
texture1D(t_colorArray4d, nMinBucket+1),
|
||||||
|
fLerp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
26
canvas/opengl/linearTwoColorGradientFragmentShader.glsl
Normal file
26
canvas/opengl/linearTwoColorGradientFragmentShader.glsl
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 120
|
||||||
|
|
||||||
|
uniform vec4 v_startColor4d;
|
||||||
|
uniform vec4 v_endColor4d;
|
||||||
|
uniform mat3x2 m_transform;
|
||||||
|
varying vec2 v_textureCoords2d;
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
gl_FragColor = mix(v_startColor4d,
|
||||||
|
v_endColor4d,
|
||||||
|
clamp(
|
||||||
|
(m_transform * vec3(v_textureCoords2d,1)).s,
|
||||||
|
0.0, 1.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
48
canvas/opengl/radialMultiColorGradientFragmentShader.glsl
Normal file
48
canvas/opengl/radialMultiColorGradientFragmentShader.glsl
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 120
|
||||||
|
|
||||||
|
uniform int i_nColors;
|
||||||
|
uniform sampler1D t_colorArray4d;
|
||||||
|
uniform sampler1D t_stopArray1d;
|
||||||
|
uniform mat3x2 m_transform;
|
||||||
|
varying vec2 v_textureCoords2d;
|
||||||
|
const vec2 v_center2d = vec2(0,0);
|
||||||
|
|
||||||
|
int findBucket(float t)
|
||||||
|
{
|
||||||
|
int nMinBucket=0;
|
||||||
|
while( nMinBucket < i_nColors &&
|
||||||
|
texture1D(t_stopArray1d, nMinBucket).s < t )
|
||||||
|
++nMinBucket;
|
||||||
|
return max(nMinBucket-1,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
const float fAlpha =
|
||||||
|
clamp( 1.0 - distance(
|
||||||
|
vec2( m_transform * vec3(v_textureCoords2d,1)),
|
||||||
|
v_center2d),
|
||||||
|
0.0, 1.0 );
|
||||||
|
|
||||||
|
const int nMinBucket=findBucket( fAlpha );
|
||||||
|
|
||||||
|
const float fLerp =
|
||||||
|
(fAlpha-texture1D(t_stopArray1d, nMinBucket).s) /
|
||||||
|
(texture1D(t_stopArray1d, nMinBucket+1).s -
|
||||||
|
texture1D(t_stopArray1d, nMinBucket).s);
|
||||||
|
|
||||||
|
gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket),
|
||||||
|
texture1D(t_colorArray4d, nMinBucket+1),
|
||||||
|
fLerp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
28
canvas/opengl/radialTwoColorGradientFragmentShader.glsl
Normal file
28
canvas/opengl/radialTwoColorGradientFragmentShader.glsl
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 120
|
||||||
|
|
||||||
|
uniform vec4 v_startColor4d;
|
||||||
|
uniform vec4 v_endColor4d;
|
||||||
|
uniform mat3x2 m_transform;
|
||||||
|
varying vec2 v_textureCoords2d;
|
||||||
|
const vec2 v_center2d = vec2(0,0);
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
gl_FragColor = mix(v_startColor4d,
|
||||||
|
v_endColor4d,
|
||||||
|
1.0 - distance(
|
||||||
|
vec2(
|
||||||
|
m_transform * vec3(v_textureCoords2d,1)),
|
||||||
|
v_center2d));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -0,0 +1,44 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 120
|
||||||
|
|
||||||
|
uniform int i_nColors;
|
||||||
|
uniform sampler1D t_colorArray4d;
|
||||||
|
uniform sampler1D t_stopArray1d;
|
||||||
|
uniform mat3x2 m_transform;
|
||||||
|
varying vec2 v_textureCoords2d;
|
||||||
|
|
||||||
|
int findBucket(float t)
|
||||||
|
{
|
||||||
|
int nMinBucket=0;
|
||||||
|
while( nMinBucket < i_nColors &&
|
||||||
|
texture1D(t_stopArray1d, nMinBucket).s < t )
|
||||||
|
++nMinBucket;
|
||||||
|
return max(nMinBucket-1,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
const vec2 v = abs( vec2(m_transform * vec3(v_textureCoords2d,1)) );
|
||||||
|
const float fAlpha = 1 - max(v.x, v.y);
|
||||||
|
|
||||||
|
const int nMinBucket=findBucket( fAlpha );
|
||||||
|
|
||||||
|
const float fLerp =
|
||||||
|
(fAlpha-texture1D(t_stopArray1d, nMinBucket).s) /
|
||||||
|
(texture1D(t_stopArray1d, nMinBucket+1).s -
|
||||||
|
texture1D(t_stopArray1d, nMinBucket).s);
|
||||||
|
|
||||||
|
gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket),
|
||||||
|
texture1D(t_colorArray4d, nMinBucket+1),
|
||||||
|
fLerp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
25
canvas/opengl/rectangularTwoColorGradientFragmentShader.glsl
Normal file
25
canvas/opengl/rectangularTwoColorGradientFragmentShader.glsl
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 120
|
||||||
|
|
||||||
|
uniform vec4 v_startColor4d;
|
||||||
|
uniform vec4 v_endColor4d;
|
||||||
|
uniform mat3x2 m_transform;
|
||||||
|
varying vec2 v_textureCoords2d;
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
const vec2 v = abs( vec2(m_transform * vec3(v_textureCoords2d,1)) );
|
||||||
|
const float t = max(v.x, v.y);
|
||||||
|
gl_FragColor = mix(v_startColor4d,
|
||||||
|
v_endColor4d,
|
||||||
|
1.0-t);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -53,197 +53,6 @@ static int lcl_XErrorHandler( unx::Display*, unx::XErrorEvent* )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Dummy vertex processing. Simply uses default pipeline for vertex
|
|
||||||
transformation, and forwards texture coodinates to fragment shader
|
|
||||||
*/
|
|
||||||
static const char dummyVertexShader[] =
|
|
||||||
{
|
|
||||||
"varying vec2 v_textureCoords2d; "
|
|
||||||
"void main(void) "
|
|
||||||
"{ "
|
|
||||||
" gl_Position = ftransform(); "
|
|
||||||
" v_textureCoords2d = gl_MultiTexCoord0.st; "
|
|
||||||
"} "
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Two-color linear gradient
|
|
||||||
*/
|
|
||||||
static const char linearTwoColorGradientFragmentShader[] =
|
|
||||||
{
|
|
||||||
"#version 120 \n"
|
|
||||||
"uniform vec4 v_startColor4d; "
|
|
||||||
"uniform vec4 v_endColor4d; "
|
|
||||||
"uniform mat3x2 m_transform; "
|
|
||||||
"varying vec2 v_textureCoords2d; "
|
|
||||||
"void main(void) "
|
|
||||||
"{ "
|
|
||||||
" gl_FragColor = mix(v_startColor4d, "
|
|
||||||
" v_endColor4d, "
|
|
||||||
" clamp( "
|
|
||||||
" (m_transform * vec3(v_textureCoords2d,1)).s, "
|
|
||||||
" 0.0, 1.0)); "
|
|
||||||
"} "
|
|
||||||
};
|
|
||||||
|
|
||||||
/** N-color linear gradient
|
|
||||||
*/
|
|
||||||
static const char linearMultiColorGradientFragmentShader[] =
|
|
||||||
{
|
|
||||||
"#version 120 \n"
|
|
||||||
"uniform int i_nColors; "
|
|
||||||
"uniform sampler1D t_colorArray4d; "
|
|
||||||
"uniform sampler1D t_stopArray1d; "
|
|
||||||
"uniform mat3x2 m_transform; "
|
|
||||||
"varying vec2 v_textureCoords2d; "
|
|
||||||
" "
|
|
||||||
"int findBucket(float t) "
|
|
||||||
"{ "
|
|
||||||
" int nMinBucket=0; "
|
|
||||||
" while( nMinBucket < i_nColors && "
|
|
||||||
" texture1D(t_stopArray1d, nMinBucket).s < t ) "
|
|
||||||
" ++nMinBucket; "
|
|
||||||
" return max(nMinBucket-1,0); "
|
|
||||||
"} "
|
|
||||||
" "
|
|
||||||
"void main(void) "
|
|
||||||
"{ "
|
|
||||||
" const float fAlpha = "
|
|
||||||
" clamp( (m_transform * vec3(v_textureCoords2d,1)).s, "
|
|
||||||
" 0.0, 1.0 ); "
|
|
||||||
" "
|
|
||||||
" const int nMinBucket=findBucket( fAlpha ); "
|
|
||||||
" "
|
|
||||||
" const float fLerp = "
|
|
||||||
" (fAlpha-texture1D(t_stopArray1d, nMinBucket).s) / "
|
|
||||||
" (texture1D(t_stopArray1d, nMinBucket+1).s - "
|
|
||||||
" texture1D(t_stopArray1d, nMinBucket).s); "
|
|
||||||
" "
|
|
||||||
" gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket), "
|
|
||||||
" texture1D(t_colorArray4d, nMinBucket+1), "
|
|
||||||
" fLerp); "
|
|
||||||
"} "
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Two-color radial gradient
|
|
||||||
*/
|
|
||||||
static const char radialTwoColorGradientFragmentShader[] =
|
|
||||||
{
|
|
||||||
"#version 120 \n"
|
|
||||||
"uniform vec4 v_startColor4d; "
|
|
||||||
"uniform vec4 v_endColor4d; "
|
|
||||||
"uniform mat3x2 m_transform; "
|
|
||||||
"varying vec2 v_textureCoords2d; "
|
|
||||||
"const vec2 v_center2d = vec2(0,0); "
|
|
||||||
"void main(void) "
|
|
||||||
"{ "
|
|
||||||
" gl_FragColor = mix(v_startColor4d, "
|
|
||||||
" v_endColor4d, "
|
|
||||||
" 1.0 - distance( "
|
|
||||||
" vec2( "
|
|
||||||
" m_transform * vec3(v_textureCoords2d,1)), "
|
|
||||||
" v_center2d)); "
|
|
||||||
"} "
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Multi-color radial gradient
|
|
||||||
*/
|
|
||||||
static const char radialMultiColorGradientFragmentShader[] =
|
|
||||||
{
|
|
||||||
"#version 120 \n"
|
|
||||||
"uniform int i_nColors; "
|
|
||||||
"uniform sampler1D t_colorArray4d; "
|
|
||||||
"uniform sampler1D t_stopArray1d; "
|
|
||||||
"uniform mat3x2 m_transform; "
|
|
||||||
"varying vec2 v_textureCoords2d; "
|
|
||||||
"const vec2 v_center2d = vec2(0,0); "
|
|
||||||
" "
|
|
||||||
"int findBucket(float t) "
|
|
||||||
"{ "
|
|
||||||
" int nMinBucket=0; "
|
|
||||||
" while( nMinBucket < i_nColors && "
|
|
||||||
" texture1D(t_stopArray1d, nMinBucket).s < t ) "
|
|
||||||
" ++nMinBucket; "
|
|
||||||
" return max(nMinBucket-1,0); "
|
|
||||||
"} "
|
|
||||||
" "
|
|
||||||
"void main(void) "
|
|
||||||
"{ "
|
|
||||||
" const float fAlpha = "
|
|
||||||
" clamp( 1.0 - distance( "
|
|
||||||
" vec2( m_transform * vec3(v_textureCoords2d,1)), "
|
|
||||||
" v_center2d), "
|
|
||||||
" 0.0, 1.0 ); "
|
|
||||||
" "
|
|
||||||
" const int nMinBucket=findBucket( fAlpha ); "
|
|
||||||
" "
|
|
||||||
" const float fLerp = "
|
|
||||||
" (fAlpha-texture1D(t_stopArray1d, nMinBucket).s) / "
|
|
||||||
" (texture1D(t_stopArray1d, nMinBucket+1).s - "
|
|
||||||
" texture1D(t_stopArray1d, nMinBucket).s); "
|
|
||||||
" "
|
|
||||||
" gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket), "
|
|
||||||
" texture1D(t_colorArray4d, nMinBucket+1), "
|
|
||||||
" fLerp); "
|
|
||||||
"} "
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Two-color rectangular gradient
|
|
||||||
*/
|
|
||||||
static const char rectangularTwoColorGradientFragmentShader[] =
|
|
||||||
{
|
|
||||||
"#version 120 \n"
|
|
||||||
"uniform vec4 v_startColor4d; "
|
|
||||||
"uniform vec4 v_endColor4d; "
|
|
||||||
"uniform mat3x2 m_transform; "
|
|
||||||
"varying vec2 v_textureCoords2d; "
|
|
||||||
"void main(void) "
|
|
||||||
"{ "
|
|
||||||
" const vec2 v = abs( vec2(m_transform * vec3(v_textureCoords2d,1)) ); "
|
|
||||||
" const float t = max(v.x, v.y); "
|
|
||||||
" gl_FragColor = mix(v_startColor4d, "
|
|
||||||
" v_endColor4d, "
|
|
||||||
" 1.0-t); "
|
|
||||||
"} "
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Multi-color rectangular gradient
|
|
||||||
*/
|
|
||||||
static const char rectangularMultiColorGradientFragmentShader[] =
|
|
||||||
{
|
|
||||||
"#version 120 \n"
|
|
||||||
"uniform int i_nColors; "
|
|
||||||
"uniform sampler1D t_colorArray4d; "
|
|
||||||
"uniform sampler1D t_stopArray1d; "
|
|
||||||
"uniform mat3x2 m_transform; "
|
|
||||||
"varying vec2 v_textureCoords2d; "
|
|
||||||
" "
|
|
||||||
"int findBucket(float t) "
|
|
||||||
"{ "
|
|
||||||
" int nMinBucket=0; "
|
|
||||||
" while( nMinBucket < i_nColors && "
|
|
||||||
" texture1D(t_stopArray1d, nMinBucket).s < t ) "
|
|
||||||
" ++nMinBucket; "
|
|
||||||
" return max(nMinBucket-1,0); "
|
|
||||||
"} "
|
|
||||||
" "
|
|
||||||
"void main(void) "
|
|
||||||
"{ "
|
|
||||||
" const vec2 v = abs( vec2(m_transform * vec3(v_textureCoords2d,1)) ); "
|
|
||||||
" const float fAlpha = 1 - max(v.x, v.y); "
|
|
||||||
" "
|
|
||||||
" const int nMinBucket=findBucket( fAlpha ); "
|
|
||||||
" "
|
|
||||||
" const float fLerp = "
|
|
||||||
" (fAlpha-texture1D(t_stopArray1d, nMinBucket).s) / "
|
|
||||||
" (texture1D(t_stopArray1d, nMinBucket+1).s - "
|
|
||||||
" texture1D(t_stopArray1d, nMinBucket).s); "
|
|
||||||
" "
|
|
||||||
" gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket), "
|
|
||||||
" texture1D(t_colorArray4d, nMinBucket+1), "
|
|
||||||
" fLerp); "
|
|
||||||
"} "
|
|
||||||
};
|
|
||||||
|
|
||||||
static void initContext()
|
static void initContext()
|
||||||
{
|
{
|
||||||
// need the backside for mirror effects
|
// need the backside for mirror effects
|
||||||
@@ -529,13 +338,6 @@ namespace oglcanvas
|
|||||||
mpGLPBufContext(NULL),
|
mpGLPBufContext(NULL),
|
||||||
mpFBConfig(NULL),
|
mpFBConfig(NULL),
|
||||||
mpTextureCache(new TextureCache()),
|
mpTextureCache(new TextureCache()),
|
||||||
mnDummyVertexProgram(0),
|
|
||||||
mnLinearTwoColorGradientFragmentProgram(0),
|
|
||||||
mnLinearMultiColorGradientFragmentProgram(0),
|
|
||||||
mnRadialTwoColorGradientFragmentProgram(0),
|
|
||||||
mnRadialMultiColorGradientFragmentProgram(0),
|
|
||||||
mnRectangularTwoColorGradientFragmentProgram(0),
|
|
||||||
mnRectangularMultiColorGradientFragmentProgram(0),
|
|
||||||
mnLinearTwoColorGradientProgram(0),
|
mnLinearTwoColorGradientProgram(0),
|
||||||
mnLinearMultiColorGradientProgram(0),
|
mnLinearMultiColorGradientProgram(0),
|
||||||
mnRadialTwoColorGradientProgram(0),
|
mnRadialTwoColorGradientProgram(0),
|
||||||
@@ -648,46 +450,23 @@ namespace oglcanvas
|
|||||||
// init window context
|
// init window context
|
||||||
initContext();
|
initContext();
|
||||||
|
|
||||||
// compile & link shaders - code courtesy rodo
|
mnLinearMultiColorGradientProgram =
|
||||||
compileShader(mnDummyVertexProgram,
|
OpenGLHelper::LoadShaders("dummyVertexShader.glsl", "linearMultiColorGradientFragmentShader.glsl");
|
||||||
GL_VERTEX_SHADER,
|
|
||||||
dummyVertexShader);
|
mnLinearTwoColorGradientProgram =
|
||||||
compileShader(mnLinearTwoColorGradientFragmentProgram,
|
OpenGLHelper::LoadShaders("dummyVertexShader.glsl", "linearTwoColorGradientFragmentShader.glsl");
|
||||||
GL_FRAGMENT_SHADER,
|
|
||||||
linearTwoColorGradientFragmentShader);
|
mnRadialMultiColorGradientProgram =
|
||||||
compileShader(mnLinearMultiColorGradientFragmentProgram,
|
OpenGLHelper::LoadShaders("dummyVertexShader.glsl", "radialMultiColorGradientFragmentShader.glsl");
|
||||||
GL_FRAGMENT_SHADER,
|
|
||||||
linearMultiColorGradientFragmentShader);
|
mnRadialTwoColorGradientProgram =
|
||||||
compileShader(mnRadialTwoColorGradientFragmentProgram,
|
OpenGLHelper::LoadShaders("dummyVertexShader.glsl", "radialTwoColorGradientFragmentShader.glsl");
|
||||||
GL_FRAGMENT_SHADER,
|
|
||||||
radialTwoColorGradientFragmentShader);
|
mnRectangularMultiColorGradientProgram =
|
||||||
compileShader(mnRadialMultiColorGradientFragmentProgram,
|
OpenGLHelper::LoadShaders("dummyVertexShader.glsl", "rectangularMultiColorGradientFragmentShader.glsl");
|
||||||
GL_FRAGMENT_SHADER,
|
|
||||||
radialMultiColorGradientFragmentShader);
|
mnRectangularTwoColorGradientProgram =
|
||||||
compileShader(mnRectangularTwoColorGradientFragmentProgram,
|
OpenGLHelper::LoadShaders("dummyVertexShader.glsl", "rectangularTwoColorGradientFragmentShader.glsl");
|
||||||
GL_FRAGMENT_SHADER,
|
|
||||||
rectangularTwoColorGradientFragmentShader);
|
|
||||||
compileShader(mnRectangularMultiColorGradientFragmentProgram,
|
|
||||||
GL_FRAGMENT_SHADER,
|
|
||||||
rectangularMultiColorGradientFragmentShader);
|
|
||||||
linkShaders(mnLinearTwoColorGradientProgram,
|
|
||||||
mnDummyVertexProgram,
|
|
||||||
mnLinearTwoColorGradientFragmentProgram);
|
|
||||||
linkShaders(mnLinearMultiColorGradientProgram,
|
|
||||||
mnDummyVertexProgram,
|
|
||||||
mnLinearMultiColorGradientFragmentProgram);
|
|
||||||
linkShaders(mnRadialTwoColorGradientProgram,
|
|
||||||
mnDummyVertexProgram,
|
|
||||||
mnRadialTwoColorGradientFragmentProgram);
|
|
||||||
linkShaders(mnRadialMultiColorGradientProgram,
|
|
||||||
mnDummyVertexProgram,
|
|
||||||
mnRadialMultiColorGradientFragmentProgram);
|
|
||||||
linkShaders(mnRectangularTwoColorGradientProgram,
|
|
||||||
mnDummyVertexProgram,
|
|
||||||
mnRectangularTwoColorGradientFragmentProgram);
|
|
||||||
linkShaders(mnRectangularMultiColorGradientProgram,
|
|
||||||
mnDummyVertexProgram,
|
|
||||||
mnRectangularMultiColorGradientFragmentProgram);
|
|
||||||
|
|
||||||
glXMakeCurrent(pDisplay, None, NULL);
|
glXMakeCurrent(pDisplay, None, NULL);
|
||||||
}
|
}
|
||||||
@@ -716,13 +495,6 @@ namespace oglcanvas
|
|||||||
glDeleteProgram( mnRadialMultiColorGradientProgram );
|
glDeleteProgram( mnRadialMultiColorGradientProgram );
|
||||||
glDeleteProgram( mnLinearTwoColorGradientProgram );
|
glDeleteProgram( mnLinearTwoColorGradientProgram );
|
||||||
glDeleteProgram( mnLinearMultiColorGradientProgram );
|
glDeleteProgram( mnLinearMultiColorGradientProgram );
|
||||||
glDeleteShader( mnRectangularTwoColorGradientFragmentProgram );
|
|
||||||
glDeleteShader( mnRectangularMultiColorGradientFragmentProgram );
|
|
||||||
glDeleteShader( mnRadialTwoColorGradientFragmentProgram );
|
|
||||||
glDeleteShader( mnRadialMultiColorGradientFragmentProgram );
|
|
||||||
glDeleteShader( mnLinearTwoColorGradientFragmentProgram );
|
|
||||||
glDeleteShader( mnLinearMultiColorGradientFragmentProgram );
|
|
||||||
glDeleteShader( mnDummyVertexProgram );
|
|
||||||
|
|
||||||
glXDestroyContext(reinterpret_cast<unx::Display*>(mpDisplay),
|
glXDestroyContext(reinterpret_cast<unx::Display*>(mpDisplay),
|
||||||
reinterpret_cast<unx::GLXContext>(mpGLContext));
|
reinterpret_cast<unx::GLXContext>(mpGLContext));
|
||||||
|
Reference in New Issue
Block a user