//============================== // BitmapFontLocal::LoadImageFromBuffer bool BitmapFontLocal::LoadImageFromBuffer( char const * imageName, unsigned char const * buffer, size_t bufferSize, bool const isASTC ) { if ( Texture != 0 ) { glDeleteTextures( 1, &Texture ); Texture = 0; } if ( isASTC ) { Texture = LoadASTCTextureFromMemory( buffer, bufferSize, 1 ); } else { Texture = LoadTextureFromBuffer( imageName, MemBuffer( (void *)buffer, bufferSize), TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), ImageWidth, ImageHeight ); } if ( Texture == 0 ) { LOG( "BitmapFontLocal::Load: failed to load '%s'", imageName ); return false; } LOG( "BitmapFontLocal::LoadImageFromBuffer: success" ); return true; }
void UITexture::LoadTextureFromApplicationPackage( const char *assetPath ) { #if defined( OVR_OS_ANDROID ) Free(); Texture = OVR::LoadTextureFromApplicationPackage( assetPath, TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), Width, Height ); FreeTextureOfDestruct = true; #else MemBufferFile mbf(MemBufferFile::NoInit); if (mbf.LoadFile(assetPath)) { LoadTextureFromBuffer(assetPath, mbf); mbf.FreeData(); } #endif }
//============================== // OvrGazeCursorLocal:: void OvrGazeCursorLocal::Init() { LOG( "OvrGazeCursorLocal::Init" ); ASSERT_WITH_TAG( Initialized == false, "GazeCursor" ); if ( Initialized ) { LOG( "OvrGazeCursorLocal::Init - already initialized!" ); return; } CreateCursorGeometry(); TimerGeometry = BuildTesselatedQuad( 1, 1 ); int w = 0; int h = 0; char const * const cursorStateNames[ CURSOR_STATE_MAX ] = { //"res/raw/color_ramp_test.tga", //"res/raw/color_ramp_test.tga", //"res/raw/gaze_cursor_dot.tga", //"res/raw/gaze_cursor_dot_hi.tga" //"res/raw/gaze_cursor_cross.tga", //"res/raw/gaze_cursor_cross_hi.tga" "res/raw/gaze_cursor_cross.tga", "res/raw/gaze_cursor_cross.tga", // for now, hilight is the same because the graphic needs work "res/raw/gaze_cursor_cross.tga", "res/raw/gaze_cursor_hand.tga" }; for ( int i = 0; i < CURSOR_STATE_MAX; ++i ) { CursorTextureHandle[i] = LoadTextureFromApplicationPackage( cursorStateNames[i], TextureFlags_t(), w, h ); } TimerTextureHandle = LoadTextureFromApplicationPackage( "res/raw/gaze_cursor_timer.tga", TextureFlags_t(), w, h ); ColorTableHandle = LoadTextureFromApplicationPackage( "res/raw/color_ramp_timer.tga", TextureFlags_t(), w, h ); CursorProgram = BuildProgram( GazeCursorVertexSrc, GazeCursorFragmentSrc ); TimerProgram = BuildProgram( GazeCursorTimerVertexSrc, GazeCursorColorTableFragmentSrc );//GazeCursorFragmentSrc ); Initialized = true; }
void UITexture::LoadTextureFromBuffer( const char * fileName, const MemBuffer & buffer ) { Free(); Texture = OVR::LoadTextureFromBuffer( fileName, buffer, TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), Width, Height ); FreeTextureOfDestruct = true; }
void OvrScrollBarComponent::GetScrollBarParms( VRMenu & menu, float scrollBarLength, const VRMenuId_t parentId, const VRMenuId_t rootId, const VRMenuId_t xformId, const VRMenuId_t baseId, const VRMenuId_t thumbId, const Posef & rootLocalPose, const Posef & xformPose, const int startElementIndex, const int numElements, const bool verticalBar, const Vector4f & thumbBorder, Array< const VRMenuObjectParms* > & parms ) { // Build up the scrollbar parms OvrScrollBarComponent * scrollComponent = new OvrScrollBarComponent( rootId, baseId, thumbId, startElementIndex, numElements ); scrollComponent->SetIsVertical( verticalBar ); // parms for the root object that holds all the scrollbar components { Array< VRMenuComponent* > comps; comps.PushBack( scrollComponent ); Array< VRMenuSurfaceParms > surfParms; char const * text = "scrollBarRoot"; Vector3f scale( 1.0f ); Posef pose( rootLocalPose ); Posef textPose( Quatf(), Vector3f( 0.0f ) ); Vector3f textScale( 1.0f ); VRMenuFontParms fontParms; VRMenuObjectFlags_t objectFlags( VRMENUOBJECT_DONT_HIT_ALL ); objectFlags |= VRMENUOBJECT_DONT_RENDER_TEXT; VRMenuObjectInitFlags_t initFlags( VRMENUOBJECT_INIT_FORCE_POSITION ); VRMenuObjectParms * itemParms = new VRMenuObjectParms( VRMENU_CONTAINER, comps, surfParms, text, pose, scale, textPose, textScale, fontParms, rootId, objectFlags, initFlags ); itemParms->ParentId = parentId; parms.PushBack( itemParms ); } // add parms for the object that serves as a transform { Array< VRMenuComponent* > comps; Array< VRMenuSurfaceParms > surfParms; char const * text = "scrollBarTransform"; Vector3f scale( 1.0f ); Posef pose( xformPose ); Posef textPose( Quatf(), Vector3f( 0.0f ) ); Vector3f textScale( 1.0f ); VRMenuFontParms fontParms; VRMenuObjectFlags_t objectFlags( VRMENUOBJECT_DONT_HIT_ALL ); objectFlags |= VRMENUOBJECT_DONT_RENDER_TEXT; VRMenuObjectInitFlags_t initFlags( VRMENUOBJECT_INIT_FORCE_POSITION ); VRMenuObjectParms * itemParms = new VRMenuObjectParms( VRMENU_CONTAINER, comps, surfParms, text, pose, scale, textPose, textScale, fontParms, xformId, objectFlags, initFlags ); itemParms->ParentId = rootId; parms.PushBack( itemParms ); } // add parms for the base image that underlays the whole scrollbar { int sbWidth, sbHeight = 0; GLuint sbTexture = OVR::LoadTextureFromApplicationPackage( GetImage( SCROLLBAR_IMAGE_BASE, verticalBar ).ToCStr(), TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), sbWidth, sbHeight ); if ( verticalBar ) { scrollComponent->SetScrollBarBaseWidth( static_cast<float>( sbWidth ) ); scrollComponent->SetScrollBarBaseHeight( scrollBarLength ); } else { scrollComponent->SetScrollBarBaseWidth( scrollBarLength ); scrollComponent->SetScrollBarBaseHeight( static_cast<float>( sbHeight ) ); } Array< VRMenuComponent* > comps; Array< VRMenuSurfaceParms > surfParms; char const * text = "scrollBase"; VRMenuSurfaceParms baseParms( text, sbTexture, sbWidth, sbHeight, SURFACE_TEXTURE_DIFFUSE, 0, 0, 0, SURFACE_TEXTURE_MAX, 0, 0, 0, SURFACE_TEXTURE_MAX ); surfParms.PushBack( baseParms ); Vector3f scale( 1.0f ); Posef pose( Quatf(), Vector3f( 0.0f ) ); Posef textPose( Quatf(), Vector3f( 0.0f ) ); Vector3f textScale( 1.0f ); VRMenuFontParms fontParms; VRMenuObjectFlags_t objectFlags( VRMENUOBJECT_DONT_HIT_ALL ); objectFlags |= VRMENUOBJECT_DONT_RENDER_TEXT; VRMenuObjectInitFlags_t initFlags( VRMENUOBJECT_INIT_FORCE_POSITION ); VRMenuObjectParms * itemParms = new VRMenuObjectParms( VRMENU_BUTTON, comps, surfParms, text, pose, scale, textPose, textScale, fontParms, baseId, objectFlags, initFlags ); itemParms->ParentId = xformId; parms.PushBack( itemParms ); } // add parms for the thumb image of the scrollbar { int stWidth, stHeight = 0; GLuint stTexture = OVR::LoadTextureFromApplicationPackage( GetImage( SCROLLBAR_IMAGE_THUMB, verticalBar ).ToCStr(), TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), stWidth, stHeight ); scrollComponent->SetScrollBarThumbWidth( (float)( stWidth ) ); scrollComponent->SetScrollBarThumbHeight( (float)( stHeight ) ); Array< VRMenuComponent* > comps; Array< VRMenuSurfaceParms > surfParms; char const * text = "scrollThumb"; VRMenuSurfaceParms thumbParms( text, stTexture, stWidth, stHeight, SURFACE_TEXTURE_DIFFUSE, 0, 0, 0, SURFACE_TEXTURE_MAX, 0, 0, 0, SURFACE_TEXTURE_MAX ); //thumbParms.Border = thumbBorder; surfParms.PushBack( thumbParms ); Vector3f scale( 1.0f ); Posef pose( Quatf(), -FWD * THUMB_FROM_BASE_OFFSET ); // Since we use left aligned anchors on the base and thumb, we offset the root once to center the scrollbar Posef textPose( Quatf(), Vector3f( 0.0f ) ); Vector3f textScale( 1.0f ); VRMenuFontParms fontParms; VRMenuObjectFlags_t objectFlags( VRMENUOBJECT_DONT_HIT_ALL ); objectFlags |= VRMENUOBJECT_DONT_RENDER_TEXT; objectFlags |= VRMENUOBJECT_FLAG_POLYGON_OFFSET; VRMenuObjectInitFlags_t initFlags( VRMENUOBJECT_INIT_FORCE_POSITION ); VRMenuObjectParms * itemParms = new VRMenuObjectParms( VRMENU_BUTTON, comps, surfParms, text, pose, scale, textPose, textScale, fontParms, thumbId, objectFlags, initFlags ); itemParms->ParentId = xformId; parms.PushBack( itemParms ); } }
void ResumeMovieView::CreateMenu( App * app, OvrVRMenuMgr & menuMgr, BitmapFont const & font ) { Menu = VRMenu::Create( "ResumeMoviePrompt" ); Vector3f fwd( 0.0f, 0.0f, 1.0f ); Vector3f up( 0.0f, 1.0f, 0.0f ); Vector3f defaultScale( 1.0f ); Array< VRMenuObjectParms const * > parms; VRMenuFontParms fontParms( true, true, false, false, false, 1.3f ); Quatf orientation( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ); Vector3f centerPos( 0.0f, 0.0f, 0.0f ); VRMenuObjectParms centerRootParms( VRMENU_CONTAINER, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), "CenterRoot", Posef( orientation, centerPos ), Vector3f( 1.0f, 1.0f, 1.0f ), fontParms, ID_CENTER_ROOT, VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( ¢erRootParms ); Menu->InitWithItems( menuMgr, font, 0.0f, VRMenuFlags_t(), parms ); parms.Clear(); // the centerroot item will get touch relative and touch absolute events and use them to rotate the centerRoot menuHandle_t centerRootHandle = Menu->HandleForId( menuMgr, ID_CENTER_ROOT ); VRMenuObject * centerRoot = menuMgr.ToObject( centerRootHandle ); OVR_ASSERT( centerRoot != NULL ); // ============================================================================== // // title // { Posef panelPose( Quatf( up, 0.0f ), Vector3f( 0.0f, 2.2f, -3.0f ) ); VRMenuObjectParms p( VRMENU_STATIC, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), Strings::ResumeMenu_Title, panelPose, defaultScale, fontParms, VRMenuId_t( ID_TITLE.Get() ), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &p ); Menu->AddItems( menuMgr, font, parms, centerRootHandle, false ); parms.Clear(); } // ============================================================================== // // options // Array<const char *> options; options.PushBack( Strings::ResumeMenu_Resume ); options.PushBack( Strings::ResumeMenu_Restart ); Array<const char *> icons; icons.PushBack( "assets/resume.png" ); icons.PushBack( "assets/restart.png" ); Array<PanelPose> optionPositions; optionPositions.PushBack( PanelPose( Quatf( up, 0.0f / 180.0f * Mathf::Pi ), Vector3f( -0.5f, 1.7f, -3.0f ), Vector4f( 1.0f, 1.0f, 1.0f, 1.0f ) ) ); optionPositions.PushBack( PanelPose( Quatf( up, 0.0f / 180.0f * Mathf::Pi ), Vector3f( 0.5f, 1.7f, -3.0f ), Vector4f( 1.0f, 1.0f, 1.0f, 1.0f ) ) ); int borderWidth = 0, borderHeight = 0; GLuint borderTexture = LoadTextureFromApplicationPackage( "assets/resume_restart_border.png", TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), borderWidth, borderHeight ); for ( int i = 0; i < optionPositions.GetSizeI(); ++i ) { ResumeMovieComponent * resumeMovieComponent = new ResumeMovieComponent( this, i ); Array< VRMenuComponent* > optionComps; optionComps.PushBack( resumeMovieComponent ); VRMenuSurfaceParms panelSurfParms( "", borderTexture, borderWidth, borderHeight, SURFACE_TEXTURE_ADDITIVE, 0, 0, 0, SURFACE_TEXTURE_MAX, 0, 0, 0, SURFACE_TEXTURE_MAX ); Posef panelPose( optionPositions[ i ].Orientation, optionPositions[ i ].Position ); VRMenuObjectParms * p = new VRMenuObjectParms( VRMENU_BUTTON, optionComps, panelSurfParms, options[ i ], panelPose, defaultScale, fontParms, VRMenuId_t( ID_OPTIONS.Get() + i ), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( p ); Menu->AddItems( menuMgr, font, parms, centerRootHandle, false ); DeletePointerArray( parms ); parms.Clear(); // add icon menuHandle_t optionHandle = centerRoot->ChildHandleForId( menuMgr, VRMenuId_t( ID_OPTIONS.Get() + i ) ); VRMenuObject * optionObject = menuMgr.ToObject( optionHandle ); OVR_ASSERT( optionObject != NULL ); int iconWidth = 0, iconHeight = 0; GLuint iconTexture = LoadTextureFromApplicationPackage( icons[ i ], TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), iconWidth, iconHeight ); VRMenuSurfaceParms iconSurfParms( "", iconTexture, iconWidth, iconHeight, SURFACE_TEXTURE_DIFFUSE, 0, 0, 0, SURFACE_TEXTURE_MAX, 0, 0, 0, SURFACE_TEXTURE_MAX ); Bounds3f textBounds = optionObject->GetTextLocalBounds( font ); optionObject->SetTextLocalPosition( Vector3f( iconWidth * VRMenuObject::DEFAULT_TEXEL_SCALE * 0.5f, 0.0f, 0.0f ) ); Posef iconPose( optionPositions[ i ].Orientation, optionPositions[ i ].Position + Vector3f( textBounds.GetMins().x, 0.0f, 0.01f ) ); p = new VRMenuObjectParms( VRMENU_STATIC, Array< VRMenuComponent* >(), iconSurfParms, NULL, iconPose, defaultScale, fontParms, VRMenuId_t( ID_OPTION_ICONS.Get() + i ), VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( p ); Menu->AddItems( menuMgr, font, parms, centerRootHandle, false ); DeletePointerArray( parms ); parms.Clear(); menuHandle_t iconHandle = centerRoot->ChildHandleForId( menuMgr, VRMenuId_t( ID_OPTION_ICONS.Get() + i ) ); resumeMovieComponent->Icon = menuMgr.ToObject( iconHandle ); } Cinema.app->GetGuiSys().AddMenu( Menu ); }