From 5bdfceebc58a7fa5ffa2e154bcb5c69029d9b157 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 26 Oct 2016 18:35:47 -0700 Subject: [PATCH 01/19] BRingin back the stereo code path --- libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 34 ++++++- libraries/gpu-gl/src/gpu/gl/GLBackend.h | 37 ++++++++ .../gpu-gl/src/gpu/gl/GLBackendInput.cpp | 8 ++ .../gpu-gl/src/gpu/gl/GLBackendPipeline.cpp | 6 ++ .../gpu-gl/src/gpu/gl/GLBackendTransform.cpp | 43 +++++++-- libraries/gpu-gl/src/gpu/gl/GLShader.cpp | 17 +++- libraries/gpu-gl/src/gpu/gl/GLShader.h | 2 + libraries/gpu-gl/src/gpu/gl45/GL45Backend.cpp | 18 +++- libraries/gpu/src/gpu/Transform.slh | 94 ++++++++++++++----- 9 files changed, 225 insertions(+), 34 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index 2e1084e581..7f0a33aef4 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -306,11 +306,20 @@ void GLBackend::render(const Batch& batch) { renderPassTransfer(batch); } +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + if (_stereo._enable) { + glEnable(GL_CLIP_DISTANCE0); + } +#endif { PROFILE_RANGE(_stereo._enable ? "Render Stereo" : "Render"); renderPassDraw(batch); } - +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + if (_stereo._enable) { + glDisable(GL_CLIP_DISTANCE0); + } +#endif // Restore the saved stereo state for the next batch _stereo._enable = savedStereo; } @@ -325,6 +334,23 @@ void GLBackend::syncCache() { glEnable(GL_LINE_SMOOTH); } +#ifdef GPU_STEREO_DRAWCALL_DOUBLED +void GLBackend::setupStereoSide(int side) { + ivec4 vp = _transform._viewport; + vp.z /= 2; + glViewport(vp.x + side * vp.z, vp.y, vp.z, vp.w); + + +#ifdef GPU_STEREO_CAMERA_BUFFER +#ifdef GPU_STEREO_DRAWCALL_DOUBLED + glVertexAttribI1i(14, side); +#endif +#else + _transform.bindCurrentCamera(side); +#endif + +} +#else void GLBackend::setupStereoSide(int side) { ivec4 vp = _transform._viewport; vp.z /= 2; @@ -332,6 +358,7 @@ void GLBackend::setupStereoSide(int side) { _transform.bindCurrentCamera(side); } +#endif void GLBackend::do_resetStages(const Batch& batch, size_t paramOffset) { resetStages(); @@ -384,8 +411,11 @@ void GLBackend::do_popProfileRange(const Batch& batch, size_t paramOffset) { // term strategy is to get rid of any GL calls in favor of the HIFI GPU API // As long as we don;t use several versions of shaders we can avoid this more complex code path -// #define GET_UNIFORM_LOCATION(shaderUniformLoc) _pipeline._programShader->getUniformLocation(shaderUniformLoc, isStereo()); +#ifdef GPU_STEREO_CAMERA_BUFFER +#define GET_UNIFORM_LOCATION(shaderUniformLoc) _pipeline._programShader->getUniformLocation(shaderUniformLoc, isStereo()) +#else #define GET_UNIFORM_LOCATION(shaderUniformLoc) shaderUniformLoc +#endif void GLBackend::do_glUniform1i(const Batch& batch, size_t paramOffset) { if (_pipeline._program == 0) { diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.h b/libraries/gpu-gl/src/gpu/gl/GLBackend.h index f99d34393c..bc96cf8bb6 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.h +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.h @@ -29,6 +29,28 @@ #include "GLShared.h" + +// Pick one from the 3: THis version is the most efficient as of now +#define GPU_STEREO_TECHNIQUE_DOUBLED_SIMPLE +//#define GPU_STEREO_TECHNIQUE_DOUBLED_SMARTER +//#define GPU_STEREO_TECHNIQUE_INSTANCED + + +// Let these be configured by the one define picked above +#ifdef GPU_STEREO_TECHNIQUE_DOUBLED_SIMPLE +#define GPU_STEREO_DRAWCALL_DOUBLED +#endif + +#ifdef GPU_STEREO_TECHNIQUE_DOUBLED_SMARTER +#define GPU_STEREO_DRAWCALL_DOUBLED +#define GPU_STEREO_CAMERA_BUFFER +#endif + +#ifdef GPU_STEREO_TECHNIQUE_INSTANCED +#define GPU_STEREO_DRAWCALL_INSTANCED +#define GPU_STEREO_CAMERA_BUFFER +#endif + namespace gpu { namespace gl { class GLBackend : public Backend, public std::enable_shared_from_this { @@ -202,7 +224,10 @@ protected: void renderPassTransfer(const Batch& batch); void renderPassDraw(const Batch& batch); + +#ifdef GPU_STEREO_DRAWCALL_DOUBLED void setupStereoSide(int side); +#endif virtual void initInput() final; virtual void killInput() final; @@ -260,7 +285,19 @@ protected: }; struct TransformStageState { +#ifdef GPU_STEREO_CAMERA_BUFFER + struct Cameras { + TransformCamera _cams[2]; + + Cameras() {}; + Cameras(const TransformCamera& cam) { memcpy(_cams, &cam, sizeof(TransformCamera)); }; + Cameras(const TransformCamera& camL, const TransformCamera& camR) { memcpy(_cams, &camL, sizeof(TransformCamera)); memcpy(_cams + 1, &camR, sizeof(TransformCamera)); }; + }; + + using CameraBufferElement = Cameras; +#else using CameraBufferElement = TransformCamera; +#endif using TransformCameras = std::vector; TransformCamera _camera; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendInput.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendInput.cpp index 9256a42b80..618988a217 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendInput.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendInput.cpp @@ -187,7 +187,11 @@ void GLBackend::updateInput() { glVertexAttribFormat(slot + locNum, count, type, isNormalized, offset + locNum * perLocationSize); glVertexAttribBinding(slot + locNum, attrib._channel); } +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glVertexBindingDivisor(attrib._channel, attrib._frequency * (isStereo() ? 2 : 1)); +#else glVertexBindingDivisor(attrib._channel, attrib._frequency); +#endif } (void)CHECK_GL_ERROR(); } @@ -306,7 +310,11 @@ void GLBackend::updateInput() { for (size_t locNum = 0; locNum < locationCount; ++locNum) { glVertexAttribPointer(slot + (GLuint)locNum, count, type, isNormalized, stride, reinterpret_cast(pointer + perLocationStride * (GLuint)locNum)); +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glVertexAttribDivisor(slot + (GLuint)locNum, attrib._frequency * (isStereo() ? 2 : 1)); +#else glVertexAttribDivisor(slot + (GLuint)locNum, attrib._frequency); +#endif } // TODO: Support properly the IAttrib version diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp index ed0b9607e6..aa23b3a4dc 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp @@ -48,7 +48,13 @@ void GLBackend::do_setPipeline(const Batch& batch, size_t paramOffset) { // check the program cache // pick the program version + // check the program cache + // pick the program version +#ifdef GPU_STEREO_CAMERA_BUFFER + GLuint glprogram = pipelineObject->_program->getProgram(isStereo()); +#else GLuint glprogram = pipelineObject->_program->getProgram(); +#endif if (_pipeline._program != glprogram) { _pipeline._program = glprogram; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp index 7f821078cd..eb53f5d45b 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp @@ -31,10 +31,25 @@ void GLBackend::do_setProjectionTransform(const Batch& batch, size_t paramOffset void GLBackend::do_setViewportTransform(const Batch& batch, size_t paramOffset) { memcpy(&_transform._viewport, batch.readData(batch._params[paramOffset]._uint), sizeof(Vec4i)); +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + { + ivec4& vp = _transform._viewport; + glViewport(vp.x, vp.y, vp.z, vp.w); + + // Where we assign the GL viewport + if (_stereo._enable) { + vp.z /= 2; + if (_stereo._pass) { + vp.x += vp.z; + } + } + } +#else if (!_inRenderTransferPass && !isStereo()) { ivec4& vp = _transform._viewport; glViewport(vp.x, vp.y, vp.z, vp.w); } +#endif // The Viewport is tagged invalid because the CameraTransformUBO is not up to date and will need update on next drawcall _transform._invalidViewport = true; @@ -100,13 +115,21 @@ void GLBackend::TransformStageState::preUpdate(size_t commandIndex, const Stereo if (_invalidView || _invalidProj || _invalidViewport) { size_t offset = _cameraUboSize * _cameras.size(); _cameraOffsets.push_back(TransformStageState::Pair(commandIndex, offset)); - if (stereo._enable) { - _cameras.push_back((_camera.getEyeCamera(0, stereo, _view))); - _cameras.push_back((_camera.getEyeCamera(1, stereo, _view))); - } else { - _cameras.push_back((_camera.recomputeDerived(_view))); - } + if (stereo._enable) { +#ifdef GPU_STEREO_CAMERA_BUFFER + _cameras.push_back(CameraBufferElement(_camera.getEyeCamera(0, stereo, _view), _camera.getEyeCamera(1, stereo, _view))); +#else + _cameras.push_back((_camera.getEyeCamera(0, stereo, _view))); + _cameras.push_back((_camera.getEyeCamera(1, stereo, _view))); +#endif + } else { +#ifdef GPU_STEREO_CAMERA_BUFFER + _cameras.push_back(CameraBufferElement(_camera.recomputeDerived(_view))); +#else + _cameras.push_back((_camera.recomputeDerived(_view))); +#endif + } } // Flags are clean @@ -122,9 +145,13 @@ void GLBackend::TransformStageState::update(size_t commandIndex, const StereoSta } if (offset != INVALID_OFFSET) { +#ifdef GPU_STEREO_CAMERA_BUFFER + bindCurrentCamera(0); +#else if (!stereo._enable) { bindCurrentCamera(0); } +#endif } (void)CHECK_GL_ERROR(); } @@ -148,7 +175,11 @@ void GLBackend::updateTransform(const Batch& batch) { glBindBuffer(GL_ARRAY_BUFFER, _transform._drawCallInfoBuffer); glVertexAttribIPointer(gpu::Stream::DRAW_CALL_INFO, 2, GL_UNSIGNED_SHORT, 0, _transform._drawCallInfoOffsets[batch._currentNamedCall]); +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glVertexAttribDivisor(gpu::Stream::DRAW_CALL_INFO, (isStereo() ? 2 : 1)); +#else glVertexAttribDivisor(gpu::Stream::DRAW_CALL_INFO, 1); +#endif } (void)CHECK_GL_ERROR(); diff --git a/libraries/gpu-gl/src/gpu/gl/GLShader.cpp b/libraries/gpu-gl/src/gpu/gl/GLShader.cpp index f8d493c25b..9903d0e3b3 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLShader.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLShader.cpp @@ -54,9 +54,24 @@ static const std::array DOMAIN_DEFINES { { "#define GPU_GEOMETRY_SHADER", } }; +// Stereo specific defines +static const std::string stereoVersion { +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + "#define GPU_TRANSFORM_IS_STEREO\n#define GPU_TRANSFORM_STEREO_CAMERA\n#define GPU_TRANSFORM_STEREO_CAMERA_INSTANCED\n#define GPU_TRANSFORM_STEREO_SPLIT_SCREEN" +#endif +#ifdef GPU_STEREO_DRAWCALL_DOUBLED +#ifdef GPU_STEREO_CAMERA_BUFFER + "#define GPU_TRANSFORM_IS_STEREO\n#define GPU_TRANSFORM_STEREO_CAMERA\n#define GPU_TRANSFORM_STEREO_CAMERA_ATTRIBUTED" +#else + "#define GPU_TRANSFORM_IS_STEREO" +#endif +#endif +}; + // Versions specific of the shader static const std::array VERSION_DEFINES { { - "" + "", + stereoVersion } }; GLShader* compileBackendShader(GLBackend& backend, const Shader& shader) { diff --git a/libraries/gpu-gl/src/gpu/gl/GLShader.h b/libraries/gpu-gl/src/gpu/gl/GLShader.h index e75e96cf16..3c8a0f9b63 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLShader.h +++ b/libraries/gpu-gl/src/gpu/gl/GLShader.h @@ -19,6 +19,8 @@ public: enum Version { Mono = 0, + Stereo, + NumVersions }; diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45Backend.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45Backend.cpp index bae6326e8f..d7dde8b7d6 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45Backend.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45Backend.cpp @@ -25,10 +25,14 @@ void GL45Backend::do_draw(const Batch& batch, size_t paramOffset) { uint32 startVertex = batch._params[paramOffset + 0]._uint; if (isStereo()) { +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glDrawArraysInstanced(mode, startVertex, numVertices, 2); +#else setupStereoSide(0); glDrawArrays(mode, startVertex, numVertices); setupStereoSide(1); glDrawArrays(mode, startVertex, numVertices); +#endif _stats._DSNumTriangles += 2 * numVertices / 3; _stats._DSNumDrawcalls += 2; @@ -55,11 +59,14 @@ void GL45Backend::do_drawIndexed(const Batch& batch, size_t paramOffset) { GLvoid* indexBufferByteOffset = reinterpret_cast(startIndex * typeByteSize + _input._indexBufferOffset); if (isStereo()) { +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glDrawElementsInstanced(mode, numIndices, glType, indexBufferByteOffset, 2); +#else setupStereoSide(0); glDrawElements(mode, numIndices, glType, indexBufferByteOffset); setupStereoSide(1); glDrawElements(mode, numIndices, glType, indexBufferByteOffset); - +#endif _stats._DSNumTriangles += 2 * numIndices / 3; _stats._DSNumDrawcalls += 2; } else { @@ -83,10 +90,14 @@ void GL45Backend::do_drawInstanced(const Batch& batch, size_t paramOffset) { if (isStereo()) { GLint trueNumInstances = 2 * numInstances; +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glDrawArraysInstanced(mode, startVertex, numVertices, trueNumInstances); +#else setupStereoSide(0); glDrawArraysInstanced(mode, startVertex, numVertices, numInstances); setupStereoSide(1); glDrawArraysInstanced(mode, startVertex, numVertices, numInstances); +#endif _stats._DSNumTriangles += (trueNumInstances * numVertices) / 3; _stats._DSNumDrawcalls += trueNumInstances; @@ -112,10 +123,15 @@ void GL45Backend::do_drawIndexedInstanced(const Batch& batch, size_t paramOffset if (isStereo()) { GLint trueNumInstances = 2 * numInstances; + +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, trueNumInstances, 0, startInstance); +#else setupStereoSide(0); glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, numInstances, 0, startInstance); setupStereoSide(1); glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, numInstances, 0, startInstance); +#endif _stats._DSNumTriangles += (trueNumInstances * numIndices) / 3; _stats._DSNumDrawcalls += trueNumInstances; } else { diff --git a/libraries/gpu/src/gpu/Transform.slh b/libraries/gpu/src/gpu/Transform.slh index 12a1cd10f1..ba006d5c73 100644 --- a/libraries/gpu/src/gpu/Transform.slh +++ b/libraries/gpu/src/gpu/Transform.slh @@ -18,30 +18,60 @@ struct TransformCamera { mat4 _projection; mat4 _projectionInverse; vec4 _viewport; - vec4 _stereoInfo; }; layout(std140) uniform transformCameraBuffer { +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_CAMERA + TransformCamera _camera[2]; +#else TransformCamera _camera; +#endif +#else + TransformCamera _camera; +#endif }; +#ifdef VERTEX_SHADER +#ifdef GPU_TRANSFORM_IS_STEREO + +#ifdef GPU_TRANSFORM_STEREO_CAMERA +#ifdef GPU_TRANSFORM_STEREO_CAMERA_ATTRIBUTED +layout(location=14) in int _inStereoSide; +#endif + +flat out int _stereoSide; +#endif + +#endif + +#endif + +#ifdef PIXEL_SHADER +#ifdef GPU_TRANSFORM_STEREO_CAMERA +flat in int _stereoSide; +#endif +#endif + TransformCamera getTransformCamera() { +#ifdef GPU_TRANSFORM_IS_STEREO + #ifdef GPU_TRANSFORM_STEREO_CAMERA + #ifdef VERTEX_SHADER + #ifdef GPU_TRANSFORM_STEREO_CAMERA_ATTRIBUTED + _stereoSide = _inStereoSide; + #endif + #ifdef GPU_TRANSFORM_STEREO_CAMERA_INSTANCED + _stereoSide = gl_InstanceID % 2; + #endif + #endif + return _camera[_stereoSide]; + #else + return _camera; + #endif +#else return _camera; +#endif } - -vec3 getEyeWorldPos() { - return _camera._viewInverse[3].xyz; -} - - -bool cam_isStereo() { - return _camera._stereoInfo.x > 0.0; -} - -float cam_getStereoSide() { - return _camera._stereoInfo.y; -} - <@endfunc@> @@ -92,6 +122,25 @@ TransformObject getTransformObject() { <$viewport$> = <$cameraTransform$>._viewport; <@endfunc@> +<@func transformStereoClipsSpace(cameraTransform, clipPos)@> + { +#ifdef GPU_TRANSFORM_IS_STEREO + +#ifdef GPU_TRANSFORM_STEREO_SPLIT_SCREEN + vec4 eyeClipEdge[2]= vec4[2](vec4(-1,0,0,1), vec4(1,0,0,1)); + vec2 eyeOffsetScale = vec2(-0.5, +0.5); + uint eyeIndex = _stereoSide; + gl_ClipDistance[0] = dot(<$clipPos$>, eyeClipEdge[eyeIndex]); + float newClipPosX = <$clipPos$>.x * 0.5 + eyeOffsetScale[eyeIndex] * <$clipPos$>.w; + <$clipPos$>.x = newClipPosX; +#endif + +#else +#endif + } +<@endfunc@> + + <@func transformModelToEyeWorldAlignedPos(cameraTransform, objectTransform, modelPos, eyeWorldAlignedPos)@> { // _transformModelToEyeWorldAlignedPos @@ -108,6 +157,8 @@ TransformObject getTransformObject() { <$transformModelToEyeWorldAlignedPos($cameraTransform$, $objectTransform$, $modelPos$, eyeWAPos)$> <$clipPos$> = <$cameraTransform$>._projectionViewUntranslated * eyeWAPos; + + <$transformStereoClipsSpace($cameraTransform$, $clipPos$)$> } <@endfunc@> @@ -117,6 +168,8 @@ TransformObject getTransformObject() { <$transformModelToEyeWorldAlignedPos($cameraTransform$, $objectTransform$, $modelPos$, eyeWAPos)$> <$clipPos$> = <$cameraTransform$>._projectionViewUntranslated * eyeWAPos; <$eyePos$> = vec4((<$cameraTransform$>._view * vec4(eyeWAPos.xyz, 0.0)).xyz, 1.0); + + <$transformStereoClipsSpace($cameraTransform$, $clipPos$)$> } <@endfunc@> @@ -134,15 +187,6 @@ TransformObject getTransformObject() { } <@endfunc@> -<@func transformModelToWorldDir(cameraTransform, objectTransform, modelDir, worldDir)@> - { // transformModelToEyeDir - vec3 mr0 = <$objectTransform$>._modelInverse[0].xyz; - vec3 mr1 = <$objectTransform$>._modelInverse[1].xyz; - vec3 mr2 = <$objectTransform$>._modelInverse[2].xyz; - - <$worldDir$> = vec3(dot(mr0, <$modelDir$>), dot(mr1, <$modelDir$>), dot(mr2, <$modelDir$>)); - } -<@endfunc@> <@func transformModelToEyeDir(cameraTransform, objectTransform, modelDir, eyeDir)@> { // transformModelToEyeDir @@ -173,6 +217,8 @@ TransformObject getTransformObject() { <@func transformEyeToClipPos(cameraTransform, eyePos, clipPos)@> { // transformEyeToClipPos <$clipPos$> = <$cameraTransform$>._projection * vec4(<$eyePos$>.xyz, 1.0); + + <$transformStereoClipsSpace($cameraTransform$, $clipPos$)$> } <@endfunc@> From 9d2043cc3cc96d13933dc2ec29c53d296afbcfe1 Mon Sep 17 00:00:00 2001 From: samcake Date: Thu, 27 Oct 2016 17:49:10 -0700 Subject: [PATCH 02/19] Porting and potentially fixing the stereo drawcall, still not perfrect ork in progress --- libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 9 +---- libraries/gpu-gl/src/gpu/gl/GLBackend.h | 4 +-- .../gpu-gl/src/gpu/gl/GLBackendPipeline.cpp | 2 +- libraries/gpu-gl/src/gpu/gl41/GL41Backend.cpp | 23 ++++++++++--- libraries/gpu/src/gpu/Transform.slh | 33 ++++++++++++++++--- 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index 7f0a33aef4..d66d9ad172 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -351,13 +351,6 @@ void GLBackend::setupStereoSide(int side) { } #else -void GLBackend::setupStereoSide(int side) { - ivec4 vp = _transform._viewport; - vp.z /= 2; - glViewport(vp.x + side * vp.z, vp.y, vp.z, vp.w); - - _transform.bindCurrentCamera(side); -} #endif void GLBackend::do_resetStages(const Batch& batch, size_t paramOffset) { @@ -412,7 +405,7 @@ void GLBackend::do_popProfileRange(const Batch& batch, size_t paramOffset) { // As long as we don;t use several versions of shaders we can avoid this more complex code path #ifdef GPU_STEREO_CAMERA_BUFFER -#define GET_UNIFORM_LOCATION(shaderUniformLoc) _pipeline._programShader->getUniformLocation(shaderUniformLoc, isStereo()) +#define GET_UNIFORM_LOCATION(shaderUniformLoc) _pipeline._programShader->getUniformLocation(shaderUniformLoc, (GLShader::Version) isStereo()) #else #define GET_UNIFORM_LOCATION(shaderUniformLoc) shaderUniformLoc #endif diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.h b/libraries/gpu-gl/src/gpu/gl/GLBackend.h index bc96cf8bb6..6fca8cc5a7 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.h +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.h @@ -31,9 +31,9 @@ // Pick one from the 3: THis version is the most efficient as of now -#define GPU_STEREO_TECHNIQUE_DOUBLED_SIMPLE +//#define GPU_STEREO_TECHNIQUE_DOUBLED_SIMPLE //#define GPU_STEREO_TECHNIQUE_DOUBLED_SMARTER -//#define GPU_STEREO_TECHNIQUE_INSTANCED +#define GPU_STEREO_TECHNIQUE_INSTANCED // Let these be configured by the one define picked above diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp index aa23b3a4dc..81d38c3339 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp @@ -51,7 +51,7 @@ void GLBackend::do_setPipeline(const Batch& batch, size_t paramOffset) { // check the program cache // pick the program version #ifdef GPU_STEREO_CAMERA_BUFFER - GLuint glprogram = pipelineObject->_program->getProgram(isStereo()); + GLuint glprogram = pipelineObject->_program->getProgram((GLShader::Version) isStereo()); #else GLuint glprogram = pipelineObject->_program->getProgram(); #endif diff --git a/libraries/gpu-gl/src/gpu/gl41/GL41Backend.cpp b/libraries/gpu-gl/src/gpu/gl41/GL41Backend.cpp index 6c2b2f434e..a87d0ad6b8 100644 --- a/libraries/gpu-gl/src/gpu/gl41/GL41Backend.cpp +++ b/libraries/gpu-gl/src/gpu/gl41/GL41Backend.cpp @@ -25,11 +25,14 @@ void GL41Backend::do_draw(const Batch& batch, size_t paramOffset) { uint32 startVertex = batch._params[paramOffset + 0]._uint; if (isStereo()) { +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glDrawArraysInstanced(mode, startVertex, numVertices, 2); +#else setupStereoSide(0); glDrawArrays(mode, startVertex, numVertices); setupStereoSide(1); glDrawArrays(mode, startVertex, numVertices); - +#endif _stats._DSNumTriangles += 2 * numVertices / 3; _stats._DSNumDrawcalls += 2; @@ -55,11 +58,14 @@ void GL41Backend::do_drawIndexed(const Batch& batch, size_t paramOffset) { GLvoid* indexBufferByteOffset = reinterpret_cast(startIndex * typeByteSize + _input._indexBufferOffset); if (isStereo()) { +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glDrawElementsInstanced(mode, numIndices, glType, indexBufferByteOffset, 2); +#else setupStereoSide(0); glDrawElements(mode, numIndices, glType, indexBufferByteOffset); setupStereoSide(1); glDrawElements(mode, numIndices, glType, indexBufferByteOffset); - +#endif _stats._DSNumTriangles += 2 * numIndices / 3; _stats._DSNumDrawcalls += 2; } else { @@ -83,11 +89,14 @@ void GL41Backend::do_drawInstanced(const Batch& batch, size_t paramOffset) { if (isStereo()) { GLint trueNumInstances = 2 * numInstances; +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glDrawArraysInstanced(mode, startVertex, numVertices, trueNumInstances); +#else setupStereoSide(0); - glDrawArraysInstancedARB(mode, startVertex, numVertices, numInstances); + glDrawArraysInstanced(mode, startVertex, numVertices, numInstances); setupStereoSide(1); - glDrawArraysInstancedARB(mode, startVertex, numVertices, numInstances); - + glDrawArraysInstanced(mode, startVertex, numVertices, numInstances); +#endif _stats._DSNumTriangles += (trueNumInstances * numVertices) / 3; _stats._DSNumDrawcalls += trueNumInstances; } else { @@ -124,10 +133,14 @@ void GL41Backend::do_drawIndexedInstanced(const Batch& batch, size_t paramOffset if (isStereo()) { GLint trueNumInstances = 2 * numInstances; +#ifdef GPU_STEREO_DRAWCALL_INSTANCED + glbackend_glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, trueNumInstances, 0, startInstance); +#else setupStereoSide(0); glbackend_glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, numInstances, 0, startInstance); setupStereoSide(1); glbackend_glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, numInstances, 0, startInstance); +#endif _stats._DSNumTriangles += (trueNumInstances * numIndices) / 3; _stats._DSNumDrawcalls += trueNumInstances; diff --git a/libraries/gpu/src/gpu/Transform.slh b/libraries/gpu/src/gpu/Transform.slh index ba006d5c73..6b216dafad 100644 --- a/libraries/gpu/src/gpu/Transform.slh +++ b/libraries/gpu/src/gpu/Transform.slh @@ -18,6 +18,7 @@ struct TransformCamera { mat4 _projection; mat4 _projectionInverse; vec4 _viewport; + vec4 _stereoInfo; }; layout(std140) uniform transformCameraBuffer { @@ -32,7 +33,7 @@ layout(std140) uniform transformCameraBuffer { #endif }; -#ifdef VERTEX_SHADER +#ifdef GPU_VERTEX_SHADER #ifdef GPU_TRANSFORM_IS_STEREO #ifdef GPU_TRANSFORM_STEREO_CAMERA @@ -47,7 +48,7 @@ flat out int _stereoSide; #endif -#ifdef PIXEL_SHADER +#ifdef GPU_PIXEL_SHADER #ifdef GPU_TRANSFORM_STEREO_CAMERA flat in int _stereoSide; #endif @@ -56,7 +57,7 @@ flat in int _stereoSide; TransformCamera getTransformCamera() { #ifdef GPU_TRANSFORM_IS_STEREO #ifdef GPU_TRANSFORM_STEREO_CAMERA - #ifdef VERTEX_SHADER + #ifdef GPU_VERTEX_SHADER #ifdef GPU_TRANSFORM_STEREO_CAMERA_ATTRIBUTED _stereoSide = _inStereoSide; #endif @@ -72,8 +73,32 @@ TransformCamera getTransformCamera() { return _camera; #endif } -<@endfunc@> +vec3 getEyeWorldPos() { + return getTransformCamera()._viewInverse[3].xyz; +} + +bool cam_isStereo() { +#ifdef GPU_TRANSFORM_IS_STEREO + return true; +#else + return _camera._stereoInfo.x > 0.0; +#endif +} + +float cam_getStereoSide() { +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_CAMERA + return float(_stereoSide); +#else + return _camera._stereoInfo.y; +#endif +#else + return _camera._stereoInfo.y; +#endif +} + +<@endfunc@> <@func declareStandardObjectTransform()@> struct TransformObject { From d66d5af68820d58f65a320ede438914322082c26 Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 28 Oct 2016 10:47:06 -0700 Subject: [PATCH 03/19] Enabling the uniform mappings --- libraries/gpu-gl/src/gpu/gl/GLShader.cpp | 3 ++- libraries/gpu-gl/src/gpu/gl/GLShader.h | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLShader.cpp b/libraries/gpu-gl/src/gpu/gl/GLShader.cpp index 9903d0e3b3..23439a640a 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLShader.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLShader.cpp @@ -196,7 +196,8 @@ bool GLShader::makeProgram(GLBackend& backend, Shader& shader, const Shader::Bin // Define the public slots only from the default version if (version == 0) { shader.defineSlots(uniforms, buffers, textures, samplers, inputs, outputs); - } else { + } // else + { GLShader::UniformMapping mapping; for (auto srcUniform : shader.getUniforms()) { mapping[srcUniform._location] = uniforms.findLocation(srcUniform._name); diff --git a/libraries/gpu-gl/src/gpu/gl/GLShader.h b/libraries/gpu-gl/src/gpu/gl/GLShader.h index 3c8a0f9b63..40dd0b7be9 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLShader.h +++ b/libraries/gpu-gl/src/gpu/gl/GLShader.h @@ -42,8 +42,8 @@ public: GLint getUniformLocation(GLint srcLoc, Version version = Mono) { // THIS will be used in the future PR as we grow the number of versions - // return _uniformMappings[version][srcLoc]; - return srcLoc; + return _uniformMappings[version][srcLoc]; + // return srcLoc; } const std::weak_ptr _backend; From 9e91926426b3013489780cf16834889146595bc5 Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 28 Oct 2016 16:22:46 -0700 Subject: [PATCH 04/19] fixing most of the rendering in 3D --- libraries/gpu/src/gpu/Transform.slh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/gpu/src/gpu/Transform.slh b/libraries/gpu/src/gpu/Transform.slh index 6b216dafad..5ed14875cf 100644 --- a/libraries/gpu/src/gpu/Transform.slh +++ b/libraries/gpu/src/gpu/Transform.slh @@ -212,6 +212,14 @@ TransformObject getTransformObject() { } <@endfunc@> +<@func transformModelToWorldDir(cameraTransform, objectTransform, modelDir, worldDir)@> + { // transformModelToEyeDir + vec3 mr0 = <$objectTransform$>._modelInverse[0].xyz; + vec3 mr1 = <$objectTransform$>._modelInverse[1].xyz; + vec3 mr2 = <$objectTransform$>._modelInverse[2].xyz; + <$worldDir$> = vec3(dot(mr0, <$modelDir$>), dot(mr1, <$modelDir$>), dot(mr2, <$modelDir$>)); + } +<@endfunc@> <@func transformModelToEyeDir(cameraTransform, objectTransform, modelDir, eyeDir)@> { // transformModelToEyeDir From 9adbb42a6ced55fd4a27369f02f370a1c5e6d40d Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 28 Oct 2016 18:12:39 -0700 Subject: [PATCH 05/19] Fixing the skybox, still issues with the lights --- libraries/gpu/src/gpu/Transform.slh | 4 ++-- libraries/model/src/model/skybox.slv | 2 ++ libraries/render-utils/src/deferred_light_limited.slv | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/gpu/src/gpu/Transform.slh b/libraries/gpu/src/gpu/Transform.slh index 5ed14875cf..db7808e781 100644 --- a/libraries/gpu/src/gpu/Transform.slh +++ b/libraries/gpu/src/gpu/Transform.slh @@ -80,7 +80,7 @@ vec3 getEyeWorldPos() { bool cam_isStereo() { #ifdef GPU_TRANSFORM_IS_STEREO - return true; + return getTransformCamera()._stereoInfo.x > 0.0; #else return _camera._stereoInfo.x > 0.0; #endif @@ -89,7 +89,7 @@ bool cam_isStereo() { float cam_getStereoSide() { #ifdef GPU_TRANSFORM_IS_STEREO #ifdef GPU_TRANSFORM_STEREO_CAMERA - return float(_stereoSide); + return getTransformCamera()._stereoInfo.y; #else return _camera._stereoInfo.y; #endif diff --git a/libraries/model/src/model/skybox.slv b/libraries/model/src/model/skybox.slv index 5df1aa0a4a..6fd9532fa1 100755 --- a/libraries/model/src/model/skybox.slv +++ b/libraries/model/src/model/skybox.slv @@ -36,4 +36,6 @@ void main(void) { // Position is supposed to come in clip space gl_Position = vec4(inPosition.xy, 0.0, 1.0); + + <$transformStereoClipsSpace(cam, gl_Position)$> } diff --git a/libraries/render-utils/src/deferred_light_limited.slv b/libraries/render-utils/src/deferred_light_limited.slv index 0525509f0b..42ac1d6dfb 100644 --- a/libraries/render-utils/src/deferred_light_limited.slv +++ b/libraries/render-utils/src/deferred_light_limited.slv @@ -24,7 +24,7 @@ out vec4 _texCoord0; void main(void) { if (sphereParam.w != 0.0) { - + // standard transform TransformCamera cam = getTransformCamera(); TransformObject obj = getTransformObject(); From 37b3c96131ea81e52a4f2a8957e34afb43e9ba36 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 31 Oct 2016 17:40:34 -0700 Subject: [PATCH 06/19] fixing the lighting problem in stereo --- libraries/gpu-gl/src/gpu/gl/GLBackend.h | 3 ++- .../src/deferred_light_limited.slv | 21 +++++++++++++++++++ .../render-utils/src/deferred_light_spot.slv | 19 +++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.h b/libraries/gpu-gl/src/gpu/gl/GLBackend.h index 6fca8cc5a7..1011a7f5a2 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.h +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.h @@ -30,7 +30,8 @@ #include "GLShared.h" -// Pick one from the 3: THis version is the most efficient as of now +// Different versions for the stereo drawcall +// Current preferred is "instanced" which draw the shape twice but instanced and rely on clipping plane to draw left/right side only //#define GPU_STEREO_TECHNIQUE_DOUBLED_SIMPLE //#define GPU_STEREO_TECHNIQUE_DOUBLED_SMARTER #define GPU_STEREO_TECHNIQUE_INSTANCED diff --git a/libraries/render-utils/src/deferred_light_limited.slv b/libraries/render-utils/src/deferred_light_limited.slv index 42ac1d6dfb..36e281ab5b 100644 --- a/libraries/render-utils/src/deferred_light_limited.slv +++ b/libraries/render-utils/src/deferred_light_limited.slv @@ -33,9 +33,14 @@ void main(void) { vec4 projected = gl_Position / gl_Position.w; projected.xy = (projected.xy + 1.0) * 0.5; +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_SPLIT_SCREEN +#else if (cam_isStereo()) { projected.x = 0.5 * (projected.x + cam_getStereoSide()); } +#endif +#endif _texCoord0 = vec4(projected.xy, 0.0, 1.0) * gl_Position.w; } else { const float depth = -1.0; //Draw at near plane @@ -47,11 +52,27 @@ void main(void) { ); vec4 pos = UNIT_QUAD[gl_VertexID]; + +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_SPLIT_SCREEN + TransformCamera cam = getTransformCamera(); + <$transformStereoClipsSpace(cam, pos)$> +#endif +#endif + _texCoord0 = vec4((pos.xy + 1.0) * 0.5, 0.0, 1.0); +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_SPLIT_SCREEN +#else if (cam_isStereo()) { _texCoord0.x = 0.5 * (_texCoord0.x + cam_getStereoSide()); } +#endif +#endif + gl_Position = pos; + } + } diff --git a/libraries/render-utils/src/deferred_light_spot.slv b/libraries/render-utils/src/deferred_light_spot.slv index 4a1a0472aa..935d756b28 100755 --- a/libraries/render-utils/src/deferred_light_spot.slv +++ b/libraries/render-utils/src/deferred_light_spot.slv @@ -46,9 +46,14 @@ void main(void) { vec4 projected = gl_Position / gl_Position.w; projected.xy = (projected.xy + 1.0) * 0.5; +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_SPLIT_SCREEN +#else if (cam_isStereo()) { projected.x = 0.5 * (projected.x + cam_getStereoSide()); } +#endif +#endif _texCoord0 = vec4(projected.xy, 0.0, 1.0) * gl_Position.w; } else { const float depth = -1.0; //Draw at near plane @@ -60,10 +65,24 @@ void main(void) { ); vec4 pos = UNIT_QUAD[gl_VertexID]; +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_SPLIT_SCREEN + TransformCamera cam = getTransformCamera(); + <$transformStereoClipsSpace(cam, pos)$> +#endif +#endif + _texCoord0 = vec4((pos.xy + 1.0) * 0.5, 0.0, 1.0); + +#ifdef GPU_TRANSFORM_IS_STEREO +#ifdef GPU_TRANSFORM_STEREO_SPLIT_SCREEN +#else if (cam_isStereo()) { _texCoord0.x = 0.5 * (_texCoord0.x + cam_getStereoSide()); } +#endif +#endif + gl_Position = pos; } } From aef39ce6fa03147543af41e939b7eab37deccc51 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 10 Nov 2016 16:06:53 -0800 Subject: [PATCH 07/19] block until follow-on includes are finished but still avoid multiple evaluation of included urls --- libraries/script-engine/src/ScriptEngine.cpp | 25 +++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 776c7cfec6..c6a9874c38 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1187,20 +1187,15 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac thisURL = resolvePath(file); } - if (!_includedURLs.contains(thisURL)) { - if (!isStandardLibrary && !currentSandboxURL.isEmpty() && (thisURL.scheme() == "file") && - (currentSandboxURL.scheme() != "file" || - !thisURL.toString(strippingFlags).startsWith(currentSandboxURL.toString(strippingFlags), getSensitivity()))) { - qCWarning(scriptengine) << "Script.include() ignoring file path" - << thisURL << "outside of original entity script" << currentSandboxURL; - } else { - // We could also check here for CORS, but we don't yet. - // It turns out that QUrl.resolve will not change hosts and copy authority, so we don't need to check that here. - urls.append(thisURL); - _includedURLs << thisURL; - } + if (!isStandardLibrary && !currentSandboxURL.isEmpty() && (thisURL.scheme() == "file") && + (currentSandboxURL.scheme() != "file" || + !thisURL.toString(strippingFlags).startsWith(currentSandboxURL.toString(strippingFlags), getSensitivity()))) { + qCWarning(scriptengine) << "Script.include() ignoring file path" + << thisURL << "outside of original entity script" << currentSandboxURL; } else { - qCDebug(scriptengine) << "Script.include() ignoring previously included url:" << thisURL; + // We could also check here for CORS, but we don't yet. + // It turns out that QUrl.resolve will not change hosts and copy authority, so we don't need to check that here. + urls.append(thisURL); } } @@ -1219,13 +1214,15 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac QString contents = data[url]; if (contents.isNull()) { qCDebug(scriptengine) << "Error loading file: " << url << "line:" << __LINE__; - } else { + } else if (!_includedURLs.contains(url)) { + _includedURLs << url; // Set the parent url so that path resolution will be relative // to this script's url during its initial evaluation _parentURL = url.toString(); auto operation = [&]() { evaluate(contents, url.toString()); }; + doWithEnvironment(capturedEntityIdentifier, capturedSandboxURL, operation); } } From 576eed9941cfae3bc03ee82cff50aa83c7758fde Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 10 Nov 2016 17:12:06 -0800 Subject: [PATCH 08/19] use a mutex to avoid a smaller race --- libraries/script-engine/src/ScriptEngine.cpp | 21 +++++++++++--------- libraries/script-engine/src/ScriptEngine.h | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index c6a9874c38..1569a1b9f1 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1214,16 +1214,19 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac QString contents = data[url]; if (contents.isNull()) { qCDebug(scriptengine) << "Error loading file: " << url << "line:" << __LINE__; - } else if (!_includedURLs.contains(url)) { - _includedURLs << url; - // Set the parent url so that path resolution will be relative - // to this script's url during its initial evaluation - _parentURL = url.toString(); - auto operation = [&]() { - evaluate(contents, url.toString()); - }; + } else { + std::lock_guard lock(_lock); + if (!_includedURLs.contains(url)) { + _includedURLs << url; + // Set the parent url so that path resolution will be relative + // to this script's url during its initial evaluation + _parentURL = url.toString(); + auto operation = [&]() { + evaluate(contents, url.toString()); + }; - doWithEnvironment(capturedEntityIdentifier, capturedSandboxURL, operation); + doWithEnvironment(capturedEntityIdentifier, capturedSandboxURL, operation); + } } } _parentURL = parentURL; diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 01088660ff..2b2cb3c81a 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -245,6 +245,7 @@ protected: std::function _emitScriptUpdates{ [](){ return true; } }; + std::recursive_mutex _lock; }; #endif // hifi_ScriptEngine_h From 5133ce054807019456403816d01dec090dec0507 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sat, 12 Nov 2016 10:50:21 -0800 Subject: [PATCH 09/19] print a debug message when skipping evaluation of a previously included url --- libraries/script-engine/src/ScriptEngine.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 1569a1b9f1..00c48cc633 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1226,6 +1226,8 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac }; doWithEnvironment(capturedEntityIdentifier, capturedSandboxURL, operation); + } else { + qCDebug(scriptengine) << "Script.include() skipping evaluation of previously included url:" << url; } } } From dadcaa99598345630acb9f12fa6ec4e60f35b390 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 14 Nov 2016 10:12:36 -0800 Subject: [PATCH 10/19] don't send audio/avatar data for ignoree to ignored node --- assignment-client/src/audio/AudioMixer.cpp | 7 +++++-- assignment-client/src/avatars/AvatarMixer.cpp | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 90c5d32449..ffd7cc703b 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -386,8 +386,11 @@ bool AudioMixer::prepareMixForListeningNode(Node* node) { // loop through all other nodes that have sufficient audio to mix DependencyManager::get()->eachNode([&](const SharedNodePointer& otherNode){ - // make sure that we have audio data for this other node and that it isn't being ignored by our listening node - if (otherNode->getLinkedData() && !node->isIgnoringNodeWithID(otherNode->getUUID())) { + // make sure that we have audio data for this other node + // and that it isn't being ignored by our listening node + // and that it isn't ignoring our listening node + if (otherNode->getLinkedData() + && !node->isIgnoringNodeWithID(otherNode->getUUID()) && !otherNode->isIgnoringNodeWithID(node->getUUID())) { AudioMixerClientData* otherNodeClientData = (AudioMixerClientData*) otherNode->getLinkedData(); // enumerate the ARBs attached to the otherNode and add all that should be added to mix diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 041449dc57..2c9fadc7b1 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -230,9 +230,11 @@ void AvatarMixer::broadcastAvatarData() { [&](const SharedNodePointer& otherNode)->bool { // make sure we have data for this avatar, that it isn't the same node, // and isn't an avatar that the viewing node has ignored + // or that has ignored the viewing node if (!otherNode->getLinkedData() || otherNode->getUUID() == node->getUUID() - || node->isIgnoringNodeWithID(otherNode->getUUID())) { + || node->isIgnoringNodeWithID(otherNode->getUUID()) + || otherNode->isIgnoringNodeWithID(node->getUUID())) { return false; } else { return true; From f8be4227d9de559b62886f226cddb2e67bc0036f Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 14 Nov 2016 12:06:25 -0800 Subject: [PATCH 11/19] Fix Blast screen typos --- .../images/steam-min-spec-failed.png | Bin 84326 -> 86568 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/interface/resources/images/steam-min-spec-failed.png b/interface/resources/images/steam-min-spec-failed.png index 99abac9e1ca9063592fa75c3b5066e3ea88f4d29..0061167a92ac5c6d2aef8f49e8023c0d3ffa414a 100644 GIT binary patch literal 86568 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ⅅ}=8~fA5#YABozg_D%!bAfk8iY&=u@FKKQ+|~H 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øh`Dct|K?3C~U!Z{B+H&s*lUBtWrn zb=_b>K$;`bBtV`-j4o1wQC|637Xd(B-dUayu&6CalKs+vnsGQ)EKu_i_f3V^`~Ot@ z%zq^Io&W61#Iysz>Xyh&Bpf?>*%Z=j27BrBwR}>ZGwm-0;PFl9&6!QUB7w}>tbfS( zFq5$mS(5+c)y-Qr_isKm^PINL$(F*LD}ltfGjQFEE06@>_)m>EUvv#qDgnU(qtpLY zYz!KlJacdURY>4V`9&1alS(uR=xGt*OCSLNerwFS-u@?^`+W1y007|eP0$Sh0K#vi zdGmX9JMW)4k=tzlK5!$Cf93G6KKyGJ|N4i2{p7#n#lOSBzwqE+m~>+X|G$Han@rt{ r=#2Kb|Db2-D2D%+g~HEx!5%=eE#pHmnibfMq*RqOU)Q{{`uKkUu)f(6 literal 84326 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

q?d(QXvC?iI)WG>fS&%c`7VzRiTAA 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 z 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 n2g7i9|fqSFIaKD+2m{vtm;|27YdFcNEu;y3M From ec86b82079eed8da622560c98e011bbaa69ff879 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 14 Nov 2016 12:14:24 -0800 Subject: [PATCH 12/19] Add jsdoc to Camera --- interface/src/Camera.h | 57 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/interface/src/Camera.h b/interface/src/Camera.h index 792dcb4a40..27904242ab 100644 --- a/interface/src/Camera.h +++ b/interface/src/Camera.h @@ -35,9 +35,22 @@ __attribute__((unused)) #endif static int cameraModeId = qRegisterMetaType(); +/**jsdoc + * @global + */ class Camera : public QObject { Q_OBJECT - + + /**jsdoc + * @namespace Camera + * @property position {Vec3} The position of the camera. + * @property orientation {Quat} The orientation of the camera. + * @property mode {string} The current camera mode. + * @property cameraEntity {EntityID} The position and rotation properties of + * the entity specified by this ID are then used as the camera's position and + * orientation. Only works when mode is "entity". + * @property frustum {Object} The frustum of the camera. + */ Q_PROPERTY(glm::vec3 position READ getPosition WRITE setPosition) Q_PROPERTY(glm::quat orientation READ getOrientation WRITE setOrientation) Q_PROPERTY(QString mode READ getModeString WRITE setModeString) @@ -47,13 +60,13 @@ class Camera : public QObject { public: Camera(); - void initialize(); // instantly put the camera at the ideal position and orientation. + void initialize(); // instantly put the camera at the ideal position and orientation. void update( float deltaTime ); CameraMode getMode() const { return _mode; } void setMode(CameraMode m); - + void loadViewFrustum(ViewFrustum& frustum) const; ViewFrustum toViewFrustum() const; @@ -80,20 +93,44 @@ public slots: QUuid getCameraEntity() const; void setCameraEntity(QUuid entityID); + /**jsdoc + * Compute a {PickRay} based on the current camera configuration and the position x,y on the screen. + * @function Camera.computePickRay + * @param {float} x + * @param {float} y + * @return {PickRay} + */ PickRay computePickRay(float x, float y); - // These only work on independent cameras - /// one time change to what the camera is looking at - void lookAt(const glm::vec3& value); + /**jsdoc + * Set the camera to look at position position. Only works while in independent. + * camera mode. + * @function Camera.lookAt + * @param {Vec3} position position to look at + */ + void lookAt(const glm::vec3& position); - /// fix what the camera is looking at, and keep the camera looking at this even if position changes - void keepLookingAt(const glm::vec3& value); + /**jsdoc + * Set the camera to continue looking at position position. + * Only works while in `independent` camera mode. + * @function Camera.keepLookingAt + * @param {Vec3} position position to look at + */ + void keepLookingAt(const glm::vec3& position); - /// stops the keep looking at feature, doesn't change what's being looked at, but will stop camera from - /// continuing to update it's orientation to keep looking at the item + /**jsdoc + * Stops the camera from continually looking at a position that was set with + * `keepLookingAt` + * @function Camera.stopLookingAt + */ void stopLooking() { _isKeepLookingAt = false; } signals: + /**jsdoc + * Triggered when camera mode has changed. + * @function Camera.modeUpdated + * @return {Signal} + */ void modeUpdated(const QString& newMode); private: From 7e2bb0e5ed028e664d5cb709032016a99fba7933 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 14 Nov 2016 13:51:51 -0800 Subject: [PATCH 13/19] Cleanup camera docs --- interface/src/Camera.h | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/interface/src/Camera.h b/interface/src/Camera.h index 27904242ab..cedfb3f185 100644 --- a/interface/src/Camera.h +++ b/interface/src/Camera.h @@ -35,9 +35,6 @@ __attribute__((unused)) #endif static int cameraModeId = qRegisterMetaType(); -/**jsdoc - * @global - */ class Camera : public QObject { Q_OBJECT @@ -96,9 +93,9 @@ public slots: /**jsdoc * Compute a {PickRay} based on the current camera configuration and the position x,y on the screen. * @function Camera.computePickRay - * @param {float} x - * @param {float} y - * @return {PickRay} + * @param {float} x X-coordinate on screen. + * @param {float} y Y-coordinate on screen. + * @return {PickRay} The computed {PickRay}. */ PickRay computePickRay(float x, float y); @@ -106,7 +103,7 @@ public slots: * Set the camera to look at position position. Only works while in independent. * camera mode. * @function Camera.lookAt - * @param {Vec3} position position to look at + * @param {Vec3} Position Position to look at. */ void lookAt(const glm::vec3& position); @@ -114,7 +111,7 @@ public slots: * Set the camera to continue looking at position position. * Only works while in `independent` camera mode. * @function Camera.keepLookingAt - * @param {Vec3} position position to look at + * @param {Vec3} position Position to keep looking at. */ void keepLookingAt(const glm::vec3& position); From 3fcc2d3fa5d344a3f66cd40f979e021e56a89b92 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 14 Nov 2016 13:52:16 -0800 Subject: [PATCH 14/19] Add jsdoc to Clipboard --- .../scripting/ClipboardScriptingInterface.h | 51 ++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/interface/src/scripting/ClipboardScriptingInterface.h b/interface/src/scripting/ClipboardScriptingInterface.h index 4737a194df..3c10475242 100644 --- a/interface/src/scripting/ClipboardScriptingInterface.h +++ b/interface/src/scripting/ClipboardScriptingInterface.h @@ -13,6 +13,9 @@ #include +/**jsdoc + * @namespace Clipboard + */ class ClipboardScriptingInterface : public QObject { Q_OBJECT public: @@ -21,13 +24,47 @@ public: signals: void readyToImport(); -public slots: - glm::vec3 getContentsDimensions(); /// returns the overall dimensions of everything on the blipboard - float getClipboardContentsLargestDimension(); /// returns the largest dimension of everything on the clipboard - bool importEntities(const QString& filename); - bool exportEntities(const QString& filename, const QVector& entityIDs); - bool exportEntities(const QString& filename, float x, float y, float z, float s); - QVector pasteEntities(glm::vec3 position); +public: + /**jsdoc + * @function Clipboard.getContentsDimensions + * @return {Vec3} The extents of the contents held in the clipboard. + */ + Q_INVOKABLE glm::vec3 getContentsDimensions(); + + /**jsdoc + * Compute largest dimension of the extents of the contents held in the clipboard + * @function Clipboard.getClipboardContentsLargestDimension + * @return {float} The largest dimension computed. + */ + Q_INVOKABLE float getClipboardContentsLargestDimension(); + + /**jsdoc + * Import entities from a .json file containing entity data into the clipboard. + * You can generate * a .json file using {Clipboard.exportEntities}. + * @function Clipboard.importEntities + * @param {string} filename Filename of file to import. + * @return {bool} True if the import was succesful, otherwise false. + */ + Q_INVOKABLE bool importEntities(const QString& filename); + + /**jsdoc + * Export the entities listed in `entityIDs` to the file `filename` + * @function Clipboard.exportEntities + * @param {string} filename Path to the file to export entities to. + * @param {EntityID[]} entityIDs IDs of entities to export. + * @return {bool} True if the export was succesful, otherwise false. + */ + Q_INVOKABLE bool exportEntities(const QString& filename, const QVector& entityIDs); + Q_INVOKABLE bool exportEntities(const QString& filename, float x, float y, float z, float s); + + /**jsdoc + * Paste the contents of the clipboard into the world. + * @function Clipboard.pasteEntities + * @param {Vec3} position Position to paste clipboard at. + * @return {EntityID[]} Array of entity IDs for the new entities that were + * created as a result of the paste operation. + */ + Q_INVOKABLE QVector pasteEntities(glm::vec3 position); }; #endif // hifi_ClipboardScriptingInterface_h From 3a68f48cd70b2b37807ee69f23619e231889e8c8 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Mon, 14 Nov 2016 16:30:18 -0800 Subject: [PATCH 15/19] disable threaded reprojection when running oculus in OpenVR --- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 6 +++++- plugins/openvr/src/OpenVrHelpers.cpp | 6 ++++++ plugins/openvr/src/OpenVrHelpers.h | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index eb0e58eb4a..bfa61f3b36 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -401,9 +401,13 @@ bool OpenVrDisplayPlugin::internalActivate() { memset(&timing, 0, sizeof(timing)); timing.m_nSize = sizeof(vr::Compositor_FrameTiming); vr::VRCompositor()->GetFrameTiming(&timing); - _asyncReprojectionActive = timing.m_nReprojectionFlags & VRCompositor_ReprojectionAsync; + auto usingOpenVRForOculus = oculusViaOpenVR(); + _asyncReprojectionActive = (timing.m_nReprojectionFlags & VRCompositor_ReprojectionAsync) || usingOpenVRForOculus; _threadedSubmit = !_asyncReprojectionActive; + if (usingOpenVRForOculus) { + qDebug() << "Oculus active via OpenVR: " << usingOpenVRForOculus; + } qDebug() << "OpenVR Async Reprojection active: " << _asyncReprojectionActive; qDebug() << "OpenVR Threaded submit enabled: " << _threadedSubmit; diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index 0c3a2faed6..56a5dd3f5b 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -60,6 +60,12 @@ bool isOculusPresent() { return result; } +bool oculusViaOpenVR() { + static const QString DEBUG_FLAG("HIFI_DEBUG_OPENVR"); + static bool enableDebugOpenVR = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG); + return enableDebugOpenVR && isOculusPresent() && vr::VR_IsHmdPresent(); +} + bool openVrSupported() { static const QString DEBUG_FLAG("HIFI_DEBUG_OPENVR"); static bool enableDebugOpenVR = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG); diff --git a/plugins/openvr/src/OpenVrHelpers.h b/plugins/openvr/src/OpenVrHelpers.h index be79dd1155..f00cd9e117 100644 --- a/plugins/openvr/src/OpenVrHelpers.h +++ b/plugins/openvr/src/OpenVrHelpers.h @@ -15,6 +15,7 @@ #include #include +bool oculusViaOpenVR(); // is the user using Oculus via OpenVR bool openVrSupported(); vr::IVRSystem* acquireOpenVrSystem(); From 5fd1ae64b0b2f124141e627a5d1eb61e7bf6aebe Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 14 Nov 2016 16:54:55 -0800 Subject: [PATCH 16/19] Begin adding entities jsdoc --- .../entities/src/EntityScriptingInterface.h | 69 ++++++++++++++++--- tools/jsdoc/plugins/hifi.js | 1 + 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 3d46113611..7cef753de9 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -56,6 +56,9 @@ QScriptValue RayToEntityIntersectionResultToScriptValue(QScriptEngine* engine, c void RayToEntityIntersectionResultFromScriptValue(const QScriptValue& object, RayToEntityIntersectionResult& results); +/**jsdoc + * @namespace Entities + */ /// handles scripting of Entity commands from JS passed to assigned clients class EntityScriptingInterface : public OctreeScriptingInterface, public Dependency { Q_OBJECT @@ -87,40 +90,90 @@ public: ActivityTracking getActivityTracking() const { return _activityTracking; } public slots: - // returns true if the DomainServer will allow this Node/Avatar to make changes + /**jsdoc + * Returns `true` if the DomainServer will allow this Node/Avatar to make changes + * + * @function Entities.canAdjustLocks + * @return {bool} `true` if the client can adjust locks, `false` if not. + */ Q_INVOKABLE bool canAdjustLocks(); - // returns true if the DomainServer will allow this Node/Avatar to rez new entities + /**jsdoc + * @function Entities.canRez + * @return {bool} `true` if the DomainServer will allow this Node/Avatar to rez new entities + */ Q_INVOKABLE bool canRez(); + + /**jsdoc + * @function Entities.canRezTmp + * @return {bool} `true` if the DomainServer will allow this Node/Avatar to rez new temporary entities + */ Q_INVOKABLE bool canRezTmp(); - /// adds a model with the specific properties + /**jsdoc + * Add a new entity with the specified properties. If `clientOnly` is true, the entity will + * not be sent to the server and will only be visible/accessible on the local client. + * + * @function Entities.addEntity + * @param {EntityItemProperties} properties Properties of the entity to create. + * @param {bool} [clientOnly=false] Whether the entity should only exist locally or not. + * @return {EntityID} The entity ID of the newly created entity. The ID will be a null + * UUID (`{00000000-0000-0000-0000-000000000000}`) if the entity could not be created. + */ Q_INVOKABLE QUuid addEntity(const EntityItemProperties& properties, bool clientOnly = false); /// temporary method until addEntity can be used from QJSEngine + /// Deliberately not adding jsdoc, only used internally. Q_INVOKABLE QUuid addModelEntity(const QString& name, const QString& modelUrl, const QString& shapeType, bool dynamic, const glm::vec3& position, const glm::vec3& gravity); - /// gets the current model properties for a specific model - /// this function will not find return results in script engine contexts which don't have access to models + /**jsdoc + * Return the properties for the specified {EntityID}. + * not be sent to the server and will only be visible/accessible on the local client. + * @param {EntityItemProperties} properties Properties of the entity to create. + * @param {EntityPropertyFlags} [desiredProperties=[]] Array containing the names of the properties you + * would like to get. If the array is empty, all properties will be returned. + * @return {EntityItemProperties} The entity properties for the specified entity. + */ Q_INVOKABLE EntityItemProperties getEntityProperties(QUuid entityID); Q_INVOKABLE EntityItemProperties getEntityProperties(QUuid identity, EntityPropertyFlags desiredProperties); - /// edits a model updating only the included properties, will return the identified EntityItemID in case of - /// successful edit, if the input entityID is for an unknown model this function will have no effect + /**jsdoc + * Updates an entity with the specified properties. + * + * @function Entities.editEntity + * @return {EntityID} The EntityID of the entity if the edit was successful, otherwise the null {EntityID}. + */ Q_INVOKABLE QUuid editEntity(QUuid entityID, const EntityItemProperties& properties); - /// deletes a model + /**jsdoc + * Deletes an entity. + * + * @function Entities.deleteEntity + * @param {EntityID} entityID The ID of the entity to delete. + */ Q_INVOKABLE void deleteEntity(QUuid entityID); /// Allows a script to call a method on an entity's script. The method will execute in the entity script /// engine. If the entity does not have an entity script or the method does not exist, this call will have /// no effect. + /**jsdoc + * Call a method on an entity. If it is running an entity script (specified by the `script` property) + * and it exposes a property with the specified name `method`, it will be called + * using `params` as the list of arguments. + * + * @function Entities.callEntityMethod + * @param {EntityID} entityID The ID of the entity to call the method on. + * @param {string} method The name of the method to call. + * @param {string[]} params The list of parameters to call the specified method with. + */ Q_INVOKABLE void callEntityMethod(QUuid entityID, const QString& method, const QStringList& params = QStringList()); /// finds the closest model to the center point, within the radius /// will return a EntityItemID.isKnownID = false if no models are in the radius /// this function will not find any models in script engine contexts which don't have access to models + /**jsdoc + */ Q_INVOKABLE QUuid findClosestEntity(const glm::vec3& center, float radius) const; /// finds models within the search sphere specified by the center point and radius diff --git a/tools/jsdoc/plugins/hifi.js b/tools/jsdoc/plugins/hifi.js index 8016aa2ae5..084ff57fb5 100644 --- a/tools/jsdoc/plugins/hifi.js +++ b/tools/jsdoc/plugins/hifi.js @@ -19,6 +19,7 @@ exports.handlers = { '../../libraries/script-engine/src', '../../libraries/networking/src', '../../libraries/animation/src', + '../../libraries/entities/src', ]; var exts = ['.h', '.cpp']; From 5dd33c8dce2a7368f02e56611aeb3cad2ecef57a Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Mon, 14 Nov 2016 20:58:09 -0800 Subject: [PATCH 17/19] fix for mac min openGL version --- libraries/gl/src/gl/OpenGLVersionChecker.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/gl/src/gl/OpenGLVersionChecker.cpp b/libraries/gl/src/gl/OpenGLVersionChecker.cpp index 428bf86c6f..f24a9bb932 100644 --- a/libraries/gl/src/gl/OpenGLVersionChecker.cpp +++ b/libraries/gl/src/gl/OpenGLVersionChecker.cpp @@ -50,7 +50,8 @@ QJsonObject OpenGLVersionChecker::checkVersion(bool& valid, bool& override) { valid = true; override = false; - QGLWidget* glWidget = new QGLWidget(); + QGLWidget* glWidget = new QGLWidget(getDefaultGLFormat()); + valid = glWidget->isValid(); // Inform user if no OpenGL support if (!valid) { From 1791a1c1fea0d7e4d8c3f403fee74863349087b7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 15 Nov 2016 10:15:17 -0800 Subject: [PATCH 18/19] never send agents to other agents --- domain-server/src/DomainServer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 5208cb2326..7d031c5be5 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -950,7 +950,9 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif if (nodeData->isAuthenticated()) { // if this authenticated node has any interest types, send back those nodes as well limitedNodeList->eachNode([&](const SharedNodePointer& otherNode){ - if (otherNode->getUUID() != node->getUUID() && nodeInterestSet.contains(otherNode->getType())) { + if (otherNode->getUUID() != node->getUUID() + && nodeInterestSet.contains(otherNode->getType()) + && (node->getType() != NodeType::Agent || otherNode->getType() != NodeType::Agent)) { // since we're about to add a node to the packet we start a segment domainListPackets->startSegment(); From 39afb24982865268cc51b5564c03ab847abfdcf2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 15 Nov 2016 10:37:19 -0800 Subject: [PATCH 19/19] explictly remove Agent from NIS for other Agents --- domain-server/src/DomainGatekeeper.cpp | 9 ++++++++- domain-server/src/DomainServer.cpp | 12 +++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp index abe7ed176a..051465efd2 100644 --- a/domain-server/src/DomainGatekeeper.cpp +++ b/domain-server/src/DomainGatekeeper.cpp @@ -109,7 +109,14 @@ void DomainGatekeeper::processConnectRequestPacket(QSharedPointer(node->getLinkedData()); nodeData->setSendingSockAddr(message->getSenderSockAddr()); - nodeData->setNodeInterestSet(nodeConnection.interestList.toSet()); + + // guard against patched agents asking to hear about other agents + auto safeInterestSet = nodeConnection.interestList.toSet(); + if (nodeConnection.nodeType == NodeType::Agent) { + safeInterestSet.remove(NodeType::Agent); + } + + nodeData->setNodeInterestSet(safeInterestSet); nodeData->setPlaceName(nodeConnection.placeName); // signal that we just connected a node so the DomainServer can get it a list diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 7d031c5be5..6668ed54dc 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -843,7 +843,14 @@ void DomainServer::processListRequestPacket(QSharedPointer mess // update the NodeInterestSet in case there have been any changes DomainServerNodeData* nodeData = reinterpret_cast(sendingNode->getLinkedData()); - nodeData->setNodeInterestSet(nodeRequestData.interestList.toSet()); + + // guard against patched agents asking to hear about other agents + auto safeInterestSet = nodeRequestData.interestList.toSet(); + if (sendingNode->getType() == NodeType::Agent) { + safeInterestSet.remove(NodeType::Agent); + } + + nodeData->setNodeInterestSet(safeInterestSet); // update the connecting hostname in case it has changed nodeData->setPlaceName(nodeRequestData.placeName); @@ -951,8 +958,7 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif // if this authenticated node has any interest types, send back those nodes as well limitedNodeList->eachNode([&](const SharedNodePointer& otherNode){ if (otherNode->getUUID() != node->getUUID() - && nodeInterestSet.contains(otherNode->getType()) - && (node->getType() != NodeType::Agent || otherNode->getType() != NodeType::Agent)) { + && nodeInterestSet.contains(otherNode->getType())) { // since we're about to add a node to the packet we start a segment domainListPackets->startSegment();