OpenGL ES 환경 빌드

Android 애플리케이션에서 OpenGL ES로 그래픽을 그리려면 컨테이너 이미지를 사용할 수 있습니다 이를 위한 더 간단한 방법 중 하나는 GLSurfaceViewGLSurfaceView.RendererGLSurfaceView는 OpenGL로 그린 그래픽의 뷰 컨테이너입니다. GLSurfaceView.Renderer는 이 뷰 내에 그려지는 내용을 제어합니다. 자세한 내용은 자세한 내용은 OpenGL ES 참조하세요.

GLSurfaceView는 OpenGL ES 그래픽을 애플리케이션입니다. 이 방법은 전체 화면 또는 전체 화면에 가까운 그래픽 뷰에서 선택하면 적합합니다. 레이아웃의 작은 부분에 OpenGL ES 그래픽을 통합하려는 개발자는 TextureView를 살펴보세요. DIY 개발자는 SurfaceView를 사용하여 OpenGL ES 뷰를 빌드할 수는 있지만 상당히 많은 추가 코드를 작성해야 합니다.

이 과정에서는 간단한 GLSurfaceViewGLSurfaceView.Renderer의 최소 구현을 완료하는 방법을 설명합니다. 애플리케이션 활동입니다.

매니페스트에서 OpenGL ES 사용 선언

애플리케이션에서 OpenGL ES 2.0 API를 사용하려면 다음을 추가해야 합니다. 선언을 추가해야 합니다.

<uses-feature android:glEsVersion="0x00020000" android:required="true" />

애플리케이션이 텍스처 압축을 사용하는 경우 어떤 압축 형식도 선언해야 합니다. 호환되는 기기에만 설치되도록 해야 합니다.

<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />

텍스처 압축 형식에 관한 자세한 내용은 OpenGL 개발자 가이드

OpenGL ES 그래픽의 활동 만들기

OpenGL ES를 사용하는 Android 애플리케이션에는 사용자 인터페이스입니다. 다른 애플리케이션과의 주요 차이점은 애플리케이션의 레이아웃에 있습니다. 많은 애플리케이션에서는 TextView, Button, ListView를 사용할 수 있지만 OpenGL ES를 사용하는 앱에서는 다음을 할 수 있습니다. GLSurfaceView도 추가합니다.

다음 코드 예에서는 GLSurfaceView를 기본 보기로 설정합니다.

Kotlin

class OpenGLES20Activity : Activity() {

    private lateinit var gLView: GLSurfaceView

    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity.
        gLView = MyGLSurfaceView(this)
        setContentView(gLView)
    }
}

자바

public class OpenGLES20Activity extends Activity {

    private GLSurfaceView gLView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity.
        gLView = new MyGLSurfaceView(this);
        setContentView(gLView);
    }
}

참고: OpenGL ES 2.0에는 Android 2.2 (API 수준 8) 이상이 필요합니다. 따라서 Android 프로젝트에서 해당 API 이상을 대상으로 해야 합니다.

GLSurfaceView 객체 빌드

GLSurfaceView는 OpenGL ES를 그릴 수 있는 특수 뷰입니다. 있습니다. 자체적인 기능은 많지 않습니다. 객체의 실제 그리기는 이 뷰에서 설정한 GLSurfaceView.Renderer입니다. 실제로 이 코드에서는 객체가 너무 얇기 때문에 확장을 건너뛰고 수정되지 않은 GLSurfaceView 인스턴스에 대한 IP 주소를 가져올 수 있지만 그렇게 해서는 안 됩니다. 이 클래스를 자세한 내용은 터치에 응답하기 이벤트 강의를 듣습니다.

GLSurfaceView의 필수 코드는 최소한의 코드이므로 일반적으로 이를 사용하는 활동에서 내부 클래스를 만들면 됩니다.

Kotlin

import android.content.Context
import android.opengl.GLSurfaceView

class MyGLSurfaceView(context: Context) : GLSurfaceView(context) {

    private val renderer: MyGLRenderer

    init {

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

        renderer = MyGLRenderer()

        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(renderer)
    }
}

자바

import android.content.Context;
import android.opengl.GLSurfaceView;

class MyGLSurfaceView extends GLSurfaceView {

    private final MyGLRenderer renderer;

    public MyGLSurfaceView(Context context){
        super(context);

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

        renderer = new MyGLRenderer();

        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(renderer);
    }
}

GLSurfaceView 구현에 추가적으로 선택사항인 또 다른 옵션은 다음과 같습니다. 를 사용하여 그리기 데이터가 변경될 때만 뷰를 그립니다. GLSurfaceView.RENDERMODE_WHEN_DIRTY 설정:

Kotlin

// Render the view only when there is a change in the drawing data
renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY

자바

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

이 설정은 사용자가 작업을 다시 시작할 때까지 GLSurfaceView 프레임을 다시 그리지 않습니다. requestRender()을(를) 통해 효율적으로 사용할 수 있습니다

렌더기 클래스 빌드

GLSurfaceView.Renderer 클래스 또는 렌더기의 구현 을 사용하는 것이 흥미롭게 시작됩니다. 이 수업 컨트롤 연결된 GLSurfaceView에 그려지는 내용 현재 어떤 것이 무엇인지 파악하기 위해 Android 시스템에서 호출하는 세 가지 메서드가 있습니다. GLSurfaceView에 그리는 방법:

  • onSurfaceCreated()~ 뷰의 OpenGL ES 환경을 설정하기 위해 한 번 호출됩니다.
  • onDrawFrame() - 각각에 대해 호출됨 뷰를 다시 그립니다.
  • onSurfaceChanged() - 호출 조건 뷰의 도형이 변경되는 경우(예: 기기의 화면 방향이 변경될 때)

다음은 OpenGL ES 렌더기의 기본 구현으로, GLSurfaceView의 검은색 배경:

Kotlin

import javax.microedition.khronos.egl.EGLConfig
import javax.microedition.khronos.opengles.GL10

import android.opengl.GLES20
import android.opengl.GLSurfaceView

class MyGLRenderer : GLSurfaceView.Renderer {

    override fun onSurfaceCreated(unused: GL10, config: EGLConfig) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f)
    }

    override fun onDrawFrame(unused: GL10) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
    }

    override fun onSurfaceChanged(unused: GL10, width: Int, height: Int) {
        GLES20.glViewport(0, 0, width, height)
    }
}

자바

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;

public class MyGLRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }

    public void onDrawFrame(GL10 unused) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

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

실행할 작업은 이것뿐입니다. 위의 코드 예제는 는 OpenGL을 사용하여 검은색 화면을 표시합니다. 이 코드는 그다지 흥미로운 작업을 하지 않지만 그래픽 요소를 그리기 시작하는 데 필요한 기초와 OpenGL입니다.

참고: OpenGL ES 2.0 API를 사용할 때 이러한 메서드에 GL10 매개변수가 있는 이유가 궁금할 수 있습니다. 이러한 메서드 서명은 Android 프레임워크 코드 유지를 위해 2.0 API에서 단순히 재사용됩니다. 간소화합니다.

OpenGL ES API에 익숙하다면, 이제 OpenGL ES API를 사용해 그래픽을 그리기 시작할 수 있습니다. 하지만 Cloud SQL을 사용하는 데 도움이 더 필요한 경우 다음 강의로 넘어가서 몇 가지 힌트를 더 살펴보세요.