Cleanup.
This commit is contained in:
parent
e3c97d8dc7
commit
f47a26dcfa
@ -7,8 +7,8 @@ $input v_pos, v_view, v_normal, v_texcoord0
|
||||
|
||||
#include "../common/common.sh"
|
||||
|
||||
SAMPLER2D(u_texColor, 0);
|
||||
SAMPLER2D(u_texStipple, 1);
|
||||
SAMPLER2D(s_texColor, 0);
|
||||
SAMPLER2D(s_texStipple, 1);
|
||||
uniform vec4 u_stipple;
|
||||
|
||||
vec2 blinn(vec3 _lightDir, vec3 _normal, vec3 _viewDir)
|
||||
@ -23,8 +23,8 @@ void main()
|
||||
{
|
||||
vec2 viewport = (u_viewRect.zw - u_viewRect.xy) * vec2(1.0/8.0, 1.0/4.0);
|
||||
vec2 stippleUV = viewport*(v_pos.xy*0.5 + 0.5);
|
||||
vec4 color = texture2D(u_texColor, v_texcoord0);
|
||||
if ( (u_stipple.x - texture2D(u_texStipple,stippleUV).x)*u_stipple.y > u_stipple.z
|
||||
vec4 color = texture2D(s_texColor, v_texcoord0);
|
||||
if ( (u_stipple.x - texture2D(s_texStipple,stippleUV).x)*u_stipple.y > u_stipple.z
|
||||
|| color.w < 0.5)
|
||||
{
|
||||
discard;
|
||||
|
@ -15,7 +15,7 @@ struct KnightPos
|
||||
int32_t m_y;
|
||||
};
|
||||
|
||||
KnightPos knightTour[8*4] =
|
||||
static const KnightPos knightTour[8*4] =
|
||||
{
|
||||
{0,0}, {1,2}, {3,3}, {4,1}, {5,3}, {7,2}, {6,0}, {5,2},
|
||||
{7,3}, {6,1}, {4,0}, {3,2}, {2,0}, {0,1}, {1,3}, {2,1},
|
||||
@ -23,275 +23,298 @@ KnightPos knightTour[8*4] =
|
||||
{7,1}, {6,3}, {5,1}, {7,0}, {6,2}, {4,3}, {3,1}, {2,3},
|
||||
};
|
||||
|
||||
int _main_(int _argc, char** _argv)
|
||||
class Lod : public entry::AppI
|
||||
{
|
||||
Args args(_argc, _argv);
|
||||
|
||||
uint32_t width = 1280;
|
||||
uint32_t height = 720;
|
||||
uint32_t debug = BGFX_DEBUG_TEXT;
|
||||
uint32_t reset = BGFX_RESET_VSYNC;
|
||||
|
||||
bgfx::init(args.m_type, args.m_pciId);
|
||||
bgfx::reset(width, height, reset);
|
||||
|
||||
// Enable debug text.
|
||||
bgfx::setDebug(debug);
|
||||
|
||||
// Set view 0 clear state.
|
||||
bgfx::setViewClear(0
|
||||
, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
|
||||
, 0x303030ff
|
||||
, 1.0f
|
||||
, 0
|
||||
);
|
||||
|
||||
bgfx::UniformHandle s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
|
||||
bgfx::UniformHandle s_texStipple = bgfx::createUniform("s_texStipple", bgfx::UniformType::Int1);
|
||||
bgfx::UniformHandle u_stipple = bgfx::createUniform("u_stipple", bgfx::UniformType::Vec4);
|
||||
|
||||
bgfx::ProgramHandle program = loadProgram("vs_tree", "fs_tree");
|
||||
|
||||
bgfx::TextureHandle textureLeafs = loadTexture("leafs1.dds");
|
||||
bgfx::TextureHandle textureBark = loadTexture("bark1.dds");
|
||||
|
||||
bgfx::TextureHandle textureStipple;
|
||||
|
||||
const bgfx::Memory* stippleTex = bgfx::alloc(8*4);
|
||||
memset(stippleTex->data, 0, stippleTex->size);
|
||||
|
||||
for (uint32_t ii = 0; ii < 32; ++ii)
|
||||
void init(int _argc, char** _argv) BX_OVERRIDE
|
||||
{
|
||||
stippleTex->data[knightTour[ii].m_y * 8 + knightTour[ii].m_x] = ii*4;
|
||||
}
|
||||
Args args(_argc, _argv);
|
||||
|
||||
textureStipple = bgfx::createTexture2D(8, 4, 1
|
||||
m_width = 1280;
|
||||
m_height = 720;
|
||||
m_debug = BGFX_DEBUG_TEXT;
|
||||
m_reset = BGFX_RESET_VSYNC;
|
||||
|
||||
bgfx::init(args.m_type, args.m_pciId);
|
||||
bgfx::reset(m_width, m_height, m_reset);
|
||||
|
||||
// Enable debug text.
|
||||
bgfx::setDebug(m_debug);
|
||||
|
||||
// Set view 0 clear state.
|
||||
bgfx::setViewClear(0
|
||||
, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
|
||||
, 0x303030ff
|
||||
, 1.0f
|
||||
, 0
|
||||
);
|
||||
|
||||
s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
|
||||
s_texStipple = bgfx::createUniform("s_texStipple", bgfx::UniformType::Int1);
|
||||
u_stipple = bgfx::createUniform("u_stipple", bgfx::UniformType::Vec4);
|
||||
|
||||
m_program = loadProgram("vs_tree", "fs_tree");
|
||||
|
||||
m_textureLeafs = loadTexture("leafs1.dds");
|
||||
m_textureBark = loadTexture("bark1.dds");
|
||||
|
||||
const bgfx::Memory* stippleTex = bgfx::alloc(8*4);
|
||||
memset(stippleTex->data, 0, stippleTex->size);
|
||||
|
||||
for (uint32_t ii = 0; ii < 32; ++ii)
|
||||
{
|
||||
stippleTex->data[knightTour[ii].m_y * 8 + knightTour[ii].m_x] = ii*4;
|
||||
}
|
||||
|
||||
m_textureStipple = bgfx::createTexture2D(8, 4, 1
|
||||
, bgfx::TextureFormat::R8
|
||||
, BGFX_TEXTURE_MAG_POINT|BGFX_TEXTURE_MIN_POINT
|
||||
, stippleTex
|
||||
);
|
||||
|
||||
Mesh* meshTop[3] =
|
||||
m_meshTop[0] = meshLoad("meshes/tree1b_lod0_1.bin");
|
||||
m_meshTop[1] = meshLoad("meshes/tree1b_lod1_1.bin");
|
||||
m_meshTop[2] = meshLoad("meshes/tree1b_lod2_1.bin");
|
||||
|
||||
m_meshTrunk[0] = meshLoad("meshes/tree1b_lod0_2.bin");
|
||||
m_meshTrunk[1] = meshLoad("meshes/tree1b_lod1_2.bin");
|
||||
m_meshTrunk[2] = meshLoad("meshes/tree1b_lod2_2.bin");
|
||||
|
||||
// Imgui.
|
||||
imguiCreate();
|
||||
|
||||
m_scrollArea = 0;
|
||||
m_transitions = true;
|
||||
|
||||
m_transitionFrame = 0;
|
||||
m_currLod = 0;
|
||||
m_targetLod = 0;
|
||||
}
|
||||
|
||||
virtual int shutdown() BX_OVERRIDE
|
||||
{
|
||||
meshLoad("meshes/tree1b_lod0_1.bin"),
|
||||
meshLoad("meshes/tree1b_lod1_1.bin"),
|
||||
meshLoad("meshes/tree1b_lod2_1.bin"),
|
||||
};
|
||||
imguiDestroy();
|
||||
|
||||
Mesh* meshTrunk[3] =
|
||||
for (uint32_t ii = 0; ii < BX_COUNTOF(m_meshTop); ++ii)
|
||||
{
|
||||
meshUnload(m_meshTop[ii]);
|
||||
meshUnload(m_meshTrunk[ii]);
|
||||
}
|
||||
|
||||
// Cleanup.
|
||||
bgfx::destroyProgram(m_program);
|
||||
|
||||
bgfx::destroyUniform(s_texColor);
|
||||
bgfx::destroyUniform(s_texStipple);
|
||||
bgfx::destroyUniform(u_stipple);
|
||||
|
||||
bgfx::destroyTexture(m_textureStipple);
|
||||
bgfx::destroyTexture(m_textureLeafs);
|
||||
bgfx::destroyTexture(m_textureBark);
|
||||
|
||||
// Shutdown bgfx.
|
||||
bgfx::shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool update() BX_OVERRIDE
|
||||
{
|
||||
meshLoad("meshes/tree1b_lod0_2.bin"),
|
||||
meshLoad("meshes/tree1b_lod1_2.bin"),
|
||||
meshLoad("meshes/tree1b_lod2_2.bin"),
|
||||
};
|
||||
|
||||
// Imgui.
|
||||
imguiCreate();
|
||||
|
||||
const uint64_t stateCommon = 0
|
||||
| BGFX_STATE_RGB_WRITE
|
||||
| BGFX_STATE_ALPHA_WRITE
|
||||
| BGFX_STATE_DEPTH_TEST_LESS
|
||||
| BGFX_STATE_CULL_CCW
|
||||
| BGFX_STATE_MSAA
|
||||
;
|
||||
|
||||
const uint64_t stateTransparent = stateCommon
|
||||
| BGFX_STATE_BLEND_ALPHA
|
||||
;
|
||||
|
||||
const uint64_t stateOpaque = stateCommon
|
||||
| BGFX_STATE_DEPTH_WRITE
|
||||
;
|
||||
|
||||
int32_t scrollArea = 0;
|
||||
|
||||
bool transitions = true;
|
||||
int transitionFrame = 0;
|
||||
int currLOD = 0;
|
||||
int targetLOD = 0;
|
||||
|
||||
float at[3] = { 0.0f, 1.0f, 0.0f };
|
||||
float eye[3] = { 0.0f, 1.0f, -2.0f };
|
||||
|
||||
entry::MouseState mouseState;
|
||||
while (!entry::processEvents(width, height, debug, reset, &mouseState) )
|
||||
{
|
||||
imguiBeginFrame(mouseState.m_mx
|
||||
, mouseState.m_my
|
||||
, (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
|
||||
| (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
|
||||
| (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
|
||||
, mouseState.m_mz
|
||||
, width
|
||||
, height
|
||||
);
|
||||
|
||||
imguiBeginScrollArea("Toggle transitions", width - width / 5 - 10, 10, width / 5, height / 6, &scrollArea);
|
||||
imguiSeparatorLine();
|
||||
|
||||
if (imguiButton(transitions ? "ON" : "OFF") )
|
||||
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
|
||||
{
|
||||
transitions = !transitions;
|
||||
}
|
||||
imguiBeginFrame(m_mouseState.m_mx
|
||||
, m_mouseState.m_my
|
||||
, (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
|
||||
| (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
|
||||
| (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
|
||||
, m_mouseState.m_mz
|
||||
, m_width
|
||||
, m_height
|
||||
);
|
||||
|
||||
static float distance = 2.0f;
|
||||
imguiSlider("Distance", distance, 2.0f, 6.0f, .01f);
|
||||
imguiBeginScrollArea("Toggle m_transitions", m_width - m_width / 5 - 10, 10, m_width / 5, m_height / 6, &m_scrollArea);
|
||||
imguiSeparatorLine();
|
||||
|
||||
imguiEndScrollArea();
|
||||
imguiEndFrame();
|
||||
|
||||
// Set view 0 default viewport.
|
||||
bgfx::setViewRect(0, 0, 0, width, height);
|
||||
|
||||
// This dummy draw call is here to make sure that view 0 is cleared
|
||||
// if no other draw calls are submitted to view 0.
|
||||
bgfx::touch(0);
|
||||
|
||||
int64_t now = bx::getHPCounter();
|
||||
static int64_t last = now;
|
||||
const int64_t frameTime = now - last;
|
||||
last = now;
|
||||
const double freq = double(bx::getHPFrequency() );
|
||||
const double toMs = 1000.0/freq;
|
||||
|
||||
// Use debug font to print information about this example.
|
||||
bgfx::dbgTextClear();
|
||||
bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/12-lod");
|
||||
bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Mesh LOD transitions.");
|
||||
bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
|
||||
bgfx::dbgTextPrintf(0, 4, transitions ? 0x2f : 0x1f, transitions ? "Transitions on" : "Transitions off");
|
||||
|
||||
eye[2] = -distance;
|
||||
|
||||
// Set view and projection matrix for view 0.
|
||||
const bgfx::HMD* hmd = bgfx::getHMD();
|
||||
if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
|
||||
{
|
||||
float view[16];
|
||||
bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
|
||||
|
||||
float proj[16];
|
||||
bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f);
|
||||
|
||||
bgfx::setViewTransform(0, view, proj);
|
||||
|
||||
// Set view 0 default viewport.
|
||||
//
|
||||
// Use HMD's width/height since HMD's internal frame buffer size
|
||||
// might be much larger than window size.
|
||||
bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
|
||||
}
|
||||
else
|
||||
{
|
||||
float view[16];
|
||||
bx::mtxLookAt(view, eye, at);
|
||||
|
||||
float proj[16];
|
||||
bx::mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f);
|
||||
bgfx::setViewTransform(0, view, proj);
|
||||
|
||||
// Set view 0 default viewport.
|
||||
bgfx::setViewRect(0, 0, 0, width, height);
|
||||
}
|
||||
|
||||
float mtx[16];
|
||||
bx::mtxScale(mtx, 0.1f, 0.1f, 0.1f);
|
||||
|
||||
float stipple[3];
|
||||
float stippleInv[3];
|
||||
|
||||
const int currentLODframe = transitions ? 32-transitionFrame : 32;
|
||||
const int mainLOD = transitions ? currLOD : targetLOD;
|
||||
|
||||
stipple[0] = 0.0f;
|
||||
stipple[1] = -1.0f;
|
||||
stipple[2] = (float(currentLODframe)*4.0f/255.0f) - (1.0f/255.0f);
|
||||
|
||||
stippleInv[0] = (float(31)*4.0f/255.0f);
|
||||
stippleInv[1] = 1.0f;
|
||||
stippleInv[2] = (float(transitionFrame)*4.0f/255.0f) - (1.0f/255.0f);
|
||||
|
||||
bgfx::setTexture(0, s_texColor, textureBark);
|
||||
bgfx::setTexture(1, s_texStipple, textureStipple);
|
||||
bgfx::setUniform(u_stipple, stipple);
|
||||
meshSubmit(meshTrunk[mainLOD], 0, program, mtx, stateOpaque);
|
||||
|
||||
bgfx::setTexture(0, s_texColor, textureLeafs);
|
||||
bgfx::setTexture(1, s_texStipple, textureStipple);
|
||||
bgfx::setUniform(u_stipple, stipple);
|
||||
meshSubmit(meshTop[mainLOD], 0, program, mtx, stateTransparent);
|
||||
|
||||
if (transitions
|
||||
&& (transitionFrame != 0) )
|
||||
{
|
||||
bgfx::setTexture(0, s_texColor, textureBark);
|
||||
bgfx::setTexture(1, s_texStipple, textureStipple);
|
||||
bgfx::setUniform(u_stipple, stippleInv);
|
||||
meshSubmit(meshTrunk[targetLOD], 0, program, mtx, stateOpaque);
|
||||
|
||||
bgfx::setTexture(0, s_texColor, textureLeafs);
|
||||
bgfx::setTexture(1, s_texStipple, textureStipple);
|
||||
bgfx::setUniform(u_stipple, stippleInv);
|
||||
meshSubmit(meshTop[targetLOD], 0, program, mtx, stateTransparent);
|
||||
}
|
||||
|
||||
int lod = 0;
|
||||
if (eye[2] < -2.5f)
|
||||
{
|
||||
lod = 1;
|
||||
}
|
||||
|
||||
if (eye[2] < -5.0f)
|
||||
{
|
||||
lod = 2;
|
||||
}
|
||||
|
||||
if (targetLOD!=lod)
|
||||
{
|
||||
if (targetLOD==currLOD)
|
||||
if (imguiButton(m_transitions ? "ON" : "OFF") )
|
||||
{
|
||||
targetLOD = lod;
|
||||
m_transitions = !m_transitions;
|
||||
}
|
||||
|
||||
static float distance = 2.0f;
|
||||
imguiSlider("Distance", distance, 2.0f, 6.0f, .01f);
|
||||
|
||||
imguiEndScrollArea();
|
||||
imguiEndFrame();
|
||||
|
||||
// Set view 0 default viewport.
|
||||
bgfx::setViewRect(0, 0, 0, m_width, m_height);
|
||||
|
||||
// This dummy draw call is here to make sure that view 0 is cleared
|
||||
// if no other draw calls are submitted to view 0.
|
||||
bgfx::touch(0);
|
||||
|
||||
int64_t now = bx::getHPCounter();
|
||||
static int64_t last = now;
|
||||
const int64_t frameTime = now - last;
|
||||
last = now;
|
||||
const double freq = double(bx::getHPFrequency() );
|
||||
const double toMs = 1000.0/freq;
|
||||
|
||||
// Use debug font to print information about this example.
|
||||
bgfx::dbgTextClear();
|
||||
bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/12-lod");
|
||||
bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Mesh LOD m_transitions.");
|
||||
bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
|
||||
bgfx::dbgTextPrintf(0, 4, m_transitions ? 0x2f : 0x1f, m_transitions ? "m_transitions on" : "m_transitions off");
|
||||
|
||||
float at[3] = { 0.0f, 1.0f, 0.0f };
|
||||
float eye[3] = { 0.0f, -distance, -2.0f };
|
||||
|
||||
// Set view and projection matrix for view 0.
|
||||
const bgfx::HMD* hmd = bgfx::getHMD();
|
||||
if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
|
||||
{
|
||||
float view[16];
|
||||
bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
|
||||
|
||||
float proj[16];
|
||||
bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f);
|
||||
|
||||
bgfx::setViewTransform(0, view, proj);
|
||||
|
||||
// Set view 0 default viewport.
|
||||
//
|
||||
// Use HMD's m_width/m_height since HMD's internal frame buffer size
|
||||
// might be much larger than window size.
|
||||
bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
|
||||
}
|
||||
else
|
||||
{
|
||||
float view[16];
|
||||
bx::mtxLookAt(view, eye, at);
|
||||
|
||||
float proj[16];
|
||||
bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
|
||||
bgfx::setViewTransform(0, view, proj);
|
||||
|
||||
// Set view 0 default viewport.
|
||||
bgfx::setViewRect(0, 0, 0, m_width, m_height);
|
||||
}
|
||||
|
||||
float mtx[16];
|
||||
bx::mtxScale(mtx, 0.1f, 0.1f, 0.1f);
|
||||
|
||||
float stipple[3];
|
||||
float stippleInv[3];
|
||||
|
||||
const int currentLODframe = m_transitions ? 32-m_transitionFrame : 32;
|
||||
const int mainLOD = m_transitions ? m_currLod : m_targetLod;
|
||||
|
||||
stipple[0] = 0.0f;
|
||||
stipple[1] = -1.0f;
|
||||
stipple[2] = (float(currentLODframe)*4.0f/255.0f) - (1.0f/255.0f);
|
||||
|
||||
stippleInv[0] = (float(31)*4.0f/255.0f);
|
||||
stippleInv[1] = 1.0f;
|
||||
stippleInv[2] = (float(m_transitionFrame)*4.0f/255.0f) - (1.0f/255.0f);
|
||||
|
||||
const uint64_t stateTransparent = 0
|
||||
| BGFX_STATE_RGB_WRITE
|
||||
| BGFX_STATE_ALPHA_WRITE
|
||||
| BGFX_STATE_DEPTH_TEST_LESS
|
||||
| BGFX_STATE_CULL_CCW
|
||||
| BGFX_STATE_MSAA
|
||||
| BGFX_STATE_BLEND_ALPHA
|
||||
;
|
||||
|
||||
const uint64_t stateOpaque = BGFX_STATE_DEFAULT;
|
||||
|
||||
bgfx::setTexture(0, s_texColor, m_textureBark);
|
||||
bgfx::setTexture(1, s_texStipple, m_textureStipple);
|
||||
bgfx::setUniform(u_stipple, stipple);
|
||||
meshSubmit(m_meshTrunk[mainLOD], 0, m_program, mtx, stateOpaque);
|
||||
|
||||
bgfx::setTexture(0, s_texColor, m_textureLeafs);
|
||||
bgfx::setTexture(1, s_texStipple, m_textureStipple);
|
||||
bgfx::setUniform(u_stipple, stipple);
|
||||
meshSubmit(m_meshTop[mainLOD], 0, m_program, mtx, stateTransparent);
|
||||
|
||||
if (m_transitions
|
||||
&& (m_transitionFrame != 0) )
|
||||
{
|
||||
bgfx::setTexture(0, s_texColor, m_textureBark);
|
||||
bgfx::setTexture(1, s_texStipple, m_textureStipple);
|
||||
bgfx::setUniform(u_stipple, stippleInv);
|
||||
meshSubmit(m_meshTrunk[m_targetLod], 0, m_program, mtx, stateOpaque);
|
||||
|
||||
bgfx::setTexture(0, s_texColor, m_textureLeafs);
|
||||
bgfx::setTexture(1, s_texStipple, m_textureStipple);
|
||||
bgfx::setUniform(u_stipple, stippleInv);
|
||||
meshSubmit(m_meshTop[m_targetLod], 0, m_program, mtx, stateTransparent);
|
||||
}
|
||||
|
||||
int lod = 0;
|
||||
if (eye[2] < -2.5f)
|
||||
{
|
||||
lod = 1;
|
||||
}
|
||||
|
||||
if (eye[2] < -5.0f)
|
||||
{
|
||||
lod = 2;
|
||||
}
|
||||
|
||||
if (m_targetLod != lod)
|
||||
{
|
||||
if (m_targetLod == m_currLod)
|
||||
{
|
||||
m_targetLod = lod;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_currLod != m_targetLod)
|
||||
{
|
||||
m_transitionFrame++;
|
||||
}
|
||||
|
||||
if (m_transitionFrame > 32)
|
||||
{
|
||||
m_currLod = m_targetLod;
|
||||
m_transitionFrame = 0;
|
||||
}
|
||||
|
||||
// Advance to next frame. Rendering thread will be kicked to
|
||||
// process submitted rendering primitives.
|
||||
bgfx::frame();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (currLOD != targetLOD)
|
||||
{
|
||||
transitionFrame++;
|
||||
}
|
||||
|
||||
if (transitionFrame>32)
|
||||
{
|
||||
currLOD = targetLOD;
|
||||
transitionFrame = 0;
|
||||
}
|
||||
|
||||
// Advance to next frame. Rendering thread will be kicked to
|
||||
// process submitted rendering primitives.
|
||||
bgfx::frame();
|
||||
return false;
|
||||
}
|
||||
|
||||
imguiDestroy();
|
||||
entry::MouseState m_mouseState;
|
||||
uint32_t m_width;
|
||||
uint32_t m_height;
|
||||
uint32_t m_debug;
|
||||
uint32_t m_reset;
|
||||
|
||||
for (uint32_t ii = 0; ii < 3; ++ii)
|
||||
{
|
||||
meshUnload(meshTop[ii]);
|
||||
meshUnload(meshTrunk[ii]);
|
||||
}
|
||||
Mesh* m_meshTop[3];
|
||||
Mesh* m_meshTrunk[3];
|
||||
|
||||
// Cleanup.
|
||||
bgfx::destroyProgram(program);
|
||||
bgfx::ProgramHandle m_program;
|
||||
bgfx::UniformHandle s_texColor;
|
||||
bgfx::UniformHandle s_texStipple;
|
||||
bgfx::UniformHandle u_stipple;
|
||||
|
||||
bgfx::destroyUniform(s_texColor);
|
||||
bgfx::destroyUniform(s_texStipple);
|
||||
bgfx::destroyUniform(u_stipple);
|
||||
bgfx::TextureHandle m_textureStipple;
|
||||
bgfx::TextureHandle m_textureLeafs;
|
||||
bgfx::TextureHandle m_textureBark;
|
||||
|
||||
bgfx::destroyTexture(textureStipple);
|
||||
bgfx::destroyTexture(textureLeafs);
|
||||
bgfx::destroyTexture(textureBark);
|
||||
int32_t m_scrollArea;
|
||||
int32_t m_transitionFrame;
|
||||
int32_t m_currLod;
|
||||
int32_t m_targetLod;
|
||||
bool m_transitions;
|
||||
};
|
||||
|
||||
// Shutdown bgfx.
|
||||
bgfx::shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
ENTRY_IMPLEMENT_MAIN(Lod);
|
||||
|
@ -16,7 +16,7 @@ uniform vec4 u_color;
|
||||
uniform vec4 u_specular_shininess;
|
||||
uniform vec4 u_lightPosRadius[MAX_NUM_LIGHTS];
|
||||
uniform vec4 u_lightRgbInnerR[MAX_NUM_LIGHTS];
|
||||
SAMPLER2D(u_texColor, 0);
|
||||
SAMPLER2D(s_texColor, 0);
|
||||
|
||||
#define u_ambientPass u_params.x
|
||||
#define u_lightingPass u_params.y
|
||||
@ -80,7 +80,7 @@ void main()
|
||||
}
|
||||
lightColor *= u_lightingPass;
|
||||
|
||||
vec3 color = toLinear(texture2D(u_texColor, v_texcoord0)).xyz;
|
||||
vec3 color = toLinear(texture2D(s_texColor, v_texcoord0)).xyz;
|
||||
|
||||
vec3 ambient = toGamma(ambientColor * color);
|
||||
vec3 diffuse = toGamma(lightColor * color);
|
||||
|
@ -7,10 +7,10 @@
|
||||
|
||||
uniform vec4 u_lightPos;
|
||||
#if SHADOW_PACKED_DEPTH
|
||||
SAMPLER2D(u_shadowMap, 0);
|
||||
SAMPLER2D(s_shadowMap, 0);
|
||||
# define Sampler sampler2D
|
||||
#else
|
||||
SAMPLER2DSHADOW(u_shadowMap, 0);
|
||||
SAMPLER2DSHADOW(s_shadowMap, 0);
|
||||
# define Sampler sampler2DShadow
|
||||
#endif // SHADOW_PACKED_DEPTH
|
||||
|
||||
@ -90,7 +90,7 @@ void main()
|
||||
vec2 lc = lit(ld, n, vd, 1.0);
|
||||
|
||||
vec2 texelSize = vec2_splat(1.0/512.0);
|
||||
float visibility = PCF(u_shadowMap, v_shadowcoord, shadowMapBias, texelSize);
|
||||
float visibility = PCF(s_shadowMap, v_shadowcoord, shadowMapBias, texelSize);
|
||||
|
||||
vec3 ambient = 0.1 * color;
|
||||
vec3 brdf = (lc.x + lc.y) * color * visibility;
|
||||
|
@ -29,10 +29,10 @@ uniform vec4 u_tetraNormalBlue;
|
||||
uniform vec4 u_tetraNormalRed;
|
||||
#endif
|
||||
|
||||
SAMPLER2D(u_shadowMap0, 4);
|
||||
SAMPLER2D(u_shadowMap1, 5);
|
||||
SAMPLER2D(u_shadowMap2, 6);
|
||||
SAMPLER2D(u_shadowMap3, 7);
|
||||
SAMPLER2D(s_shadowMap0, 4);
|
||||
SAMPLER2D(s_shadowMap1, 5);
|
||||
SAMPLER2D(s_shadowMap2, 6);
|
||||
SAMPLER2D(s_shadowMap3, 7);
|
||||
|
||||
struct Shader
|
||||
{
|
||||
|
@ -48,7 +48,15 @@
|
||||
|
||||
float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4;
|
||||
colorCoverage = vec3(-coverage, coverage, -coverage);
|
||||
visibility = computeVisibility(u_shadowMap0, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness);
|
||||
visibility = computeVisibility(s_shadowMap0
|
||||
, shadowcoord
|
||||
, u_shadowMapBias
|
||||
, u_smSamplingParams
|
||||
, texelSize
|
||||
, u_shadowMapDepthMultiplier
|
||||
, u_shadowMapMinVariance
|
||||
, u_shadowMapHardness
|
||||
);
|
||||
}
|
||||
else if (selection1)
|
||||
{
|
||||
@ -56,7 +64,15 @@
|
||||
|
||||
float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4;
|
||||
colorCoverage = vec3(coverage, coverage, -coverage);
|
||||
visibility = computeVisibility(u_shadowMap1, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/2.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness);
|
||||
visibility = computeVisibility(s_shadowMap1
|
||||
, shadowcoord
|
||||
, u_shadowMapBias
|
||||
, u_smSamplingParams
|
||||
, texelSize/2.0
|
||||
, u_shadowMapDepthMultiplier
|
||||
, u_shadowMapMinVariance
|
||||
, u_shadowMapHardness
|
||||
);
|
||||
}
|
||||
else if (selection2)
|
||||
{
|
||||
@ -64,7 +80,15 @@
|
||||
|
||||
float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4;
|
||||
colorCoverage = vec3(-coverage, -coverage, coverage);
|
||||
visibility = computeVisibility(u_shadowMap2, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/3.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness);
|
||||
visibility = computeVisibility(s_shadowMap2
|
||||
, shadowcoord
|
||||
, u_shadowMapBias
|
||||
, u_smSamplingParams
|
||||
, texelSize/3.0
|
||||
, u_shadowMapDepthMultiplier
|
||||
, u_shadowMapMinVariance
|
||||
, u_shadowMapHardness
|
||||
);
|
||||
}
|
||||
else //selection3
|
||||
{
|
||||
@ -72,7 +96,15 @@
|
||||
|
||||
float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4;
|
||||
colorCoverage = vec3(coverage, -coverage, -coverage);
|
||||
visibility = computeVisibility(u_shadowMap3, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/4.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness);
|
||||
visibility = computeVisibility(s_shadowMap3
|
||||
, shadowcoord
|
||||
, u_shadowMapBias
|
||||
, u_smSamplingParams
|
||||
, texelSize/4.0
|
||||
, u_shadowMapDepthMultiplier
|
||||
, u_shadowMapMinVariance
|
||||
, u_shadowMapHardness
|
||||
);
|
||||
}
|
||||
#elif SM_OMNI
|
||||
vec2 texelSize = vec2_splat(u_shadowMapTexelSize/4.0);
|
||||
@ -115,14 +147,30 @@
|
||||
colorCoverage = vec3(coverage, -coverage, -coverage);
|
||||
}
|
||||
|
||||
visibility = computeVisibility(u_shadowMap0, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness);
|
||||
visibility = computeVisibility(s_shadowMap0
|
||||
, shadowcoord
|
||||
, u_shadowMapBias
|
||||
, u_smSamplingParams
|
||||
, texelSize
|
||||
, u_shadowMapDepthMultiplier
|
||||
, u_shadowMapMinVariance
|
||||
, u_shadowMapHardness
|
||||
);
|
||||
#else
|
||||
vec2 texelSize = vec2_splat(u_shadowMapTexelSize);
|
||||
|
||||
float coverage = texcoordInRange(v_shadowcoord.xy/v_shadowcoord.w) * 0.3;
|
||||
colorCoverage = vec3(coverage, -coverage, -coverage);
|
||||
|
||||
visibility = computeVisibility(u_shadowMap0, v_shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness);
|
||||
visibility = computeVisibility(s_shadowMap0
|
||||
, v_shadowcoord
|
||||
, u_shadowMapBias
|
||||
, u_smSamplingParams
|
||||
, texelSize
|
||||
, u_shadowMapDepthMultiplier
|
||||
, u_shadowMapMinVariance
|
||||
, u_shadowMapHardness
|
||||
);
|
||||
#endif
|
||||
|
||||
vec3 v = v_view;
|
||||
|
@ -7,13 +7,13 @@ $input v_texcoord0
|
||||
|
||||
#include "../common/common.sh"
|
||||
uniform vec4 u_color;
|
||||
SAMPLER2D(u_texColor, 0);
|
||||
SAMPLER2D(s_texColor, 0);
|
||||
|
||||
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)
|
||||
{
|
||||
discard;
|
||||
}
|
||||
|
@ -6,9 +6,15 @@ $input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4
|
||||
*/
|
||||
|
||||
#include "common.sh"
|
||||
SAMPLER2D(u_shadowMap0, 4);
|
||||
SAMPLER2D(s_shadowMap0, 4);
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = blur9(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4);
|
||||
gl_FragColor = blur9(s_shadowMap0
|
||||
, v_texcoord0
|
||||
, v_texcoord1
|
||||
, v_texcoord2
|
||||
, v_texcoord3
|
||||
, v_texcoord4
|
||||
);
|
||||
}
|
||||
|
@ -6,10 +6,15 @@ $input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4
|
||||
*/
|
||||
|
||||
#include "common.sh"
|
||||
SAMPLER2D(u_shadowMap0, 4);
|
||||
SAMPLER2D(s_shadowMap0, 4);
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = blur9VSM(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4);
|
||||
gl_FragColor = blur9VSM(s_shadowMap0
|
||||
, v_texcoord0
|
||||
, v_texcoord1
|
||||
, v_texcoord2
|
||||
, v_texcoord3
|
||||
, v_texcoord4
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -6,9 +6,9 @@ $input v_texcoord0
|
||||
*/
|
||||
|
||||
#include "../common/common.sh"
|
||||
SAMPLER2D(u_texColor, 0);
|
||||
SAMPLER2D(s_texColor, 0);
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = texture2D(u_texColor, v_texcoord0);
|
||||
gl_FragColor = texture2D(s_texColor, v_texcoord0);
|
||||
}
|
||||
|
@ -6,14 +6,14 @@ $input v_texcoord0
|
||||
*/
|
||||
|
||||
#include "../common/common.sh"
|
||||
SAMPLER2D(u_shadowMap0, 4);
|
||||
SAMPLER2D(s_shadowMap0, 4);
|
||||
|
||||
uniform vec4 u_params2;
|
||||
#define u_depthValuePow u_params2.x
|
||||
|
||||
void main()
|
||||
{
|
||||
float depth = unpackRgbaToFloat(texture2D(u_shadowMap0, v_texcoord0) );
|
||||
float depth = unpackRgbaToFloat(texture2D(s_shadowMap0, v_texcoord0) );
|
||||
vec3 rgba = pow(vec3_splat(depth), vec3_splat(u_depthValuePow) );
|
||||
gl_FragColor = vec4(rgba, 1.0);
|
||||
}
|
||||
|
@ -6,14 +6,14 @@ $input v_texcoord0
|
||||
*/
|
||||
|
||||
#include "../common/common.sh"
|
||||
SAMPLER2D(u_shadowMap0, 4);
|
||||
SAMPLER2D(s_shadowMap0, 4);
|
||||
|
||||
uniform vec4 u_params2;
|
||||
#define u_depthValuePow u_params2.x
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 val = texture2D(u_shadowMap0, v_texcoord0);
|
||||
vec4 val = texture2D(s_shadowMap0, v_texcoord0);
|
||||
float depth = unpackHalfFloat(val.rg);
|
||||
vec3 rgba = pow(vec3_splat(depth), vec3_splat(u_depthValuePow) );
|
||||
gl_FragColor = vec4(rgba, 1.0);
|
||||
|
@ -6,9 +6,15 @@ $input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4
|
||||
*/
|
||||
|
||||
#include "common.sh"
|
||||
SAMPLER2D(u_shadowMap0, 4);
|
||||
SAMPLER2D(s_shadowMap0, 4);
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = blur9(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4);
|
||||
gl_FragColor = blur9(s_shadowMap0
|
||||
, v_texcoord0
|
||||
, v_texcoord1
|
||||
, v_texcoord2
|
||||
, v_texcoord3
|
||||
, v_texcoord4
|
||||
);
|
||||
}
|
||||
|
@ -6,10 +6,15 @@ $input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4
|
||||
*/
|
||||
|
||||
#include "common.sh"
|
||||
SAMPLER2D(u_shadowMap0, 4);
|
||||
SAMPLER2D(s_shadowMap0, 4);
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = blur9VSM(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4);
|
||||
gl_FragColor = blur9VSM(s_shadowMap0
|
||||
, v_texcoord0
|
||||
, v_texcoord1
|
||||
, v_texcoord2
|
||||
, v_texcoord3
|
||||
, v_texcoord4
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -223,8 +223,8 @@ static const uint16_t s_planeIndices[] =
|
||||
static bool s_flipV = false;
|
||||
static float s_texelHalf = 0.0f;
|
||||
|
||||
static bgfx::UniformHandle u_texColor;
|
||||
static bgfx::UniformHandle u_shadowMap[ShadowMapRenderTargets::Count];
|
||||
static bgfx::UniformHandle s_texColor;
|
||||
static bgfx::UniformHandle s_shadowMap[ShadowMapRenderTargets::Count];
|
||||
static bgfx::FrameBufferHandle s_rtShadowMap[ShadowMapRenderTargets::Count];
|
||||
static bgfx::FrameBufferHandle s_rtBlur;
|
||||
|
||||
@ -1012,12 +1012,12 @@ struct Mesh
|
||||
// Set textures.
|
||||
if (bgfx::invalidHandle != _texture.idx)
|
||||
{
|
||||
bgfx::setTexture(0, u_texColor, _texture);
|
||||
bgfx::setTexture(0, s_texColor, _texture);
|
||||
}
|
||||
|
||||
for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii)
|
||||
{
|
||||
bgfx::setTexture(4 + ii, u_shadowMap[ii], s_rtShadowMap[ii]);
|
||||
bgfx::setTexture(4 + ii, s_shadowMap[ii], s_rtShadowMap[ii]);
|
||||
}
|
||||
|
||||
// Apply render state.
|
||||
@ -1351,11 +1351,11 @@ int _main_(int _argc, char** _argv)
|
||||
|
||||
// Uniforms.
|
||||
s_uniforms.init();
|
||||
u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Int1);
|
||||
u_shadowMap[0] = bgfx::createUniform("u_shadowMap0", bgfx::UniformType::Int1);
|
||||
u_shadowMap[1] = bgfx::createUniform("u_shadowMap1", bgfx::UniformType::Int1);
|
||||
u_shadowMap[2] = bgfx::createUniform("u_shadowMap2", bgfx::UniformType::Int1);
|
||||
u_shadowMap[3] = bgfx::createUniform("u_shadowMap3", bgfx::UniformType::Int1);
|
||||
s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
|
||||
s_shadowMap[0] = bgfx::createUniform("s_shadowMap0", bgfx::UniformType::Int1);
|
||||
s_shadowMap[1] = bgfx::createUniform("s_shadowMap1", bgfx::UniformType::Int1);
|
||||
s_shadowMap[2] = bgfx::createUniform("s_shadowMap2", bgfx::UniformType::Int1);
|
||||
s_shadowMap[3] = bgfx::createUniform("s_shadowMap3", bgfx::UniformType::Int1);
|
||||
|
||||
// Programs.
|
||||
s_programs.init();
|
||||
@ -2814,12 +2814,12 @@ int _main_(int _argc, char** _argv)
|
||||
if (bVsmOrEsm
|
||||
&& currentSmSettings->m_doBlur)
|
||||
{
|
||||
bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]);
|
||||
bgfx::setTexture(4, s_shadowMap[0], s_rtShadowMap[0]);
|
||||
bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
|
||||
screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
|
||||
bgfx::submit(RENDERVIEW_VBLUR_0_ID, s_programs.m_vBlur[depthType]);
|
||||
|
||||
bgfx::setTexture(4, u_shadowMap[0], s_rtBlur);
|
||||
bgfx::setTexture(4, s_shadowMap[0], s_rtBlur);
|
||||
bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
|
||||
screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
|
||||
bgfx::submit(RENDERVIEW_HBLUR_0_ID, s_programs.m_hBlur[depthType]);
|
||||
@ -2830,12 +2830,12 @@ int _main_(int _argc, char** _argv)
|
||||
{
|
||||
const uint8_t viewId = RENDERVIEW_VBLUR_0_ID + jj;
|
||||
|
||||
bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]);
|
||||
bgfx::setTexture(4, s_shadowMap[0], s_rtShadowMap[ii]);
|
||||
bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
|
||||
screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
|
||||
bgfx::submit(viewId, s_programs.m_vBlur[depthType]);
|
||||
|
||||
bgfx::setTexture(4, u_shadowMap[0], s_rtBlur);
|
||||
bgfx::setTexture(4, s_shadowMap[0], s_rtBlur);
|
||||
bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
|
||||
screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
|
||||
bgfx::submit(viewId+1, s_programs.m_hBlur[depthType]);
|
||||
@ -3065,7 +3065,7 @@ int _main_(int _argc, char** _argv)
|
||||
// Draw depth rect.
|
||||
if (settings.m_drawDepthBuffer)
|
||||
{
|
||||
bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]);
|
||||
bgfx::setTexture(4, s_shadowMap[0], s_rtShadowMap[0]);
|
||||
bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
|
||||
screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
|
||||
bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID, s_programs.m_drawDepth[depthType]);
|
||||
@ -3074,7 +3074,7 @@ int _main_(int _argc, char** _argv)
|
||||
{
|
||||
for (uint8_t ii = 1; ii < settings.m_numSplits; ++ii)
|
||||
{
|
||||
bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]);
|
||||
bgfx::setTexture(4, s_shadowMap[0], s_rtShadowMap[ii]);
|
||||
bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
|
||||
screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
|
||||
bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID+ii, s_programs.m_drawDepth[depthType]);
|
||||
@ -3147,11 +3147,11 @@ int _main_(int _argc, char** _argv)
|
||||
|
||||
s_programs.destroy();
|
||||
|
||||
bgfx::destroyUniform(u_texColor);
|
||||
bgfx::destroyUniform(u_shadowMap[3]);
|
||||
bgfx::destroyUniform(u_shadowMap[2]);
|
||||
bgfx::destroyUniform(u_shadowMap[1]);
|
||||
bgfx::destroyUniform(u_shadowMap[0]);
|
||||
bgfx::destroyUniform(s_texColor);
|
||||
bgfx::destroyUniform(s_shadowMap[3]);
|
||||
bgfx::destroyUniform(s_shadowMap[2]);
|
||||
bgfx::destroyUniform(s_shadowMap[1]);
|
||||
bgfx::destroyUniform(s_shadowMap[0]);
|
||||
|
||||
s_uniforms.destroy();
|
||||
|
||||
|
@ -7,12 +7,12 @@ $input v_texcoord0
|
||||
|
||||
#include "../common/common.sh"
|
||||
|
||||
SAMPLER2D(u_texColor0, 0);
|
||||
SAMPLER2D(u_texColor1, 1);
|
||||
SAMPLER2D(s_texColor0, 0);
|
||||
SAMPLER2D(s_texColor1, 1);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 accum = texture2D(u_texColor0, v_texcoord0);
|
||||
float opacity = texture2D(u_texColor1, v_texcoord0).x;
|
||||
vec4 accum = texture2D(s_texColor0, v_texcoord0);
|
||||
float opacity = texture2D(s_texColor1, v_texcoord0).x;
|
||||
gl_FragColor = vec4(accum.xyz / clamp(accum.w, 1e-4, 5e4), opacity);
|
||||
}
|
||||
|
@ -7,13 +7,13 @@ $input v_texcoord0
|
||||
|
||||
#include "../common/common.sh"
|
||||
|
||||
SAMPLER2D(u_texColor0, 0);
|
||||
SAMPLER2D(u_texColor1, 1);
|
||||
SAMPLER2D(s_texColor0, 0);
|
||||
SAMPLER2D(s_texColor1, 1);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 accum = texture2D(u_texColor0, v_texcoord0);
|
||||
vec4 accum = texture2D(s_texColor0, v_texcoord0);
|
||||
float opacity = accum.w;
|
||||
float weight = texture2D(u_texColor1, v_texcoord0).x;
|
||||
float weight = texture2D(s_texColor1, v_texcoord0).x;
|
||||
gl_FragColor = vec4(accum.xyz / clamp(weight, 1e-4, 5e4), opacity);
|
||||
}
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user