ResourceBufferSharedPtr ResourceBuffer::get( const dp::sg::core::BufferSharedPtr &buffer, const ResourceManagerSharedPtr& resourceManager ) { assert( buffer ); assert( !!resourceManager ); ResourceBufferSharedPtr resourceBuffer = resourceManager->getResource<ResourceBuffer>( reinterpret_cast<size_t>(buffer.operator->()) ); // Big Hack !! if ( !resourceBuffer ) { resourceBuffer = std::shared_ptr<ResourceBuffer>( new ResourceBuffer( buffer, resourceManager ) ); if ( buffer.isPtrTo<dp::sg::gl::BufferGL>() ) { dp::sg::gl::BufferGLSharedPtr const& buffergl = buffer.staticCast<dp::sg::gl::BufferGL>(); dp::rix::gl::BufferDescriptionGL bufferDescription( dp::rix::gl::UsageHint::STATIC_DRAW, buffergl->getBuffer() ); resourceBuffer->m_bufferHandle = resourceManager->getRenderer()->bufferCreate( bufferDescription ); resourceBuffer->m_isNativeBuffer = true; } else { resourceBuffer->m_bufferHandle = resourceManager->getRenderer()->bufferCreate(); } resourceBuffer->update(); } return resourceBuffer; }
ResourceVertexAttributeSetSharedPtr ResourceVertexAttributeSet::get( const dp::sg::core::VertexAttributeSetSharedPtr &vertexAttributeSet, const ResourceManagerSharedPtr& resourceManager ) { assert( vertexAttributeSet ); assert( resourceManager ); ResourceVertexAttributeSetSharedPtr resourceVertexAttributeSet = resourceManager->getResource<ResourceVertexAttributeSet>( reinterpret_cast<size_t>(vertexAttributeSet.operator->()) ); // Big Hack !! if ( !resourceVertexAttributeSet ) { resourceVertexAttributeSet = std::shared_ptr<ResourceVertexAttributeSet>( new ResourceVertexAttributeSet( vertexAttributeSet, resourceManager ) ); resourceVertexAttributeSet->m_vertexAttributesHandle = resourceManager->getRenderer()->vertexAttributesCreate(); resourceVertexAttributeSet->update(); } return resourceVertexAttributeSet; }