This commit is contained in:
Branimir Karadžić 2015-06-07 21:28:36 -07:00
Родитель ddf0959d35
Коммит 9ebcfab447
23 изменённых файлов: 40 добавлений и 32 удалений

Просмотреть файл

@ -15,7 +15,7 @@ uniform vec4 u_specular_shininess;
uniform vec4 u_fog; uniform vec4 u_fog;
uniform vec4 u_lightPosRadius; uniform vec4 u_lightPosRadius;
uniform vec4 u_lightRgbInnerR; uniform vec4 u_lightRgbInnerR;
SAMPLER2D(u_texStencil, 7); SAMPLER2D(s_texStencil, 1);
#define u_ambientPass u_params.x #define u_ambientPass u_params.x
#define u_lightningPass u_params.y #define u_lightningPass u_params.y
@ -68,7 +68,7 @@ void main()
vec3 lightColor = calcLight(v_view, normal, viewDir) * u_lightningPass; vec3 lightColor = calcLight(v_view, normal, viewDir) * u_lightningPass;
vec2 ndc = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * u_texelHalf; vec2 ndc = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * u_texelHalf;
vec4 texcolor = texture2D(u_texStencil, ndc); vec4 texcolor = texture2D(s_texStencil, ndc);
float s = (texcolor.x - texcolor.y) + 2.0 * (texcolor.z - texcolor.w); float s = (texcolor.x - texcolor.y) + 2.0 * (texcolor.z - texcolor.w);
s *= u_useStencilTex; s *= u_useStencilTex;

Просмотреть файл

@ -7,11 +7,11 @@ $input v_texcoord0
#include "../common/common.sh" #include "../common/common.sh"
uniform vec4 u_color; uniform vec4 u_color;
SAMPLER2D(u_texColor, 0); SAMPLER2D(s_texColor, 0);
void main() void main()
{ {
vec4 tcolor = toLinear(texture2D(u_texColor, v_texcoord0)); vec4 tcolor = toLinear(texture2D(s_texColor, v_texcoord0));
if (tcolor.x < 0.1) //OK for now. if (tcolor.x < 0.1) //OK for now.
{ {

Просмотреть файл

@ -11,14 +11,16 @@ vec4 stencilColor(float _k)
, float(abs(_k + 1.0) < 0.0001)/255.0 , float(abs(_k + 1.0) < 0.0001)/255.0
, float(abs(_k - 2.0) < 0.0001)/255.0 , float(abs(_k - 2.0) < 0.0001)/255.0
, float(abs(_k + 2.0) < 0.0001)/255.0 , float(abs(_k + 2.0) < 0.0001)/255.0
); );
} }
void main() void main()
{ {
float k = 1.0; float k = 1.0;
if (!gl_FrontFacing) if (!gl_FrontFacing)
{
k = -k; k = -k;
}
gl_FragColor = stencilColor(k); gl_FragColor = stencilColor(k);
} }

Просмотреть файл

@ -11,14 +11,16 @@ vec4 stencilColor(float _k)
, float(abs(_k + 1.0) < 0.0001)/255.0 , float(abs(_k + 1.0) < 0.0001)/255.0
, float(abs(_k - 2.0) < 0.0001)/255.0 , float(abs(_k - 2.0) < 0.0001)/255.0
, float(abs(_k + 2.0) < 0.0001)/255.0 , float(abs(_k + 2.0) < 0.0001)/255.0
); );
} }
void main() void main()
{ {
float k = 2.0; float k = 2.0;
if (!gl_FrontFacing) if (!gl_FrontFacing)
{
k = -k; k = -k;
}
gl_FragColor = stencilColor(k); gl_FragColor = stencilColor(k);
} }

Просмотреть файл

@ -1,24 +1,26 @@
/* /*
* Copyright 2013-2014 Dario Manesku. All rights reserved. * Copyright 2013-2014 Dario Manesku. All rights reserved.
* License: http://www.opensource.org/licenses/BSD-2-Clause * License: http://www.opensource.org/licenses/BSD-2-Clause
*/ */
#include "../common/common.sh" #include "../common/common.sh"
vec4 stencilColor(float _k) vec4 stencilColor(float _k)
{ {
return vec4(float(abs(_k - 1.0) < 0.0001)/255.0 return vec4(float(abs(_k - 1.0) < 0.0001)/255.0
, float(abs(_k + 1.0) < 0.0001)/255.0 , float(abs(_k + 1.0) < 0.0001)/255.0
, float(abs(_k - 2.0) < 0.0001)/255.0 , float(abs(_k - 2.0) < 0.0001)/255.0
, float(abs(_k + 2.0) < 0.0001)/255.0 , float(abs(_k + 2.0) < 0.0001)/255.0
); );
} }
void main() void main()
{ {
float k = -1.0; float k = -1.0;
if (gl_FrontFacing) if (gl_FrontFacing)
k = -k; {
k = -k;
}
gl_FragColor = stencilColor(k); gl_FragColor = stencilColor(k);
} }

Просмотреть файл

@ -11,7 +11,9 @@ void main()
{ {
float k = v_k; float k = v_k;
if (!gl_FrontFacing) if (!gl_FrontFacing)
{
k = -k; k = -k;
}
gl_FragColor.xyzw = gl_FragColor.xyzw =
vec4( float(abs(k - 1.0) < 0.0001)/255.0 vec4( float(abs(k - 1.0) < 0.0001)/255.0

Просмотреть файл

@ -6,9 +6,9 @@ $input v_texcoord0
*/ */
#include "../common/common.sh" #include "../common/common.sh"
SAMPLER2D(u_texColor, 0); SAMPLER2D(s_texColor, 0);
void main() void main()
{ {
gl_FragColor = texture2D(u_texColor, v_texcoord0); gl_FragColor = texture2D(s_texColor, v_texcoord0);
} }

Просмотреть файл

@ -14,8 +14,8 @@ uniform vec4 u_specular_shininess;
uniform vec4 u_fog; uniform vec4 u_fog;
uniform vec4 u_lightPosRadius; uniform vec4 u_lightPosRadius;
uniform vec4 u_lightRgbInnerR; uniform vec4 u_lightRgbInnerR;
SAMPLER2D(u_texColor, 0); SAMPLER2D(s_texColor, 0);
SAMPLER2D(u_texStencil, 7); SAMPLER2D(s_texStencil, 1);
#define u_ambientPass u_params.x #define u_ambientPass u_params.x
#define u_lightningPass u_params.y #define u_lightningPass u_params.y
@ -68,7 +68,7 @@ void main()
vec3 lightColor = calcLight(v_view, normal, viewDir) * u_lightningPass; vec3 lightColor = calcLight(v_view, normal, viewDir) * u_lightningPass;
vec2 ndc = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * u_texelHalf; vec2 ndc = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * u_texelHalf;
vec4 texcolor = texture2D(u_texStencil, ndc); vec4 texcolor = texture2D(s_texStencil, ndc);
float s = (texcolor.x - texcolor.y) + 2.0 * (texcolor.z - texcolor.w); float s = (texcolor.x - texcolor.y) + 2.0 * (texcolor.z - texcolor.w);
s *= u_useStencilTex; s *= u_useStencilTex;
@ -77,7 +77,7 @@ void main()
float fogFactor = 1.0/exp2(u_fogDensity*u_fogDensity*z*z*LOG2); float fogFactor = 1.0/exp2(u_fogDensity*u_fogDensity*z*z*LOG2);
fogFactor = clamp(fogFactor, 0.0, 1.0); fogFactor = clamp(fogFactor, 0.0, 1.0);
vec3 color = toLinear(texture2D(u_texColor, v_texcoord0)).xyz; vec3 color = toLinear(texture2D(s_texColor, v_texcoord0)).xyz;
vec3 ambient = toGamma(ambientColor * color); vec3 ambient = toGamma(ambientColor * color);
vec3 diffuse = toGamma(lightColor * color); vec3 diffuse = toGamma(lightColor * color);

Просмотреть файл

@ -116,8 +116,8 @@ static float s_texelHalf = 0.0f;
static uint32_t s_viewMask = 0; static uint32_t s_viewMask = 0;
static bgfx::UniformHandle u_texColor; static bgfx::UniformHandle s_texColor;
static bgfx::UniformHandle u_texStencil; static bgfx::UniformHandle s_texStencil;
static bgfx::FrameBufferHandle s_stencilFb; static bgfx::FrameBufferHandle s_stencilFb;
void setViewClearMask(uint32_t _viewMask, uint8_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil) void setViewClearMask(uint32_t _viewMask, uint8_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
@ -1175,9 +1175,9 @@ struct Model
// Set textures // Set textures
if (bgfx::invalidHandle != m_texture.idx) if (bgfx::invalidHandle != m_texture.idx)
{ {
bgfx::setTexture(0, u_texColor, m_texture); bgfx::setTexture(0, s_texColor, m_texture);
} }
bgfx::setTexture(7, u_texStencil, s_stencilFb); bgfx::setTexture(1, s_texStencil, s_stencilFb);
// Apply render state // Apply render state
::setRenderState(_renderState); ::setRenderState(_renderState);
@ -1897,8 +1897,8 @@ int _main_(int /*_argc*/, char** /*_argv*/)
}; };
s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true); s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Int1); s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
u_texStencil = bgfx::createUniform("u_texStencil", bgfx::UniformType::Int1); s_texStencil = bgfx::createUniform("s_texStencil", bgfx::UniformType::Int1);
bgfx::ProgramHandle programTextureLightning = loadProgram("vs_shadowvolume_texture_lightning", "fs_shadowvolume_texture_lightning"); bgfx::ProgramHandle programTextureLightning = loadProgram("vs_shadowvolume_texture_lightning", "fs_shadowvolume_texture_lightning");
bgfx::ProgramHandle programColorLightning = loadProgram("vs_shadowvolume_color_lightning", "fs_shadowvolume_color_lightning" ); bgfx::ProgramHandle programColorLightning = loadProgram("vs_shadowvolume_color_lightning", "fs_shadowvolume_color_lightning" );
@ -2843,8 +2843,8 @@ int _main_(int /*_argc*/, char** /*_argv*/)
s_uniforms.destroy(); s_uniforms.destroy();
bgfx::destroyUniform(u_texColor); bgfx::destroyUniform(s_texColor);
bgfx::destroyUniform(u_texStencil); bgfx::destroyUniform(s_texStencil);
bgfx::destroyFrameBuffer(s_stencilFb); bgfx::destroyFrameBuffer(s_stencilFb);
bgfx::destroyTexture(figureTex); bgfx::destroyTexture(figureTex);

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.