The fix in fllowing:
LLTextureFetch has object LLTextureInfo which is has Recorder object.
The recorder object activate (Recorder::handleStart()) self AccumulatorBufferGroup
(Recorder::mBuffers into the current (LLTrace::get_thread_recorder()) ThreadRecorder object
which created (as I understand) one per thread, and time to time send accumulated data to the master ThreadRecorder.
The problem is that LLTextureFetch also can uses from the main thread.
I decide add parameter to CTOR LLTextureInfo(bool postponeStartRecoreder) -
if it false the recorder start immediatly in LLTextureInfo CTOR body, if true we need to start it manually.
Also I add another one LLTextureInfo in LLTextureFetch::mTextureInfoMainThread which is intended
for accumulate data from the main thread.
The postponed Recorder started/stoped from LLTextureFetch::startThread()/endThread().
The fix in fllowing:
LLTextureFetch has object LLTextureInfo which is has Recorder object.
The recorder object activate (Recorder::handleStart()) self AccumulatorBufferGroup
(Recorder::mBuffers into the current (LLTrace::get_thread_recorder()) ThreadRecorder object
which created (as I understand) one per thread, and time to time send accumulated data to the master ThreadRecorder.
The problem is that LLTextureFetch also can uses from the main thread.
I decide add parameter to CTOR LLTextureInfo(bool postponeStartRecoreder) -
if it false the recorder start immediatly in LLTextureInfo CTOR body, if true we need to start it manually.
Also I add another one LLTextureInfo in LLTextureFetch::mTextureInfoMainThread which is intended
for accumulate data from the main thread.
The postponed Recorder started/stoped from LLTextureFetch::startThread()/endThread().
In past, I already fixed the similar problem (MAINT-4165, MAINT-4839), and than I created the code for guarantee it in LLGLSLShader::mapUniforms() with explanation in comment why it's need.
For this ticket the problem the same, on OSX platform for shader:(class1/deferred/fullbrightShinyF.glsl) the uniform: environmentMap has lower location than diffuseMap. And here is the problem appear when we try bind 2D texture instead Cube texture and vice versa.