From 4a70117126f91ea39a36eff74e52e7c80ba7c8e6 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 9 Aug 2016 10:31:22 +0100 Subject: [PATCH] VR: Added define to turn barrel-distortion on/off Change-Id: Iaaac0b022aec0fda863340299b2c2741e02acfdf --- dali/internal/render/common/render-manager.cpp | 67 +++++++++++++++----------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index 1f6b9fa..d2bfa04 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -42,9 +42,13 @@ #include #include +//TODOVR #include - #include + +//TODOVR +//#define DEBUG_DISABLE_BARREL_DISTORTION + namespace Dali { @@ -85,7 +89,7 @@ struct VrImpl : mainFrameBufferAttachments( ), mainFrameBuffer( 0 ), mainVRProgramGL( 0 ), - vrModeEnabled( false ) //TODOVR + vrModeEnabled( true ) //TODOVR { } @@ -639,8 +643,6 @@ bool RenderManager::Render( Integration::RenderStatus& status ) { RenderVR(); } - - } //Notify RenderGeometries that rendering has finished @@ -720,8 +722,6 @@ void RenderManager::DoRender( RenderInstruction& instruction, Shader& defaultSha } else // !(instruction.mOffscreenTexture) { - - // switch rendering to adaptor provided (default) buffer mImpl->context.BindFramebuffer( GL_FRAMEBUFFER, mImpl->vrImpl.vrModeEnabled ? mImpl->vrImpl.mainFrameBuffer : 0 ); @@ -778,22 +778,6 @@ void RenderManager::DoRender( RenderInstruction& instruction, Shader& defaultSha } } - - - - - - - - - - - - - - - - namespace { inline void Orthographic(Matrix& result, float left, float right, float bottom, float top, float near, float far, bool invertYAxis) { @@ -911,10 +895,13 @@ void RenderManager::SetupVRMode() "varying mediump vec2 vTexCoord;\n" "void main()\n" "{ \n" -// " mediump vec4 mulcol = vec4( 1.0, 0.5, 0.5, 1.0 );\n" -// " if(vTexCoord.y < 0.5 ) { mulcol = vec4(0.5, 1.0, 0.5, 1.0); }\n" -// " gl_FragColor = texture2D( texSampler, vTexCoord ) * mulcol;\n" +#ifdef DEBUG_DISABLE_BARREL_DISTORTION + " mediump vec4 mulcol = vec4( 1.0, 0.0, 0.0, 1.0 );\n" + " if( vTexCoord.y < 0.5 ) { mulcol = vec4( 0.0, 1.0, 0.0, 1.0 ); }\n" + " gl_FragColor = texture2D( texSampler, vTexCoord ) * mulcol;\n" +#else " gl_FragColor = texture2D( texSampler, vTexCoord );\n" +#endif "}\n\0", }; @@ -934,10 +921,27 @@ void RenderManager::SetupVRMode() GL( mImpl->context.LinkProgram( program) ); vr.mainVRProgramGL = program; - //const float w = 1.0f;//(float)mImpl->defaultSurfaceRect.width; - //const float h = 1.0f;//(float)mImpl->defaultSurfaceRect.height; + +#ifdef DEBUG_DISABLE_BARREL_DISTORTION + const float w = 1.0f;//(float)mImpl->defaultSurfaceRect.width; + const float h = 1.0f;//(float)mImpl->defaultSurfaceRect.height; // create vertex buffer + VrImpl::Vertex vertices[] = + { + { { -w, -h, 0.0f }, { 0.0f, 0.0f } }, + { { w, -h, 0.0f }, { 1.0f, 0.0f } }, + { { w, h, 0.0f }, { 1.0f, 1.0f } }, + { { -w, -h, 0.0f }, { 0.0f, 0.0f } }, + { { w, h, 0.0f }, { 1.0f, 1.0f } }, + { { -w, h, 0.0f }, { 0.0f, 1.0f } }, + }; + + GL( ctx.GenBuffers( 1, &vr.vertexBuffer ) ); + GL( ctx.BindArrayBuffer( vr.vertexBuffer ) ); + GL( ctx.BufferData( GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW ) ); +#else + // create vertex buffer std::vector vertices; std::vector indices; GenerateGridVertexBuffer( vertices ); @@ -953,6 +957,7 @@ void RenderManager::SetupVRMode() GL( ctx.BindArrayBuffer( vr.indexBuffer ) ); GL( ctx.BufferData( GL_ARRAY_BUFFER, indices.size()*sizeof(uint16_t), indices.data(), GL_STATIC_DRAW ) ); vr.indicesCount = indices.size(); +#endif GL( vr.uniformLocations[ VrImpl::VR_UNIFORM_MVP ] = ctx.GetUniformLocation( program, "mvp" ) ); GL( vr.uniformLocations[ VrImpl::VR_UNIFORM_TEXTURE ] = ctx.GetUniformLocation( program, "texSampler" ) ); @@ -969,7 +974,6 @@ void RenderManager::SetupVRMode() return; } - void RenderManager::RenderVR() { static float f = 1.0f; @@ -997,7 +1001,9 @@ void RenderManager::RenderVR() GL( gl.EnableVertexAttribArray( 0 ) ); GL( gl.EnableVertexAttribArray( 1 ) ); +#ifndef DEBUG_DISABLE_BARREL_DISTORTION GL( ctx.BindElementArrayBuffer( vr.indexBuffer ) ); +#endif // uniforms // texture @@ -1009,11 +1015,14 @@ void RenderManager::RenderVR() GL( gl.UniformMatrix4fv( vr.uniformLocations[ VrImpl::VR_UNIFORM_MVP ], 1, GL_FALSE, vr.MVP.AsFloat() ) ); +#ifdef DEBUG_DISABLE_BARREL_DISTORTION + GL( gl.DrawArrays( GL_TRIANGLES, 0, 6 ) ); +#else GL( gl.DrawElements( GL_TRIANGLES, vr.indicesCount, GL_UNSIGNED_SHORT, 0 ) ); +#endif if( program ) program->Use(); - } } // namespace SceneGraph -- 2.7.4