X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fshader.cpp;h=4bf10ce31f1c36cf7e58faf9b07d67fc5304ccb6;hb=b38afc9311e235d2b90d61dbbcf1a18e549073a7;hp=122cbea19a207ad6f562becc7f956e7739af420f;hpb=dc407e219f8b0394f3a4d10ea8379b8678d98d1c;p=dragonfireclient.git diff --git a/src/shader.cpp b/src/shader.cpp index 122cbea19..4bf10ce31 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -417,29 +417,31 @@ u32 ShaderSource::getShaderId(const std::string &name) if(get_current_thread_id() == m_main_thread){ return getShaderIdDirect(name); } else { - infostream<<"getShaderId(): Queued: name=\""< result_queue; + + static ResultQueue result_queue; // Throw a request in m_get_shader_queue.add(name, 0, 0, &result_queue); - infostream<<"Waiting for shader from main thread, name=\"" - < + while(true) { + // Wait result for a second + GetResult result = result_queue.pop_front(1000); - // Check that at least something worked OK - assert(result.key == name); - - return result.item; + if (result.key == name) { + return result.item; + } + } } catch(ItemNotFoundException &e){ - infostream<<"Waiting for shader timed out."< request = m_get_shader_queue.pop(); - /*infostream<<"ShaderSource::processQueue(): " + /**errorstream<<"ShaderSource::processQueue(): " <<"got shader request with " <<"name=\""<onSetConstants(services, is_highlevel); } } - + ShaderInfo generate_shader(std::string name, IrrlichtDevice *device, video::IShaderConstantSetCallBack *callback, SourceShaderCache *sourcecache)