mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2025-02-17 12:20:55 -05:00
Fixed constant stomp bug.
This commit is contained in:
parent
4b8f63607c
commit
9b132944f5
3 changed files with 27 additions and 15 deletions
|
@ -386,6 +386,7 @@ namespace bgfx
|
|||
|
||||
uint8_t m_type;
|
||||
uint16_t m_loc;
|
||||
uint16_t m_count;
|
||||
};
|
||||
|
||||
PredefinedUniform::Enum nameToPredefinedUniformEnum(const char* _name);
|
||||
|
|
|
@ -203,6 +203,10 @@ namespace bgfx
|
|||
, m_caps.MaxTextureHeight
|
||||
);
|
||||
|
||||
BX_TRACE("Max vertex shader instr. slots: %d", m_caps.MaxVertexShader30InstructionSlots);
|
||||
BX_TRACE("Max vertex shader constants: %d", m_caps.MaxVertexShaderConst);
|
||||
BX_TRACE("Max fragment shader instr slots: %d", m_caps.MaxPixelShader30InstructionSlots);
|
||||
|
||||
m_fmtNULL = SUCCEEDED(m_d3d9->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_TEXTURE, D3DFMT_NULL) );
|
||||
m_fmtDF16 = SUCCEEDED(m_d3d9->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_TEXTURE, D3DFMT_DF16) );
|
||||
m_fmtDF24 = SUCCEEDED(m_d3d9->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_TEXTURE, D3DFMT_DF24) );
|
||||
|
@ -801,32 +805,38 @@ namespace bgfx
|
|||
uint16_t regCount;
|
||||
stream.read(regCount);
|
||||
|
||||
BX_TRACE("\t%s, type %2d, num %2d, r.index %3d, r.count %2d"
|
||||
, name
|
||||
, type
|
||||
, num
|
||||
, regIndex
|
||||
, regCount
|
||||
);
|
||||
const char* kind = "invalid";
|
||||
|
||||
const void* data = NULL;
|
||||
PredefinedUniform::Enum predefined = nameToPredefinedUniformEnum(name);
|
||||
if (PredefinedUniform::Count != predefined)
|
||||
{
|
||||
kind = "predefined";
|
||||
m_predefined[m_numPredefined].m_loc = regIndex;
|
||||
m_predefined[m_numPredefined].m_count = regCount;
|
||||
m_predefined[m_numPredefined].m_type = predefined|fragmentBit;
|
||||
m_numPredefined++;
|
||||
}
|
||||
else
|
||||
{
|
||||
const UniformInfo* info = s_renderCtx.m_uniformReg.find(name);
|
||||
BX_CHECK(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name);
|
||||
if (NULL != info)
|
||||
{
|
||||
kind = "user";
|
||||
data = info->m_data;
|
||||
m_constantBuffer->writeUniformRef( (ConstantType::Enum)(type|fragmentBit), regIndex, data, regCount);
|
||||
BX_TRACE("store %s %p", name, data);
|
||||
}
|
||||
}
|
||||
|
||||
BX_TRACE("\t%s: %s, type %2d, num %2d, r.index %3d, r.count %2d"
|
||||
, kind
|
||||
, name
|
||||
, type
|
||||
, num
|
||||
, regIndex
|
||||
, regCount
|
||||
);
|
||||
}
|
||||
|
||||
uint16_t shaderSize;
|
||||
|
@ -1671,20 +1681,20 @@ namespace bgfx
|
|||
|
||||
case PredefinedUniform::View:
|
||||
{
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, m_render->m_view[view].val, 4);
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, m_render->m_view[view].val, uint32_min(4, predefined.m_count) );
|
||||
}
|
||||
break;
|
||||
|
||||
case PredefinedUniform::ViewProj:
|
||||
{
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, viewProj[view].val, 4);
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, viewProj[view].val, uint32_min(4, predefined.m_count) );
|
||||
}
|
||||
break;
|
||||
|
||||
case PredefinedUniform::Model:
|
||||
{
|
||||
const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix];
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, model.val, state.m_num*4);
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, model.val, uint32_min(state.m_num*4, predefined.m_count) );
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1693,7 +1703,7 @@ namespace bgfx
|
|||
Matrix4 modelViewProj;
|
||||
const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix];
|
||||
matrix_mul(modelViewProj.val, model.val, viewProj[view].val);
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, modelViewProj.val, 4);
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, modelViewProj.val, uint32_min(4, predefined.m_count) );
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1716,7 +1726,7 @@ namespace bgfx
|
|||
Matrix4 modelViewProj;
|
||||
matrix_mul(modelViewProj.val, model.val, viewProjBias.val);
|
||||
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, modelViewProj.val, 4);
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, modelViewProj.val, uint32_min(4, predefined.m_count) );
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1734,7 +1744,7 @@ namespace bgfx
|
|||
Matrix4 viewProjBias;
|
||||
matrix_mul(viewProjBias.val, viewProj[other].val, s_bias);
|
||||
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, viewProjBias.val, 4);
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, viewProjBias.val, uint32_min(4, predefined.m_count) );
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -480,6 +480,7 @@ namespace bgfx
|
|||
{
|
||||
m_predefined[m_numPredefined].m_loc = loc;
|
||||
m_predefined[m_numPredefined].m_type = predefined;
|
||||
m_predefined[m_numPredefined].m_count = num;
|
||||
m_numPredefined++;
|
||||
}
|
||||
else
|
||||
|
@ -1587,7 +1588,7 @@ namespace bgfx
|
|||
{
|
||||
const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix];
|
||||
GL_CHECK(glUniformMatrix4fv(predefined.m_loc
|
||||
, state.m_num
|
||||
, uint32_min(predefined.m_count, state.m_num)
|
||||
, GL_FALSE
|
||||
, model.val
|
||||
) );
|
||||
|
|
Loading…
Reference in a new issue