Android: Using GLSurfaceView inside a fragment

In my old Activity based solution the setup looks like this:

glSurfaceView = new GLSurfaceView(this);
        registerForContextMenu(glSurfaceView);
        if (supportsEs2) {
            glSurfaceView.setEGLContextClientVersion(2);
            renderer = new GLRenderer(context);
            glSurfaceView.setRenderer(renderer);
            rendererSet = true;
        }
        else {
            Toast.makeText(context, "This device does not support OpenGL ES 2.0.",Toast.LENGTH_LONG).show();
            return;
        }       
        setContentView(glSurfaceView);

So assuming that I want the same behavior, how can I use the renderer in a Fragment?

Here is my very basic fragment:

public class SketchBoardFragment extends Fragment{

    public SketchBoardFragment(){}

    public static SketchBoardFragment newInstance(){
        SketchBoardFragment fragment = new SketchBoardFragment();
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView =     inflater.inflate(R.layout.fragment_sketch_board,container,false);
        return rootView;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity)activity).onSectionAttached(1);
    }
}

Thanks in advance.

Upvotes: 2

Views: 2463

Answers (1)

The naive solutions seems to be working:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /*View rootView = inflater.inflate(R.layout.fragment_sketch_board,container,false);
        return rootView;*/

        GLSurfaceView glSurfaceView = new GLSurfaceView(getActivity());
        GLRenderer renderer = new GLRenderer();
        glSurfaceView.setEGLContextClientVersion(2);
        glSurfaceView.setRenderer(renderer);

        return glSurfaceView;
    }

Upvotes: 3

Related Questions