mirror of
https://github.com/overte-org/overte.git
synced 2025-07-26 08:15:21 +02:00
found the issue brekaing the render, i didn't do the Blend enable sync properly
This commit is contained in:
parent
ab9be0cb41
commit
ee3ec3fe1a
4 changed files with 33 additions and 12 deletions
|
@ -261,12 +261,12 @@ void Environment::renderAtmosphere(Camera& camera, const EnvironmentData& data)
|
||||||
program->setUniformValue(locations[G_LOCATION], -0.990f);
|
program->setUniformValue(locations[G_LOCATION], -0.990f);
|
||||||
program->setUniformValue(locations[G2_LOCATION], -0.990f * -0.990f);
|
program->setUniformValue(locations[G2_LOCATION], -0.990f * -0.990f);
|
||||||
|
|
||||||
|
glFrontFace(GL_CCW);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
// glDisable(GL_DEPTH_TEST);
|
|
||||||
DependencyManager::get<GeometryCache>()->renderSphere(1.0f, 100, 50, glm::vec4(1.0f, 1.0f, 1.0f, 1.0f)); //Draw a unit sphere
|
DependencyManager::get<GeometryCache>()->renderSphere(1.0f, 100, 50, glm::vec4(1.0f, 1.0f, 1.0f, 1.0f)); //Draw a unit sphere
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
// glEnable(GL_CULL_FACE);
|
|
||||||
|
|
||||||
program->release();
|
program->release();
|
||||||
|
|
||||||
|
|
|
@ -260,8 +260,10 @@ protected:
|
||||||
void updatePipeline();
|
void updatePipeline();
|
||||||
// Force to reset all the state fields indicated by the 'toBeReset" signature
|
// Force to reset all the state fields indicated by the 'toBeReset" signature
|
||||||
void resetPipelineState(State::Signature toBeReset);
|
void resetPipelineState(State::Signature toBeReset);
|
||||||
// Synchronize the state cache of this Backend with the actual real state of the GL Context
|
// Synchronize the state cache of this Backend with the actual real state of the GL Context
|
||||||
void syncPipelineStateCache();
|
void syncPipelineStateCache();
|
||||||
|
// Grab the actual gl state into it's gpu::State equivalent. THis is used by the above call syncPipleineStateCache()
|
||||||
|
void getCurrentGLState(State::Cache& state);
|
||||||
|
|
||||||
struct PipelineStageState {
|
struct PipelineStageState {
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ void GLBackend::do_setPipeline(Batch& batch, uint32 paramOffset) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_pipeline._needStateSync) {
|
if (_pipeline._needStateSync) {
|
||||||
// syncPipelineStateCache();
|
syncPipelineStateCache();
|
||||||
_pipeline._needStateSync = false;
|
_pipeline._needStateSync = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,6 +109,14 @@ void GLBackend::do_setPipeline(Batch& batch, uint32 paramOffset) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLBackend::updatePipeline() {
|
void GLBackend::updatePipeline() {
|
||||||
|
#ifdef DEBUG_GLSTATE
|
||||||
|
if (_pipeline._needStateSync) {
|
||||||
|
State::Cache state;
|
||||||
|
getCurrentGLState(state);
|
||||||
|
State::Signature signature = State::evalSignature(state);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (_pipeline._invalidProgram) {
|
if (_pipeline._invalidProgram) {
|
||||||
// doing it here is aproblem for calls to glUniform.... so will do it on assing...
|
// doing it here is aproblem for calls to glUniform.... so will do it on assing...
|
||||||
glUseProgram(_pipeline._program);
|
glUseProgram(_pipeline._program);
|
||||||
|
|
|
@ -331,9 +331,7 @@ State::BlendArg blendArgFromGL(GLenum blendArg) {
|
||||||
return State::ONE;
|
return State::ONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLBackend::getCurrentGLState(State::Cache& state) {
|
||||||
void GLBackend::syncPipelineStateCache() {
|
|
||||||
State::Cache state;
|
|
||||||
{
|
{
|
||||||
GLint modes[2];
|
GLint modes[2];
|
||||||
glGetIntegerv(GL_POLYGON_MODE, modes);
|
glGetIntegerv(GL_POLYGON_MODE, modes);
|
||||||
|
@ -418,8 +416,11 @@ void GLBackend::syncPipelineStateCache() {
|
||||||
state.stencilTestBack = State::StencilTest(backRef, backReadMask, comparisonFuncFromGL(backFunc), stencilOpFromGL(backFail), stencilOpFromGL(backDepthFail), stencilOpFromGL(backPass));
|
state.stencilTestBack = State::StencilTest(backRef, backReadMask, comparisonFuncFromGL(backFunc), stencilOpFromGL(backFail), stencilOpFromGL(backDepthFail), stencilOpFromGL(backPass));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
GLint mask;
|
GLint mask = 0xFFFFFFFF;
|
||||||
glGetIntegerv(GL_SAMPLE_COVERAGE, &mask);
|
if (glIsEnabled(GL_SAMPLE_MASK)) {
|
||||||
|
glGetIntegerv(GL_SAMPLE_MASK, &mask);
|
||||||
|
state.sampleMask = mask;
|
||||||
|
}
|
||||||
state.sampleMask = mask;
|
state.sampleMask = mask;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -441,7 +442,7 @@ void GLBackend::syncPipelineStateCache() {
|
||||||
glGetIntegerv(GL_BLEND_EQUATION_RGB, &opRGB);
|
glGetIntegerv(GL_BLEND_EQUATION_RGB, &opRGB);
|
||||||
glGetIntegerv(GL_BLEND_EQUATION_ALPHA, &opA);
|
glGetIntegerv(GL_BLEND_EQUATION_ALPHA, &opA);
|
||||||
|
|
||||||
state.blendFunction = State::BlendFunction(false,
|
state.blendFunction = State::BlendFunction(isEnabled,
|
||||||
blendArgFromGL(srcRGB), blendOpFromGL(opRGB), blendArgFromGL(dstRGB),
|
blendArgFromGL(srcRGB), blendOpFromGL(opRGB), blendArgFromGL(dstRGB),
|
||||||
blendArgFromGL(srcA), blendOpFromGL(opA), blendArgFromGL(dstA));
|
blendArgFromGL(srcA), blendOpFromGL(opA), blendArgFromGL(dstA));
|
||||||
}
|
}
|
||||||
|
@ -454,8 +455,13 @@ void GLBackend::syncPipelineStateCache() {
|
||||||
| (mask[3] ? State::WRITE_ALPHA : 0);
|
| (mask[3] ? State::WRITE_ALPHA : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_GL_ERROR();
|
CHECK_GL_ERROR();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLBackend::syncPipelineStateCache() {
|
||||||
|
State::Cache state;
|
||||||
|
|
||||||
|
getCurrentGLState(state);
|
||||||
State::Signature signature = State::evalSignature(state);
|
State::Signature signature = State::evalSignature(state);
|
||||||
|
|
||||||
_pipeline._stateCache = state;
|
_pipeline._stateCache = state;
|
||||||
|
@ -645,7 +651,12 @@ void GLBackend::do_setStateAlphaToCoverageEnable(bool enable) {
|
||||||
|
|
||||||
void GLBackend::do_setStateSampleMask(uint32 mask) {
|
void GLBackend::do_setStateSampleMask(uint32 mask) {
|
||||||
if (_pipeline._stateCache.sampleMask != mask) {
|
if (_pipeline._stateCache.sampleMask != mask) {
|
||||||
// TODO
|
if (mask == 0xFFFFFFFF) {
|
||||||
|
glDisable(GL_SAMPLE_MASK);
|
||||||
|
} else {
|
||||||
|
glEnable(GL_SAMPLE_MASK);
|
||||||
|
glSampleMaski(0, mask);
|
||||||
|
}
|
||||||
_pipeline._stateCache.sampleMask = mask;
|
_pipeline._stateCache.sampleMask = mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue