Задать вопрос

Почему нельзя вызвать конструктор?

Есть класс Renderer реализующий интерфейс GLSurfaceView.Renderer и есть класс MyGLSurfaceView наследующий GLSurfaceView. Так вот в конструкторе MyGLSurfaceView не выходит вызвать конструктор Renderer. Стараюсь делать по примеру от гугл, но видимо что - то упускаю. Вылезает ошибка Cannot instantiate the type GLSurfaceView.Renderer

Вот собственно код
public class MyGLSurfaceView extends GLSurfaceView {
	
	private final Renderer mRenderer;
	
	 public MyGLSurfaceView(Context context) {
	        super(context);

	        // Create an OpenGL ES 2.0 context.
	        setEGLContextClientVersion(2);

	        // Set the Renderer for drawing on the GLSurfaceView
	        mRenderer = new Renderer();
	        setRenderer(mRenderer);

	        // Render the view only when there is a change in the drawing data
	        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
	    }
}


public class Renderer implements GLSurfaceView.Renderer {
	
	private Triangle mTriangle;
    private Square   mSquare;
	
	public static int loadShader(int type, String shaderCode){
		// create a vertex shader type (GLES20.GL_VERTEX_SHADER)
	    // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
		int shader = GLES20.glCreateShader(type);
		
		// add the source code to the shader and compile it
		GLES20.glShaderSource(shader, shaderCode);
		GLES20.glCompileShader(shader);
		
		return shader;
	}
	
	@Override
	public void onDrawFrame(GL10 gl) {
		 // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
        mTriangle.Draw();
	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height) {
		GLES20.glViewport(0, 0, width, height);
	}

	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		  // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        
     // initialize a triangle
        mTriangle = new Triangle();
        // initialize a square
        mSquare = new Square();
	}
}
  • Вопрос задан
  • 2265 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@nonrblGyN4ik
Обзавите класс который реализует GLSurfaceView.Renderer как-нибудь по-другому, например MyRender
Скорее всего new Render(); пытается создать экземпляр интерфейса GLSurfaceView.Renderer, посмотрите в Import, чтобы там импортировался ваш класс, а не интерфейс.
В итоге будет что-то типа mRender = new MyRender();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы