mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
commit
2374ea3a15
13 changed files with 56 additions and 124 deletions
|
@ -49,7 +49,7 @@ vec3 calcLight(int _idx, vec3 _view, vec3 _normal, vec3 _viewDir)
|
||||||
vec4 lc = lit(bln.x, bln.y, u_shininess);
|
vec4 lc = lit(bln.x, bln.y, u_shininess);
|
||||||
|
|
||||||
float dist = max(length(toLight), u_lightPosRadius[_idx].w);
|
float dist = max(length(toLight), u_lightPosRadius[_idx].w);
|
||||||
float attn = 150.0 * pow(dist, -2.0);
|
float attn = 250.0 * pow(dist, -2.0);
|
||||||
vec3 rgb = (lc.y * u_diffuse + lc.z * u_specular) * u_lightRgbInnerR[_idx].rgb * attn;
|
vec3 rgb = (lc.y * u_diffuse + lc.z * u_specular) * u_lightRgbInnerR[_idx].rgb * attn;
|
||||||
|
|
||||||
return rgb;
|
return rgb;
|
||||||
|
@ -84,5 +84,5 @@ void main()
|
||||||
vec3 diffuse = toGamma(lightColor * color);
|
vec3 diffuse = toGamma(lightColor * color);
|
||||||
gl_FragColor.xyz = clamp(ambient + diffuse, 0.0, 1.0);
|
gl_FragColor.xyz = clamp(ambient + diffuse, 0.0, 1.0);
|
||||||
|
|
||||||
gl_FragColor.w = 1.0;
|
gl_FragColor.w = u_color.w;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ vec3 calcLight(int _idx, vec3 _view, vec3 _normal, vec3 _viewDir)
|
||||||
vec4 lc = lit(bln.x, bln.y, u_shininess);
|
vec4 lc = lit(bln.x, bln.y, u_shininess);
|
||||||
|
|
||||||
float dist = max(length(toLight), u_lightPosRadius[_idx].w);
|
float dist = max(length(toLight), u_lightPosRadius[_idx].w);
|
||||||
float attn = 150.0 * pow(dist, -2.0);
|
float attn = 250.0 * pow(dist, -2.0);
|
||||||
vec3 rgb = (lc.y * u_diffuse + lc.z * u_specular) * u_lightRgbInnerR[_idx].rgb * attn;
|
vec3 rgb = (lc.y * u_diffuse + lc.z * u_specular) * u_lightRgbInnerR[_idx].rgb * attn;
|
||||||
|
|
||||||
return rgb;
|
return rgb;
|
||||||
|
@ -85,5 +85,5 @@ void main()
|
||||||
vec3 diffuse = toGamma(lightColor * color);
|
vec3 diffuse = toGamma(lightColor * color);
|
||||||
gl_FragColor.xyz = clamp(ambient + diffuse, 0.0, 1.0);
|
gl_FragColor.xyz = clamp(ambient + diffuse, 0.0, 1.0);
|
||||||
|
|
||||||
gl_FragColor.w = 1.0;
|
gl_FragColor.w = u_color.w;
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 187 KiB |
|
@ -335,25 +335,25 @@ struct Uniforms
|
||||||
m_params.m_lightCount = 4.0f;
|
m_params.m_lightCount = 4.0f;
|
||||||
m_params.m_lightIndex = 4.0f;
|
m_params.m_lightIndex = 4.0f;
|
||||||
|
|
||||||
m_ambient[0] = 0.05f;
|
m_ambient[0] = 0.02f;
|
||||||
m_ambient[1] = 0.05f;
|
m_ambient[1] = 0.02f;
|
||||||
m_ambient[2] = 0.05f;
|
m_ambient[2] = 0.02f;
|
||||||
m_ambient[3] = 0.0f; //unused
|
m_ambient[3] = 0.0f; //unused
|
||||||
|
|
||||||
m_diffuse[0] = 0.8f;
|
m_diffuse[0] = 0.2f;
|
||||||
m_diffuse[1] = 0.8f;
|
m_diffuse[1] = 0.2f;
|
||||||
m_diffuse[2] = 0.8f;
|
m_diffuse[2] = 0.2f;
|
||||||
m_diffuse[3] = 0.0f; //unused
|
m_diffuse[3] = 0.0f; //unused
|
||||||
|
|
||||||
m_specular_shininess[0] = 1.0f;
|
m_specular_shininess[0] = 1.0f;
|
||||||
m_specular_shininess[1] = 1.0f;
|
m_specular_shininess[1] = 1.0f;
|
||||||
m_specular_shininess[2] = 1.0f;
|
m_specular_shininess[2] = 1.0f;
|
||||||
m_specular_shininess[3] = 25.0f; //shininess
|
m_specular_shininess[3] = 10.0f; //shininess
|
||||||
|
|
||||||
m_color[0] = 1.0f;
|
m_color[0] = 1.0f;
|
||||||
m_color[1] = 1.0f;
|
m_color[1] = 1.0f;
|
||||||
m_color[2] = 1.0f;
|
m_color[2] = 1.0f;
|
||||||
m_color[3] = 1.0;
|
m_color[3] = 1.0f;
|
||||||
|
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
|
|
||||||
|
@ -409,6 +409,7 @@ struct Uniforms
|
||||||
bgfx::destroyUniform(u_ambient);
|
bgfx::destroyUniform(u_ambient);
|
||||||
bgfx::destroyUniform(u_diffuse);
|
bgfx::destroyUniform(u_diffuse);
|
||||||
bgfx::destroyUniform(u_specular_shininess);
|
bgfx::destroyUniform(u_specular_shininess);
|
||||||
|
bgfx::destroyUniform(u_color);
|
||||||
bgfx::destroyUniform(u_time);
|
bgfx::destroyUniform(u_time);
|
||||||
bgfx::destroyUniform(u_lightPosRadius);
|
bgfx::destroyUniform(u_lightPosRadius);
|
||||||
bgfx::destroyUniform(u_lightRgbInnerR);
|
bgfx::destroyUniform(u_lightRgbInnerR);
|
||||||
|
@ -468,7 +469,6 @@ struct RenderState
|
||||||
{
|
{
|
||||||
StencilReflection_CraftStencil = 0,
|
StencilReflection_CraftStencil = 0,
|
||||||
StencilReflection_DrawReflected,
|
StencilReflection_DrawReflected,
|
||||||
StencilReflection_DarkenReflections,
|
|
||||||
StencilReflection_BlendPlane,
|
StencilReflection_BlendPlane,
|
||||||
StencilReflection_DrawScene,
|
StencilReflection_DrawScene,
|
||||||
|
|
||||||
|
@ -491,7 +491,10 @@ struct RenderState
|
||||||
static RenderState s_renderStates[RenderState::Count] =
|
static RenderState s_renderStates[RenderState::Count] =
|
||||||
{
|
{
|
||||||
{ // StencilReflection_CraftStencil
|
{ // StencilReflection_CraftStencil
|
||||||
BGFX_STATE_MSAA
|
BGFX_STATE_RGB_WRITE
|
||||||
|
| BGFX_STATE_DEPTH_WRITE
|
||||||
|
| BGFX_STATE_DEPTH_TEST_LESS
|
||||||
|
| BGFX_STATE_MSAA
|
||||||
, UINT32_MAX
|
, UINT32_MAX
|
||||||
, BGFX_STENCIL_TEST_ALWAYS // pass always
|
, BGFX_STENCIL_TEST_ALWAYS // pass always
|
||||||
| BGFX_STENCIL_FUNC_REF(1) // value = 1
|
| BGFX_STENCIL_FUNC_REF(1) // value = 1
|
||||||
|
@ -504,6 +507,7 @@ static RenderState s_renderStates[RenderState::Count] =
|
||||||
{ // StencilReflection_DrawReflected
|
{ // StencilReflection_DrawReflected
|
||||||
BGFX_STATE_RGB_WRITE
|
BGFX_STATE_RGB_WRITE
|
||||||
| BGFX_STATE_ALPHA_WRITE
|
| BGFX_STATE_ALPHA_WRITE
|
||||||
|
| BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
|
||||||
| BGFX_STATE_DEPTH_WRITE
|
| BGFX_STATE_DEPTH_WRITE
|
||||||
| BGFX_STATE_DEPTH_TEST_LESS
|
| BGFX_STATE_DEPTH_TEST_LESS
|
||||||
| BGFX_STATE_CULL_CW //reflection matrix has inverted normals. using CCW instead of CW.
|
| BGFX_STATE_CULL_CW //reflection matrix has inverted normals. using CCW instead of CW.
|
||||||
|
@ -517,22 +521,11 @@ static RenderState s_renderStates[RenderState::Count] =
|
||||||
| BGFX_STENCIL_OP_PASS_Z_KEEP
|
| BGFX_STENCIL_OP_PASS_Z_KEEP
|
||||||
, BGFX_STENCIL_NONE
|
, BGFX_STENCIL_NONE
|
||||||
},
|
},
|
||||||
{ // StencilReflection_DarkenReflections
|
|
||||||
BGFX_STATE_RGB_WRITE
|
|
||||||
| BGFX_STATE_DEPTH_WRITE
|
|
||||||
| BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_FACTOR)
|
|
||||||
| BGFX_STATE_DEPTH_TEST_LESS
|
|
||||||
| BGFX_STATE_CULL_CCW
|
|
||||||
| BGFX_STATE_MSAA
|
|
||||||
, UINT32_MAX
|
|
||||||
, BGFX_STENCIL_NONE
|
|
||||||
, BGFX_STENCIL_NONE
|
|
||||||
},
|
|
||||||
{ // StencilReflection_BlendPlane
|
{ // StencilReflection_BlendPlane
|
||||||
BGFX_STATE_RGB_WRITE
|
BGFX_STATE_RGB_WRITE
|
||||||
| BGFX_STATE_DEPTH_WRITE
|
| BGFX_STATE_DEPTH_WRITE
|
||||||
| BGFX_STATE_BLEND_LIGHTEN
|
| BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_SRC_COLOR)
|
||||||
| BGFX_STATE_DEPTH_TEST_EQUAL
|
| BGFX_STATE_DEPTH_TEST_LESS
|
||||||
| BGFX_STATE_CULL_CCW
|
| BGFX_STATE_CULL_CCW
|
||||||
| BGFX_STATE_MSAA
|
| BGFX_STATE_MSAA
|
||||||
, UINT32_MAX
|
, UINT32_MAX
|
||||||
|
@ -1090,6 +1083,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
s_uniforms.m_params.m_lightningPass = 1.0f;
|
s_uniforms.m_params.m_lightningPass = 1.0f;
|
||||||
s_uniforms.m_params.m_lightCount = settings_numLights;
|
s_uniforms.m_params.m_lightCount = settings_numLights;
|
||||||
s_uniforms.m_params.m_lightIndex = 0.0f;
|
s_uniforms.m_params.m_lightIndex = 0.0f;
|
||||||
|
s_uniforms.m_color[3] = settings_reflectionValue;
|
||||||
s_uniforms.submitPerFrameUniforms();
|
s_uniforms.submitPerFrameUniforms();
|
||||||
|
|
||||||
// Time.
|
// Time.
|
||||||
|
@ -1238,6 +1232,9 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
|
|
||||||
// Second pass - Draw reflected objects.
|
// Second pass - Draw reflected objects.
|
||||||
|
|
||||||
|
// Clear depth from previous pass.
|
||||||
|
clearView(RENDER_VIEWID_RANGE1_PASS_1, BGFX_CLEAR_DEPTH_BIT, clearValues);
|
||||||
|
|
||||||
// Compute reflected matrix.
|
// Compute reflected matrix.
|
||||||
float reflectMtx[16];
|
float reflectMtx[16];
|
||||||
float plane_pos[3] = { 0.0f, 0.01f, 0.0f };
|
float plane_pos[3] = { 0.0f, 0.01f, 0.0f };
|
||||||
|
@ -1277,37 +1274,20 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
// Set lights back.
|
// Set lights back.
|
||||||
memcpy(s_uniforms.m_lightPosRadius, lightPosRadius, numLights * 4*sizeof(float));
|
memcpy(s_uniforms.m_lightPosRadius, lightPosRadius, numLights * 4*sizeof(float));
|
||||||
|
|
||||||
// Third pass - Darken reflected objects.
|
// Third pass - Blend plane.
|
||||||
|
|
||||||
uint8_t val = uint8_t(settings_reflectionValue * UINT8_MAX);
|
|
||||||
uint32_t factor = (val << 24)
|
|
||||||
| (val << 16)
|
|
||||||
| (val << 8 )
|
|
||||||
| (val << 0 )
|
|
||||||
;
|
|
||||||
s_renderStates[RenderState::StencilReflection_DarkenReflections].m_blendFactorRgba = factor;
|
|
||||||
|
|
||||||
// Floor.
|
// Floor.
|
||||||
hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_2
|
hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_2
|
||||||
, floorMtx
|
|
||||||
, programColorBlack
|
|
||||||
, s_renderStates[RenderState::StencilReflection_DarkenReflections]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Fourth pass - Draw plane. (blend plane with what's behind it)
|
|
||||||
|
|
||||||
// Floor.
|
|
||||||
hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_3
|
|
||||||
, floorMtx
|
, floorMtx
|
||||||
, programTextureLightning
|
, programTextureLightning
|
||||||
, s_renderStates[RenderState::StencilReflection_BlendPlane]
|
, s_renderStates[RenderState::StencilReflection_BlendPlane]
|
||||||
, fieldstoneTex
|
, fieldstoneTex
|
||||||
);
|
);
|
||||||
|
|
||||||
// Fifth pass - Draw everything else but the plane.
|
// Fourth pass - Draw everything else but the plane.
|
||||||
|
|
||||||
// Bunny.
|
// Bunny.
|
||||||
bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_4
|
bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_3
|
||||||
, bunnyMtx
|
, bunnyMtx
|
||||||
, programColorLightning
|
, programColorLightning
|
||||||
, s_renderStates[RenderState::StencilReflection_DrawScene]
|
, s_renderStates[RenderState::StencilReflection_DrawScene]
|
||||||
|
@ -1316,7 +1296,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
// Columns.
|
// Columns.
|
||||||
for (uint8_t ii = 0; ii < 4; ++ii)
|
for (uint8_t ii = 0; ii < 4; ++ii)
|
||||||
{
|
{
|
||||||
columnMesh.submit(RENDER_VIEWID_RANGE1_PASS_4
|
columnMesh.submit(RENDER_VIEWID_RANGE1_PASS_3
|
||||||
, columnMtx[ii]
|
, columnMtx[ii]
|
||||||
, programColorLightning
|
, programColorLightning
|
||||||
, s_renderStates[RenderState::StencilReflection_DrawScene]
|
, s_renderStates[RenderState::StencilReflection_DrawScene]
|
||||||
|
|
|
@ -208,38 +208,6 @@ void mtxScaleRotateTranslate(float* _result
|
||||||
mtxMul(_result, mtxScale, mtxRotateTranslate);
|
mtxMul(_result, mtxScale, mtxRotateTranslate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mtxShadow(float* __restrict _result
|
|
||||||
, const float* __restrict _ground
|
|
||||||
, const float* __restrict _light
|
|
||||||
)
|
|
||||||
{
|
|
||||||
float dot = _ground[0] * _light[0]
|
|
||||||
+ _ground[1] * _light[1]
|
|
||||||
+ _ground[2] * _light[2]
|
|
||||||
+ _ground[3] * _light[3]
|
|
||||||
;
|
|
||||||
|
|
||||||
_result[ 0] = dot - _light[0] * _ground[0];
|
|
||||||
_result[ 1] = 0.0f - _light[1] * _ground[0];
|
|
||||||
_result[ 2] = 0.0f - _light[2] * _ground[0];
|
|
||||||
_result[ 3] = 0.0f - _light[3] * _ground[0];
|
|
||||||
|
|
||||||
_result[ 4] = 0.0f - _light[0] * _ground[1];
|
|
||||||
_result[ 5] = dot - _light[1] * _ground[1];
|
|
||||||
_result[ 6] = 0.0f - _light[2] * _ground[1];
|
|
||||||
_result[ 7] = 0.0f - _light[3] * _ground[1];
|
|
||||||
|
|
||||||
_result[ 8] = 0.0f - _light[0] * _ground[2];
|
|
||||||
_result[ 9] = 0.0f - _light[1] * _ground[2];
|
|
||||||
_result[10] = dot - _light[2] * _ground[2];
|
|
||||||
_result[11] = 0.0f - _light[3] * _ground[2];
|
|
||||||
|
|
||||||
_result[12] = 0.0f - _light[0] * _ground[3];
|
|
||||||
_result[13] = 0.0f - _light[1] * _ground[3];
|
|
||||||
_result[14] = 0.0f - _light[2] * _ground[3];
|
|
||||||
_result[15] = dot - _light[3] * _ground[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
void mtxBillboard(float* __restrict _result
|
void mtxBillboard(float* __restrict _result
|
||||||
, const float* __restrict _view
|
, const float* __restrict _view
|
||||||
, const float* __restrict _pos
|
, const float* __restrict _pos
|
||||||
|
@ -651,7 +619,7 @@ static RenderState s_renderStates[RenderState::Count] =
|
||||||
|
|
||||||
struct ViewState
|
struct ViewState
|
||||||
{
|
{
|
||||||
ViewState(uint32_t _width = 1280, uint32_t _height = 720)
|
ViewState(uint32_t _width = 1280, uint32_t _height = 720)
|
||||||
: m_width(_width)
|
: m_width(_width)
|
||||||
, m_height(_height)
|
, m_height(_height)
|
||||||
{
|
{
|
||||||
|
@ -1318,19 +1286,17 @@ struct ShadowVolume
|
||||||
bool m_cap;
|
bool m_cap;
|
||||||
};
|
};
|
||||||
|
|
||||||
void shadowVolumeTransform(float* __restrict _outMtx
|
void shadowVolumeLightTransform(float* __restrict _outLightPos
|
||||||
, float* __restrict _outLightPos
|
, const float* __restrict _scale
|
||||||
, const float* __restrict _scale
|
, const float* __restrict _rotate
|
||||||
, const float* __restrict _rotate
|
, const float* __restrict _translate
|
||||||
, const float* __restrict _translate
|
, const float* __restrict _lightPos // world pos
|
||||||
, const float* __restrict _lightPos // world pos
|
)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Instead of transforming all the vertices, transform light instead:
|
* Instead of transforming all the vertices, transform light instead:
|
||||||
* mtx = pivotTranslate -> rotateZYX -> invScale
|
* mtx = pivotTranslate -> rotateZYX -> invScale
|
||||||
* light = mtx * origin
|
* light = mtx * origin
|
||||||
* _outMtx = scale -> rotateXYZ -> translate
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
float pivot[16];
|
float pivot[16];
|
||||||
|
@ -1360,34 +1326,8 @@ void shadowVolumeTransform(float* __restrict _outMtx
|
||||||
float mtx[16];
|
float mtx[16];
|
||||||
mtxMul(mtx, tmp0, invScale);
|
mtxMul(mtx, tmp0, invScale);
|
||||||
|
|
||||||
float light[3];
|
|
||||||
float origin[3] = { 0.0f, 0.0f, 0.0f };
|
float origin[3] = { 0.0f, 0.0f, 0.0f };
|
||||||
vec3MulMtx(light, origin, mtx);
|
vec3MulMtx(_outLightPos, origin, mtx);
|
||||||
memcpy(_outLightPos, light, 3*sizeof(float) );
|
|
||||||
|
|
||||||
float scale[16];
|
|
||||||
mtxScale(scale
|
|
||||||
, _scale[0]
|
|
||||||
, _scale[1]
|
|
||||||
, _scale[2]
|
|
||||||
);
|
|
||||||
|
|
||||||
float mxyz[16];
|
|
||||||
mtxRotateXYZ(mxyz
|
|
||||||
, _rotate[0]
|
|
||||||
, _rotate[1]
|
|
||||||
, _rotate[2]
|
|
||||||
);
|
|
||||||
|
|
||||||
float translate[16];
|
|
||||||
mtxTranslate(translate
|
|
||||||
, _translate[0]
|
|
||||||
, _translate[1]
|
|
||||||
, _translate[2]
|
|
||||||
);
|
|
||||||
|
|
||||||
mtxMul(tmp0, scale, mxyz);
|
|
||||||
mtxMul(_outMtx, tmp0, translate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void shadowVolumeCreate(ShadowVolume& _shadowVolume
|
void shadowVolumeCreate(ShadowVolume& _shadowVolume
|
||||||
|
@ -1548,16 +1488,16 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume
|
||||||
const float* v1 = edge.m_v1;
|
const float* v1 = edge.m_v1;
|
||||||
|
|
||||||
int16_t k = 0;
|
int16_t k = 0;
|
||||||
float s;
|
|
||||||
for (uint8_t ii = 0; ii < edge.m_faceIndex; ++ii)
|
for (uint8_t ii = 0; ii < edge.m_faceIndex; ++ii)
|
||||||
{
|
{
|
||||||
const Edge::Plane& face = edge.m_faces[ii];
|
const Edge::Plane& face = edge.m_faces[ii];
|
||||||
s = fsign(vec3Dot(face.m_plane, _light) + face.m_plane[3]);
|
|
||||||
|
int16_t s = (int16_t)fsign(vec3Dot(face.m_plane, _light) + face.m_plane[3]);
|
||||||
if (face.m_reverseVertexOrder)
|
if (face.m_reverseVertexOrder)
|
||||||
{
|
{
|
||||||
s = -s;
|
s = -s;
|
||||||
}
|
}
|
||||||
k += uint16_t(s);
|
k += s;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == 0)
|
if (k == 0)
|
||||||
|
@ -2593,11 +2533,9 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
}
|
}
|
||||||
s_uniforms.m_svparams.m_dfail = float(ShadowVolumeImpl::DepthFail == shadowVolumeImpl);
|
s_uniforms.m_svparams.m_dfail = float(ShadowVolumeImpl::DepthFail == shadowVolumeImpl);
|
||||||
|
|
||||||
// Compute transform for shadow volume.
|
// Compute virtual light position for shadow volume generation.
|
||||||
float shadowVolumeMtx[16];
|
|
||||||
float transformedLightPos[3];
|
float transformedLightPos[3];
|
||||||
shadowVolumeTransform(shadowVolumeMtx
|
shadowVolumeLightTransform(transformedLightPos
|
||||||
, transformedLightPos
|
|
||||||
, instance.m_scale
|
, instance.m_scale
|
||||||
, instance.m_rotation
|
, instance.m_rotation
|
||||||
, instance.m_pos
|
, instance.m_pos
|
||||||
|
@ -2608,6 +2546,20 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
memcpy(s_uniforms.m_virtualLightPos_extrusionDist, transformedLightPos, 3*sizeof(float) );
|
memcpy(s_uniforms.m_virtualLightPos_extrusionDist, transformedLightPos, 3*sizeof(float) );
|
||||||
s_uniforms.m_virtualLightPos_extrusionDist[3] = instance.m_svExtrusionDistance;
|
s_uniforms.m_virtualLightPos_extrusionDist[3] = instance.m_svExtrusionDistance;
|
||||||
|
|
||||||
|
// Compute transform for shadow volume.
|
||||||
|
float shadowVolumeMtx[16];
|
||||||
|
mtxScaleRotateTranslate(shadowVolumeMtx
|
||||||
|
, instance.m_scale[0]
|
||||||
|
, instance.m_scale[1]
|
||||||
|
, instance.m_scale[2]
|
||||||
|
, instance.m_rotation[0]
|
||||||
|
, instance.m_rotation[1]
|
||||||
|
, instance.m_rotation[2]
|
||||||
|
, instance.m_pos[0]
|
||||||
|
, instance.m_pos[1]
|
||||||
|
, instance.m_pos[2]
|
||||||
|
);
|
||||||
|
|
||||||
GroupArray& groups = model->m_mesh.m_groups;
|
GroupArray& groups = model->m_mesh.m_groups;
|
||||||
const uint16_t stride = model->m_mesh.m_decl.getStride();
|
const uint16_t stride = model->m_mesh.m_decl.getStride();
|
||||||
for (GroupArray::iterator it = groups.begin(), itEnd = groups.end(); it != itEnd; ++it)
|
for (GroupArray::iterator it = groups.begin(), itEnd = groups.end(); it != itEnd; ++it)
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue